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();
        }
    }


Global site tag (gtag.js) - Google Analytics