Struts和FCK完美配合

一· 问题描述与分析

部署,启动,运行,访问,貌似编辑器没什么问题。但是上传图片时问题出现了,图片传不上去,同时后台出现异常(java.lang.IndexOutOfBoundsException: Index: 0, Size: 0)。

但是我们完全是按照FCKEditer-javaDEMO配置的,而且在没有Struts2的环境中是完全正常的,所以我们初步推断出产生这个问题的原因。

由于struts2对所有的请求进行过滤,对HttpServletRequest进行了封装,FCKEditer已经无法拿到原来的HttpServletRequest,所以当FCKEditerrequest.getinputStream的时候就会出错!

二·网上解决方案分析

网上主要有三种解决方案,都有不同的问题。如果你只想解决问题,可以直接看第四

  1. 修改Web.xml     原文链接: http://www.javaeye.com/topic/150989
  2. 自定义Filter(修改Struts2源代码)   原文链接:http://hi.baidu.com/hsazj/blog/item/33f032119404251bb9127b89.html
  3. 自定义Filter(继承-覆写)   原文链接:http://www.po-soft.com/blog/yongtree/566.html

方案一存在的问题:

对于没有.action后缀的应用无效
在struts2.1中会报错
可能会留下一些隐患

方案二存在的问题

需要struts2的源代码
该拦截器的代码不能持续和应用中struts2版本同步
修改源代码是不被建议的做法

方案三存在的问题

if(“/fckeditor/editor/filemanager/connectors/fileupload”.equals(request.getRequestURI()))不正确
request.getRequestURI() 取到的值为形如 /应用名/fckeditor/editor/filemanager/connectors/php/upload.php的字符串
应该改为if (“/fckeditor/editor/filemanager/connectors”.equals(request.getServletPath()))

 

 

三·

最简单的解决方案


综合几个方案,我们可以这样解决:

1、 新建一个Java类,继承自StrutsPrepareAndExecuteFilter类,如com.fuyouit.filter.FckPassFilter

2、 覆写StrutsPrepareAndExecuteFilter的doFilter方法

 

 

@Override
 public void doFilter(ServletRequest req, ServletResponse res,
   FilterChain chain) throws IOException, ServletException {
  HttpServletRequest request = (HttpServletRequest) req;
  if ("/fckeditor/editor/filemanager/connectors".equals(request.getServletPath()))  {
   chain.doFilter(req, res);
  }
  else
  {
   super.doFilter(req, res, chain);
  }
 }

 

 

再到web.xml中修改struts2拦截器

 

<servlet-mapping>
  <servlet-name>Connector</servlet-name>
  <url-pattern>
    /fckeditor/editor/filemanager/connectors/*
   </url-pattern>
 </servlet-mapping>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值