最近在struts2用到 FCKeditor,在上传图片时总是出错。
严重: Servlet.service() for servlet SimpleUploader threw exception
java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]
跟踪了一下源代码,发现struts2的filter拦截了上传文件的动作,
//org.apache.struts2.dispatcher.Dispatcher.java
public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
// don't wrap more than once
if (request instanceof StrutsRequestWrapper) {
return request;
}
String content_type = request.getContentType();
if (content_type != null && content_type.indexOf("multipart/form-data") != -1) {
MultiPartRequest multi = getContainer().getInstance(MultiPartRequest.class);
request = new MultiPartRequestWrapper(multi, request, getSaveDir(servletContext));
} else {
request = new StrutsRequestWrapper(request);
}
return request;
}
在这里又找不到
MultiPartRequest.class的实现类。于是出错了。
只要不让struts2拦截处理上传事件,就应该没问题了。
修改web.xml,把原来的
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/struts/*</url-pattern> </filter-mapping>如果只是改为 <url-pattern>*.action</url-pattern>之后标签又会出错的,所以再加一个 <url-pattern>*.jsp</url-pattern>
OK!!