用struts2.1.6作图片上传

最近项目里要用到上传图片功能,本来这是很简单的功能,不消半天就能搞定,可是我却捣鼓了两天,全因为下边的错误:
[color=red]ERROR [Engine] StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
......[/color]

在网上查原因,有人说是因为struts2.1.6版本包的问题,其中写文件要用到输入输出流,而struts跳转的return也是通过输出流写的,一前一后,会发生冲突;又有一种说法是说struts2.1.6版本的过滤器和servlet有冲突,导致程序中获取不到页面提交的file对象。

一般都会在web.xml里这样配置struts的过滤规则:

[color=red]<!-- 定义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>[/color]

这样配置会将所有类型的请求都拦截,包括servlet。

经多方求证,今天找到解决方法,通过servlet来解决,当然web.xml配置文件里的struts的过滤规则也要改一下:

[color=red]<!-- 定义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>[/color]

这样我们的servlet就可以访问了,我是这样配置的:

[color=red]<!-- 我的文件上传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>[/color]

这样,只要在页面中修改form的action为"/imgUpload"就可以了。
至于servlet内部如何写,就依个人喜好了,我个人是用了jspSmartUpload工具操作的。

希望可以对遇到像我的问题一样的朋友有一定的帮助!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值