zoukankan      html  css  js  c++  java
  • struts2文件上传

    Struts2上传文件


    需要注意:Struts2需要运行在JRE1.5及以上版本


    Struts2支持三种类型的上传组件
    Struts2默认采用了apache commons-fileupload


    1、创建Java Web项目


    2、引入Struts2的依赖包,将依赖包拷贝到WEB-INF/lib下
    * commons-logging-1.0.4.jar
    * freemarker-2.3.15.jar
    * ognl-2.7.3.jar
    * struts2-core-2.1.8.1.jar
    * xwork-core-2.1.6.jar
    * commons-fileupload-1.2.1.jar


    需要引入commons-fileupload相关依赖包
    * commons-io-1.3.2.jar
    * commons-fileupload-1.2.1.jar

    3、在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDispatcher
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>


        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        


    4、提供struts2配置文件struts.xml,放到src下

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
    	<!--设置字符编码集,可以避免文件名乱码-->
    	<constant name="struts.i18n.encoding" value="GB18030" />
    	
    	<!--设置上传文件的最大允许大小-->
    	<constant name="struts.multipart.maxSize" value="2097152000" />
    
    	<!-- 当struts.xml配置文件发生修改,会立刻加载,在生产环境下最好不要配置 -->
    	<constant name="struts.configuration.xml.reload" value="true"/>
    	<!-- 会提供更加友好的提示信息 -->
    	<constant name="struts.devMode" value="true"/>
    	<!-- 需要继承struts-default包,这样就拥有的最基本的功能 -->
    	<package name="upload-package" extends="struts-default">
    		<action name="upload" class="com.bjpowernode.struts2.UploadTestAction">
    			<result>/success.jsp</result>
    		</action>
    	</package>
    </struts>




    5、建立JSP(index.jsp(上传文件页面)、success.jsp)

    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="upload.action" method="post" enctype="multipart/form-data"> 
    		标题:<input type="text" name="title"><br>
    		文件:<input type="file" name="myFile"><br>
    		<input type="submit" value="上传">
    	</form>
    </body>
    </html>



    6、创建Struts2的Action,Struts2的action可以不用继承Struts2框架中的任何类
       也不用实现Struts2框架中的任何接口,所以Struts2的Action可以是一个POJO(纯粹的Java对象)
       所以Struts2的Action测试更容易
       
       Struts2缺省方法名称:public String execute() throws Exception;


       取得文件名称->>规则:输入域的名称+固定字符串FileName
    取得文件数据->>规则:File 输入域的名称

    取得内容类型->>规则:输入域的名称+固定字符串ContentType

    package com.bjpowernode.struts2;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import com.opensymphony.xwork2.Action;
    
    public class UploadTestAction {
    	
    	private String title;
    	
    	//可以得到上传文件的名称
    	//规则:输入域的名称+固定字符串FileName
    	private String myFileFileName;
    	
    	//取得文件数据
    	//规则:File 输入域的名称
    	private File myFile; 
    	
    //	//取得内容类型
    //	//规则:输入域的名称+固定字符串ContentType
    //	private String myFileContentType;
    	
    	public String getMyFileFileName() {
    		return myFileFileName;
    	}
    
    
    	public void setMyFileFileName(String myFileFileName) {
    		this.myFileFileName = myFileFileName;
    	}
    
    	public String getTitle() {
    		return title;
    	}
    
    
    	public void setTitle(String title) {
    		this.title = title;
    	}
    
    
    	public File getMyFile() {
    		return myFile;
    	}
    
    
    	public void setMyFile(File myFile) {
    		this.myFile = myFile;
    	}
    
    
    //	public String getMyFileContentType() {
    //		return myFileContentType;
    //	}
    //
    //
    //	public void setMyFileContentType(String myFileContentType) {
    //		this.myFileContentType = myFileContentType;
    //	}
    //	
    
    	public String execute() throws Exception {
    		InputStream is = null;
    		OutputStream os = null;
    		try {
    			is = new BufferedInputStream(
    					new FileInputStream(myFile));
    			os = new BufferedOutputStream(
    					new FileOutputStream("c:\" + myFileFileName));
    			byte[] buffer = new byte[1024];
    			int len = 0;
    			while ((len = is.read(buffer)) > 0) {
    				os.write(buffer, 0, len);
    			}
    		}finally {
    			if (is != null) {is.close();}
    			if (os != null) {os.close();}
    		}
    		return Action.SUCCESS;
    	}
    }


       
    7、在Action中提供getter和setter方法,便于收集数据(这样收集数据的模式一般可以成为属性驱动模式)


    8、将JSP和Action配置到struts.xml配置文件中


    9、了解struts-default.xml配置文件,default.properties,Struts2的默认后缀为.action

  • 相关阅读:
    Python匹马行天下之_循环
    Hello world!
    Python匹马天下行之python基本语法
    Python匹马行天下之python之父
    Python匹马行天下之面向对象
    Python匹马行天下之运算符
    Python匹马行天下之初识python!
    跨域问题学习记录 CORS解决的2种方法
    Linux系统运维成长记
    关于倒计时new Date().getTime()出现NaN
  • 原文地址:https://www.cnblogs.com/reblue520/p/6239918.html
Copyright © 2011-2022 走看看