最近项目里要用到上传图片功能,本来这是很简单的功能,不消半天就能搞定,可是我却捣鼓了两天,全因为下边的错误:
ERROR [Engine] StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
......
在网上查原因,有人说是因为struts2.1.6版本包的问题,其中写文件要用到输入输出流,而struts跳转的return也是通过输出流写的,一前一后,会发生冲突;又有一种说法是说struts2.1.6版本的过滤器和servlet有冲突,导致程序中获取不到页面提交的file对象。
一般都会在web.xml里这样配置struts的过滤规则:
<!-- 定义Struts2的FilterDispathcer过滤器 -->
<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>
这样配置会将所有类型的请求都拦截,包括servlet。
经多方求证,今天找到解决方法,通过servlet来解决,当然web.xml配置文件里的struts的过滤规则也要改一下:
<!-- 定义Struts2的FilterDispathcer过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- 定义struts2过滤规则:过滤后缀为.action和.jsp的请求 -->
<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>
这样我们的servlet就可以访问了,我是这样配置的:
<!-- 我的文件上传servlet类 -->
<servlet>
<servlet-name>imgUpload</servlet-name>
<servlet-class>cn.com.ServletUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imgUpload</servlet-name>
<url-pattern>/imgUpload</url-pattern>
</servlet-mapping>
这样,只要在页面中修改form的action为"/imgUpload"就可以了。
至于servlet内部如何写,就依个人喜好了,我个人是用了jspSmartUpload工具操作的。
希望可以对遇到像我的问题一样的朋友有一定的帮助!
分享到:
相关推荐
1,需要把jsonplugin-0.33.jar拷贝到Web-INF/lib目录下....2,在struts2.1.6的配置文件中进行配置,就是返回的类型是json,并且要为JSON数据单独创建一个Package,继承的包不再是struts-default,而是json-default
struts2.1.6apps!现在官网上都只有最新版本的。但是对于初学者学习struts2.1.6来说。这是个很好的资源、
全部 struts2.1.6 jar包 全部 struts2.1.6 jar包 全部 struts2.1.6 jar包
struts2.1.6.jar包,lib jar包
struts2.1.6 解决日历问题。区别struts2.0
Struts2.1.6 Spring2.5.6 Hibernate3.3.2_jar
struts2.1.6lib struts 2.1.6 lib 核心类库
struts2.1.6api. 想学习struts2的朋友们。希望能喜欢这个api,我也希望能给你们一点帮助。
struts2.1.6-全包All,以及包括struts2.1.6源码,实用有效
struts2.1.6 API chm文件格式的是本人自己创建的没有版权问题
struts2.1.6 所有jar包和官方源码
struts2.1.6apps struts 2.1.6 apps 示例应用
struts2.1.6开发包,其中有个包是api文档和一个源码包。将其他7个包放在项目下的Lib目录下,配置web.xml文件就Ok了
struts2.1.6解决乱码 补充 struts2.1.6解决乱码 补充 struts2.1.6解决乱码 补充 struts2.1.6解决乱码 补充
Struts2.1.6-all.zip 之 lib 欢迎下载
由于之前上传过一次struts2.1.6jar all.zip,但是里面打包错了,那个包是hibernate内容,请大家用struts2的用户不要再下载了,请下载本包实用。
Struts 2.1.6源码 要好好研究的
Struts2.1.6 所用jar包 下载,很完整,搭环境使用,挺好用的包
struts2.1.6-lib.rar struts2.1.6-lib.rar struts2.1.6-lib.rar
版本为struts2.1.6,分有两个文件夹,文件夹struts2_must的jar包是必需的,文件夹struts-2.1.6包含所有的jar包。