struts2文件上传简单示例

本文详细介绍了如何使用Struts2实现文件上传功能,包括在struts.xml中配置拦截器堆栈`upFIleStack`,限制文件大小和类型。同时讲解了`testAction`无须指定class和method也能执行的原因,并指出所有action默认会经过`defaultStack`拦截器。此外,还展示了`UpFile`上传Action的实现和JSP页面的文件选择标签。
摘要由CSDN通过智能技术生成

 struts.xml

<interceptors> //定义一个文件上传的拦截器,该是从struts-default.xml中copy来改的
		<interceptor-stack name="upFIleStack">
			<interceptor-ref name="exception" />
			<interceptor-ref name="alias" />
			<interceptor-ref name="servletConfig" />
			<interceptor-ref name="i18n" />
			<interceptor-ref name="prepare" />
			<interceptor-ref name="chain" />
			<interceptor-ref name="debugging" />
			<interceptor-ref name="scopedModelDriven" />
			<interceptor-ref name="modelDriven" />
			<interceptor-ref name="fileUpload">  这里的总文件大小还受default.properties中的限制
				<param name="maximumSize">10240</param><!-- 单位是 byte,这里总文件大小也就是10kb了-->
				<param name="allowedTypes">image/jpeg,image/gif,image/png</param>
			</interceptor-ref>
			<interceptor-ref name="checkbox" />
			<interceptor-ref name="multiselect" />
			<interceptor-ref name="staticParams" />
			<interceptor-ref name="actionMappingParams" />
			<interceptor-ref name="params">
				<param name="excludeParams">dojo\..*,^struts\..*</param>
			</interceptor-ref>
			<interceptor-ref name="conversionError" />
			<interceptor-ref name="validation">
				<param name="excludeMethods">input,back,cancel,browse</param>
			</interceptor-ref>
			<interceptor-ref name="workflow">
				<param name="excludeMethods">input,back,cancel,browse</param>
			</interceptor-ref>
		</interceptor-stack>
</interceptors>

<action name="testAction">
			<result>/WEB-INF/jsp/struts2/index.jsp</result>
		</action>
		<action name="fileUpload"
			class="com.chenjun.eshop.staffManage.action.UpFile">
			<interceptor-ref name="upFIleStack" /><!-- 引用上面定义的拦截器 -->
			<result>/WEB-INF/jsp/struts2/result.jsp</result>
			<result name="input">/WEB-INF/jsp/struts2/index.jsp</result>
		</action>

为什么上面的testAction没有class,也没有method也能得到result页面呢,那是因为它执行的class是struts-default.xml中定义的   <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />,也就会执行它里面默认的execute方法了,返回success,result默认就是success,所以能够得到该页面,

可以发现struts-default.xml里面还有一段<default-interceptor-ref name="defaultStack"/>,也就是说所有的action都会经过这个拦截器。

为什么jsp标签能够访问action的属性值,集合的值,map的值,还是因此在struts-default.xml中有

<bean type="ognl.PropertyAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor" />
    <bean type="ognl.PropertyAccessor" name="java.util.Iterator" class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor" />
    <bean type="ognl.PropertyAccessor" name="java.util.Enumeration" class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor" />
    <bean type="ognl.PropertyAccessor" name="java.util.List" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" />
    <bean type="ognl.PropertyAccessor" name="java.util.Set" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
    <bean type="ognl.PropertyAccessor" name="java.util.Map" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" />
    <bean type="ognl.PropertyAccessor" name="java.util.Collection" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />

上面说的就是ognl能够访问的action的属性值类型,这个文件里面还定义了许多拦截器,常量等其他东西,可以研究研究。

除了上面一个文件,struts还有一个文件default.properties专门用来定义一些常量的,这些常量也是可以直接在struts.xml中来定义的,这样struts.xml中定义的就会覆盖default.properties中同名的了,像struts.objectFactory.spring.autoWire = name等,这个文件也可以研究下

上传action

public class UpFile extends ActionSupport
{
 private File <span style="color:#FF0000;">attachFile</span>; //对应页面的file控件名称
 private String <span style="color:#FF0000;">attachFile</span><span style="color:#CC0000;">ContentType</span>; //在attachFile后面加上ContentType,用来接收文件类型
 private String <span style="color:#FF0000;">attachFile</span><span style="color:#CC0000;">FileName</span>; //在attachFile后面加上FileName,用来接收文件名
    public String getAttachFileContentType()
{
    return attachFileContentType;
}

public void setAttachFileContentType(String attachFileContentType)
{
    this.attachFileContentType = attachFileContentType;
}

public String getAttachFileFileName()
{
    return attachFileFileName;
}

public void setAttachFileFileName(String attachFileFileName)
{
    this.attachFileFileName = attachFileFileName;
}

    @Override
    public String execute() throws Exception
    {
       return SUCCESS;
    }

    public File getAttachFile()
    {
        return attachFile;
    }

    public void setAttachFile(File attachFile)
    {
        this.attachFile = attachFile;
    }

}

上传jsp

<body>

	<s:form action="fileUpload" method="<span style="color:#FF0000;">post</span>" enctype="<span style="color:#FF0000;">multipart/form-data</span>">   post,multipart/form-data是文件上传必须这样写的
		<s:file name="<span style="color:#FF0000;">attachFile</span>" label="附件" />
		<s:submit />
	</s:form>
</body>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值