把struts2配置好了以后就可以作我们想做的事了,比如文件上传到服务器:
1、首先需要在配置struts2时建的struts.xml文件中配置过滤器等相关信息(上一篇有配置方法)
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4 "http://struts.apache.org/dtds/struts-2.3.dtd">
5 <struts>
6 <constant name="struts.multipart.maxSize" value="4097152"></constant>
7 <package name="yskf" extends="struts-default">
8 <action name="logddd" class="com.maji.action.LoginAction">
9 <result name="success">/Success.jsp</result><!-- 上传成功跳到成功页面 -->
10 <result name="input">/Failed.jsp</result><!-- 上传失败跳到失败页面 input为上传失败时返回的结果-->
11 <interceptor-ref name="fileUpload"><!-- 过滤器,name值固定-->
12 <param name="maximumSize">4097152</param><!-- 限定上传文件大小(字节) -->
13 <param name="allowedTypesSet">text/plain,image/jpeg</param><!-- 限定类型 -->
14 <param name="allowedExtensionsSet">.txt,.jpg</param><!-- 后缀名 -->
15 </interceptor-ref>
16 <interceptor-ref name="defaultStack"></interceptor-ref><!-- struts默认的拦截器栈,不可少 -->
17 </action>
18 </package>
19 </struts>
2、创建文件上传页面,用表单提交:
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <%@ taglib prefix="s" uri="/struts-tags" %><!-- 导入struts标签库,不需要用OGNL则不必 -->
4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5 <html>
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8 <title>文件上传</title>
9 </head>
10 <body>
11 <!-- 提交到struts.xml的action,请求方式为post,enctype固定为 "multipart/form-data"-->
12 <s:form action="logddd" method="post" enctype="multipart/form-data">
13 <s:file name="BTG" /><!-- 用file Type框,name属性必不可少 -->
14 <s:submit value="login" />
15 </s:form>
16 </body>
17 </html>
3、创建一个action类,处理文件流:
1 package com.maji.action;
2
3 import java.io.File;
4 import org.apache.commons.io.FileUtils;
5 import com.opensymphony.xwork2.ActionSupport;
6 /**
7 * 该类继承ActionSupport,并重写execute方法
8 * @author Administrator
9 * 2017-09
10 */
11 public class LoginAction extends ActionSupport {
12 private static final long serialVersionUID = 6015695024096389723L;//序列化
13 private File BTG; //文件对象,与文件上传界面的Type-file的name属性值保持一致
14 private String BTGFileName; //文件名(对象名+FileName)
15 private String BTGContentType; //文件类型(对象名+ContentType)
16
17 @Override
18 /**
19 *重写execute方法
20 */
21 public String execute() throws Exception {
22 String path ="D:\Desktop\mv\"+BTGFileName; //文件上传到的目标目录+文件名
23 FileUtils.copyFile(BTG, new File(path)); //把文件流复制到目标目录的目标文件中
24 return SUCCESS; //返回一个String,用于struts.xml接收并判断,常量SUCCESS的值为"success"
25 }
26
27 /*为对象名、文件名、文件类型添加Access方法,必不可少*/
28 public File getBTG() {
29 return BTG;
30 }
31
32 public void setBTG(File bTG) {
33 BTG = bTG;
34 }
35
36 public String getBTGFileName() {
37 return BTGFileName;
38 }
39
40 public void setBTGFileName(String bTGFileName) {
41 BTGFileName = bTGFileName;
42 }
43
44 public String getBTGContentType() {
45 return BTGContentType;
46 }
47
48 public void setBTGContentType(String bTGContentType) {
49 BTGContentType = bTGContentType;
50 }
51
52
53 }
4、为了方便观察,我们可以做一个成功界面和失败界面,文件名分别对应struts.xml中的<result name="success">、<result name="input">目标路径即可。