1. FCKeditor 介绍
FCKeditor 这个开源的HTML 文本编辑器可以让web 程序拥有如MS Word 这样强大的编辑功能.FCKeditor 支持当前流行的浏览器如IE 5.5+, Firefox 1.0+, Mozilla 1.3+与Netscape 7+等。FCKeditor官司方网址:http://www.fckeditor.net/
FCKeditor在线DEMO:
FCKeditor下载直址:
2. FCKeditor上传配置
1.在web.xml中配置
Connector com.fredck.FCKeditor.connector.ConnectorServlet baseDir /UserFiles/ 1 Connector /fckeditor/editor/filemanager/connectors/* SimpleUploader com.fredck.FCKeditor.uploader.SimpleUploaderServlet baseDir /UserFiles/ enabled true AllowedExtensionsFile DeniedExtensionsFile php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi AllowedExtensionsImage jpg|gif|jpeg|png|bmp DeniedExtensionsImage AllowedExtensionsFlash swf|fla DeniedExtensionsFlash 1 SimpleUploader /fckeditor/simpleuploader
要先在WebRoot下新建一个文件夹UserFiles,导入架包FCKeditor-2.3.jar,commons-fileupload-1.1.1.jar;
2.在editor/fckconfig.js中的325行找到上传的代码,下图中的testservlet1就是你的项目名其他的不用改,还有那个fckeditor是页面上新建的路径3.新建一个页面addContent.jsp,然后引用fckeditor.js
FCKeditor
在这个页面如果写了textare,在下面的javascript里 调用fck.ReplaceTextarea();,他是根据name的值替换的 如果没有写则调用fck.create();
再建一个default_do.jsp页面接收
My JSP 'default_do.jsp' starting page <%String contest = new String(request.getParameter("contest").getBytes("ISO8859_1"), "GB2312");out.print(contest);%>
3.struts2 FCKeditor不能上传图片的问题
前提是,FCKeditor已经整合到你的Web项目中,FCKeditor已经可以使用,但就是在上传图片的时候一直停住不动,如下图。如果FCKeditor单纯地在jsp页面上显示,不会存在这样的问题。但是如果FCKeditor与Struts整合,就会出现这样的问题。造成此问题的原因就是Struts的拦截器,在web.xml配置文件中,可以清楚的看到:
struts2 /*
就是上面这个配置,Struts会拦截所以以“/”开头的URL
在FCKeditor的配置中,FCKeditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,FCKeditor的部分servlet配置如下:
Connector /fckeditor/editor/filemanager/connectors/*
现在就很明了了,struts拦截所有以“/”开头的URL,FCKeditor的servlet拦截所有以“/fckeditor/editor/filemanager/connectors/”开头的URL,当你使用FCKeditor上传图片的时候,URL中包含有“/”(指网站根目录),优先被struts的拦截器拦截,这样上传图片的URL请求自然就不会转发到FCKeditor的servlet,所以我们上传图片也就不成功。
网上有很多解决方法,但多数是修改struts的拦截范围,如将"/*"改成"*.do"或"*.action"之类的。这不是一个好方法,因为在我的项目中,我没有使用do或action的URL扩展,这样显然不能解决我的问题,那么有没有一个更加完美的解决方法呢?
答案是肯定的。我自己定义了一个过滤器MyStrutsPrepareAndExecuteFilter.java,让它继承Struts2的过滤器StrutsPrepareAndExecuteFilter,完整代码如下:
public class MyStrutsPrepareAndExecuteFilter extends StrutsPrepareAndExecuteFilter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; if (request.getRequestURI().indexOf("fckeditor") != -1) { chain.doFilter(req, res); } else { super.doFilter(req, res, chain); } }}
自定义的过滤器写完之后,要在web.xml中更改struts的拦截器类,不能再使用struts的默认拦截器类StrutsPrepareAndExecuteFilter。但是请放心,自定义的过滤器FCKFilter继承了StrutsPrepareAndExecuteFilter里的所有的方法,因此项目依然照常运行。(被注释的是原来的配置)
struts2 com.sky.common.util.MyStrutsPrepareAndExecuteFilter
OK,该方法巧妙的解决了struts2和FCKeditor整合后不能上传图片的问题,需要改动的系统配置非常少,只需自定义一个拦截器,然后改一下struts的拦截器类为自定义的拦截器类,就这么简单……