`
zhaolianyang
  • 浏览: 97428 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2学习笔记十四(第14讲.Struts2的文件上传和下载续二)

阅读更多
Struts2的文件上传和下载续二
说明:使用struts2的框架来实现文件的上传下载。
把之前在web.xml中注释掉的关于filter的代码恢复。
一、在WebRoot根目录下创建一个upload.jsp页面,这个页面是用struts2来实现的:
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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>

<s:form action="upload" theme="simple">
    
    	<table align="center" width="40%" border="1">
    		<tr>
    			<td>username
    			</td>
    			<td>
    				<s:textfield name="username" ></s:textfield>
    			</td>
    		</tr>
    		<tr><td>password</td>
    			<td>
    				<s:password name="password" ></s:password>
    			</td>
    		</tr>	
    		
    		<tr><td>file</td>
    			<td>
    				<s:file name="file"></s:file>
    			</td>
    		</tr>
    		
    		<tr><td><s:submit value=" submit "></s:submit></td>
    			<td>
    				<s:reset value=" reset "></s:reset>
    			</td>
    		</tr>
    	</table>	
    </s:form>

</body>

</html>

二、在struts2.xml中配置上传文件的Action,并且注视掉全部关于拦截器的配置,以便不会造成干扰:
<?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.custom.i18n.resources" value="message">
	
	</constant>
	
	<package name="struts2" extends="struts-default">
		
		<!-- 
		<interceptors>
			<interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor">
				<param name="hello">world</param>
			</interceptor>
			
			<interceptor name="myInterceptor2" class="com.test.interceptor.MyInterceptor2">
			</interceptor>
			
			<interceptor name="myInterceptor3" class="com.test.interceptor.MyInterceptor3">
			</interceptor>
			
			<interceptor name="auth" class="com.test.interceptor.AuthInterceptor">
			</interceptor>
			
			<interceptor-stack name="myStack">
			
			
				<interceptor-ref name="myInterceptor"></interceptor-ref>
				<interceptor-ref name="myInterceptor2"></interceptor-ref> 
			
				
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
	
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
		-->
		
		<global-results>
			<result name="login" type="redirect">/login2.jsp</result>
		</global-results>
		
		<action name="login" class="com.test.action.LoginAction">
			<result name="input">/login2.jsp</result>
			<result name="success">/register2.jsp</result>
			<result name="failer">login2.jsp</result>
		</action>
		
		<action name="pointConverter" class="com.test.action.PointAction">
			<result name="success">/output.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction" method="test">
			<result name="success">/success.jsp</result>
			<result name="input">/register2.jsp</result>
			
			<!-- 
			<interceptor-ref name="auth"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
			
			
			<interceptor-ref name="myInterceptor3">
				<param name="excludeMethods">test,execute</param>
				<param name="includeMethods">test</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
			 -->
		</action>
		
		<action name="upload" class="com.test.action.UploadAction">
			<result name="success">/uploadResult.jsp</result>		
		</action>
		
		
	</package>
	
</struts>

三、在WebRoot根目录下创建一个显示信息的页面uploadResult.jsp:
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
    
<!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>

username: <s:property value="username"/><br>

password: <s:property value="password"/><br>

file: <s:property value="fileFileName"/>

</body>
</html>

说明:用struts2实现上传功能已经完成,但是当表单中输入汉字的时候会出现乱码现象,如下图:


解决的方法实在struts添加constant属性:<constant name="struts.i18n.encoding" value="gbk">
</constant>
<constant name="struts.multipart.saveDir" value="c:\"></constant>。修改之后如图:


功能:实现多个文件的上传,使用的是List列表来实现。
四、修改UploadAction.java文件:
package com.test.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

	private String username;
	
	private String password; 
	
	private List<File> file;
	
	private List<String> fileFileName;
	
	private List<String> fileContentType;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<File> getFile() {
		return file;
	}

	public void setFile(List<File> file) {
		this.file = file;
	}

	public List<String> getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(List<String> fileFileName) {
		this.fileFileName = fileFileName;
	}

	public List<String> getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(List<String> fileContentType) {
		this.fileContentType = fileContentType;
	}

	@Override
	public String execute() throws Exception {
		
		for(int i = 0 ; i < file.size() ; ++i){
			
			InputStream is = new FileInputStream(file.get(i));
			
			String root = ServletActionContext.getRequest().getRealPath("/upload");
			
			File destFile = new File(root,this.getFileFileName().get(i));
			
			OutputStream os = new FileOutputStream(destFile);
			
			byte[] buffer = new byte[400];
			
			int length = 0;
			
			while((length = is.read(buffer)) > 0){
				
				os.write(buffer,0,length);
			}
			
			is.close();
			
			os.close();
		}
		return SUCCESS;
	}
}

五、修改一下文件上传的页面upload.jsp,再添加两个上传的控件:
<body>

<s:form action="upload" theme="simple" enctype="multipart/form-data" method="post">
    
    	<table align="center" width="40%" border="1">
    		<tr>
    			<td>username
    			</td>
    			<td>
    				<s:textfield name="username" ></s:textfield>
    			</td>
    		</tr>
    		<tr><td>password</td>
    			<td>
    				<s:password name="password" ></s:password>
    			</td>
    		</tr>	
    		
    		<tr><td>file1</td>
    			<td>
    				<s:file name="file"></s:file>
    			</td>
    		</tr>
    		<tr><td>file2</td>
    			<td>
    				<s:file name="file"></s:file>
    			</td>
    		</tr>
    		<tr><td>file3</td>
    			<td>
    				<s:file name="file"></s:file>
    			</td>
    		</tr>
    		
    		<tr><td><s:submit value=" submit "></s:submit></td>
    			<td>
    				<s:reset value=" reset "></s:reset>
    			</td>
    		</tr>
    	</table>	
    </s:form>

</body>

显示效果如图:




  • 大小: 33.6 KB
  • 大小: 37.8 KB
  • 大小: 69.4 KB
  • 大小: 52.3 KB
1
4
分享到:
评论

相关推荐

    Struts1及14. Struts2学习笔记

    本学习笔记将对Struts1和Struts2进行详细解析。 **Struts1简介** Struts1是早期流行的MVC框架,它的核心是ActionServlet,负责处理HTTP请求,并通过ActionForm对象收集表单数据,然后调用Action类的方法进行业务...

    Struts2学习笔记2012

    ### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” &gt; “New” &gt; “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...

    Java/JavaEE 学习笔记

    Struts学习笔记...............263 Struts2.0..263 第一章 MVC Model.........................263 第二章 Struts Basic264 第三章 Action,Result & Struts2 Tag Library......................267 第四章 Data ...

    J2EE学习笔记(J2ee初学者必备手册)

    Struts学习笔记...............263 Struts2.0..263 第一章 MVC Model.........................263 第二章 Struts Basic264 第三章 Action,Result & Struts2 Tag Library......................267 第四章 Data ...

    Struts2学习笔记2011(详细图解)

    以上就是Struts2学习笔记中的主要内容,通过这些知识点的学习,开发者能够熟练地搭建和使用Struts2框架,构建高效、稳定的Web应用。同时,理解并掌握这些概念有助于进一步探索Struts2的高级特性,如拦截器、插件系统...

    Struts2 Basic 14_01 学习笔记(附带SSH所有的jar)

    在"Struts2 Basic 14_01 学习笔记"中,我们可以期待了解到Struts2的基础知识,以及如何将它与Spring框架集成,这通常被称为SSH(Struts2 + Spring + Hibernate)集成。SSH是一种常见的Java EE开发模式,用于处理业务...

    spring学习笔记

    目录 1.1 Spring 框架学习路线:...........................................................................................................................4 1.2 Spring 框架的概述:...........................

    牛人的spring学习笔记,非常适合初学者

    ### 牛人的Spring学习笔记,非常适合初学者 #### 第一课:面向抽象编程 面向抽象编程是一种编程思想,强调在程序设计过程中通过定义抽象层来分离业务逻辑与具体实现细节。这种方式有助于提高软件的可维护性和扩展...

    JSP 完全学习笔记 全

    **JSP完全学习笔记概述** JSP(JavaServer Pages)是一种动态网页技术,它结合了HTML、Java代码和脚本语言,使得开发者可以方便地创建交互式的Web应用程序。本学习笔记全面涵盖了JSP的关键概念、核心语法、常用标签...

    spring2.5_学习笔记.

    ### Spring2.5 学习笔记知识点概览 #### 第一课:面向抽象编程 - **概念理解**:面向抽象编程是一种设计模式,其核心思想是通过定义接口或抽象类来实现程序结构的设计,使具体实现与接口分离,增强系统的灵活性和...

    Java学习笔记-个人整理的

    {12.11.2}intersect与minus}{166}{subsection.12.11.2} {12.11.3}join}{166}{subsection.12.11.3} {12.11.3.1}cross join}{166}{subsubsection.12.11.3.1} {12.11.3.2}inner join}{167}{subsubsection.12.11.3.2...

    JavaWeb程序设计任务教程第2版课后题答案

    9. **Struts和Struts2**:Struts是基于MVC设计模式的JavaWeb框架,Struts2是其升级版本,增加了更多功能和灵活性,如拦截器和插件系统。 10. **JSF(JavaServer Faces)**:JSF是另一种JavaWeb UI框架,它提供组件...

    spring2.5 学习笔记

    ### Spring 2.5 学习笔记知识点梳理 #### 第一课:面向抽象编程 - **定义**:面向抽象编程是一种编程范式,强调通过抽象类或接口来设计程序结构,减少对具体实现的依赖。 - **优势**: - 提高了系统的可维护性与...

    java学习笔记

    ### Java学习笔记知识点详解 #### 一、Java平台概述 - **J2SE (Java Platform Standard Edition)**: 标准版Java开发平台,主要用于桌面应用软件的开发。 - **J2EE (Java Platform Enterprise Edition)**: 企业版...

    webwork学习笔记

    ### WebWork学习笔记知识点 #### 一、WebWork框架简介 - **定义**: WebWork是一个由OpenSymphony组织开发的MVC(Model-View-Controller)框架,专注于组件化和代码重用,适用于J2EE应用程序开发。 - **最新版本**:...

    springmvc第一天课堂笔记

    【SpringMVC基础概念】 ...通过这些基础知识的学习,你可以理解SpringMVC的核心概念,为后续的高级应用,如集合类型参数绑定、数据回显、文件上传、JSON交互、RESTful支持和拦截器的使用奠定坚实的基础。

    整理后java开发全套达内学习笔记(含练习)

    以“%”开头,[第几个数值$][flags][宽度][.精确度][格式] printf()的引入是为了照顾c语言程序员的感情需要 格式化输出 Formatter;格式化输入 Scanner;正则表达式 输出格式控制: 转义符: \ddd 1到3位8...

    JAVA SE阶段全部笔记

    #### 十四、简单的加法运算程序 ```java public class SimpleAddition { public static void main(String[] args) { int a = 5; int b = 10; int sum = a + b; System.out.println("The sum is: " + sum); } ...

Global site tag (gtag.js) - Google Analytics