fckeditor 2.6 jsp 中上传功能 与 strut2 中过滤器的问题

来源:互联网 发布:sql数据库修复大师 编辑:程序博客网 时间:2024/05/23 16:01

原来使用strut1和strut2。然后上fckeditor。发现上传功能出问题。提示如下

Servlet.service() for servlet ConnectorServlet threw exception
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at net.fckeditor.connector.Dispatcher.doPost(Dispatcher.java:255)
    at net.fckeditor.connector.ConnectorServlet.doPost(ConnectorServlet.java:128)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

看了看大概是过滤器的问题。下面是原来的过滤器配置:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

还有一个StrutsPrepareAndExecuteFilter也是一样

因此只要让过滤器不要处理fckeditor的那部分就好把<url-pattern>/*</url-pattern>改成

<servlet-name>action</servlet-name>就可以了

或者可以把需要由struts处理的归到某个特定的路径,比如/youSite/struts/*这样,然后把url-pattern改为youSite/struts/*;都可以目的是一样的。其实这里最简单的方法就是把不需要有struts过滤的页面直接排除掉,但是tomcat不支持这种方法(应该来说是servlet目前的规范还不支持,最新的应该是2.5吧)。但是有的servlet容器是支持的,比如Resin就支持这种情况,因为它的过滤功能中支持正则表示法(regular expression)。具体可以查看 http://www.caucho.com/resin-3.0/config/webapp.xtp#filter-mapping