Struts2文件上传出现严重: Servlet.service() for servlet default threw exception java.lang
lengdian
2010-04-10
首先声明一下,文件是可以上传的成功的,但是会出现下面的异常。看着挺不爽的。
我没有用到根本servlet,但是大家知道,Struts2底层是用servlet来进行文件上传的 下面是抛出的异常 2010-4-10 11:07:46 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet default threw exception java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407) at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) 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:191) 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:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619) 下面是jsp上的代码 <form action="test/uploadPic.action" method="post" enctype="multipart/form-data"> <input type="file" name="myFile" style="width: 90%"><br> <input type="submit" > </form> 下面是action中的代码 public class UploadPic extends ActionSupport { private File myFile; private String myFileFileName; private String imgFileName; //set与get方法就不贴出来了 @Override public String execute() throws Exception { //文件上传后重命名 this.imgFileName = FileUpload.generateFileName(myFileFileName); //上传文件路径 File dst = new File(FileUpload.getFileUploadPath("/uploadFile123456", imgFileName)); //上传文件操作 FileUpload.copyFile(myFile, dst); return SUCCESS; } 下面是struts.xml文件(用到spring) <package name="test" extends="struts-default" namespace="/test"> <action name="uploadPic" class="uploadPic"> <result>/main.jsp</result> </action> </package> 如果不处理这个异常,也没关系,但是最好还是把它解决掉吧,请问大家,怎么解决这个问题? 谢谢。。。。。 |
|
Nature_night
2010-04-12
朋友,我也遇到和你一样的异常。不过我是struts2下载的程序,也可以正常下载。
希望大侠能指点一下。谢谢,期待解决! |
|
lengdian
2010-04-13
麻烦朋友们发表一下自己的看法好吗?
|
|
Nature_night
2010-04-13
lengdian 写道 麻烦朋友们发表一下自己的看法好吗?
根据网上资料,我个人认为是因为response两次输出了输出流,从而产生了异常. 而struts2里我们在下载时并没有直接操作response对象.所以我想可能是struts2在下载时返回了我们要下载的文件流,同时又在响应结果时使用到了response即我们在action()最后那里"return SUCCESS". 而这种同时的情况是有概率的。当请求下载的高潮时可能性高一些。 |
|
lengdian
2010-04-13
引用 Nature_night 你说的很有道理,但是这个问题总需要解决得。 还需要再想想,怎么解决这个问题啊。 |
|
gogole_09
2010-04-14
楼主,我这里贴上tomcat的源代码, 你看看能不能得到一些提示:
public Map getParameterMap() { if (request == null) { //ResponseFacade.java:第407行 throw new IllegalStateException( sm.getString("requestFacade.nullRequest")); } if (Globals.IS_SECURITY_ENABLED){ return (Map)AccessController.doPrivileged( new GetParameterMapPrivilegedAction()); } else { return request.getParameterMap(); } } |