- 浏览: 21406 次
- 性别:
- 来自: 大连
文章分类
最新评论
Struts2完成文件的上传功能实例
10级学员 郞志课堂笔记
在这里通过一个实例简单写一下struts2实现文件上传的流程。
首先通过手写的方式写一个上传的流程
第一步:创建相应的jsp页面
- <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'upload.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <div align="center">
- <h1>文件上传</h1>
- <!-- 此处的enctype属性必须要更改,一般此处不需要更改,默认为application/x-www-form-urlencoded,它只处理表单里的value属性传递的是字符串,但是当上传文件时必须要改为:multipart/form-data
- -->
- <form action="${pageContext.request.contextPath }/upFile.action" enctype="multipart/form-data" method="post">
- 上传文件:<input type="file" name="upload"/><br/>
- <input type="submit" value="上传">"
- </form>
- </div>
- </body>
- </html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'upload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <div align="center"> <h1>文件上传</h1> <!-- 此处的enctype属性必须要更改,一般此处不需要更改,默认为application/x-www-form-urlencoded,它只处理表单里的value属性传递的是字符串,但是当上传文件时必须要改为:multipart/form-data --> <form action="${pageContext.request.contextPath }/upFile.action" enctype="multipart/form-data" method="post"> 上传文件:<input type="file" name="upload"/><br/> <input type="submit" value="上传">" </form> </div> </body> </html>
注意:
Form表单的Enctype属性有以下三个值:
1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。
2) multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。(经常用)
3) text/plain:这种方式主要适用于直接通过表单发送邮件的方式。
文件上传是web应用经常用到的一个知识。原理是,通过为表单元素设置enctype=”multipart/form-data”属性,让表单提交的数据以二进制编码的方式提交,在接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。
页面效果:
第二步:编写对应的action文件
- package cn.csdn.hr.up.action;
- import java.io.File;
- import org.apache.commons.io.FileUtils;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class UploadAction extends ActionSupport{
- private static final long serialVersionUID = 1L;
- // 以下封装的参数是固定的,为:文件名 文件名+ContentType 文件名+FileName
- //上传文件
- private File upload;
- //上传文件的类型
- private String uploadContentType;
- //上传文件的名称
- private String uploadFileName;
- public File getUpload() {
- return upload;
- }
- public void setUpload(File upload) {
- this.upload = upload;
- }
- public String getUploadContentType() {
- return uploadContentType;
- }
- public void setUploadContentType(String uploadContentType) {
- this.uploadContentType = uploadContentType;
- }
- public String getUploadFileName() {
- return uploadFileName;
- }
- public void setUploadFileName(String uploadFileName) {
- this.uploadFileName = uploadFileName;
- }
- @Override
- public String execute() throws Exception {
- //声明文件上传的路径
- String path = ServletActionContext.getServletContext().getRealPath("/upload");
- //根据路径名创建一个文件
- File file = new File(path);
- //判断file是否存在,如果不存在,则自动创建一个
- if(!file.exists()){
- file.mkdirs();
- }
- //通过调用copyFile()方法将指定的文件copy到指定的路径中
- FileUtils.copyFile(upload, new File(file, uploadFileName));
- return SUCCESS;
- }
- }
package cn.csdn.hr.up.action; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport{ private static final long serialVersionUID = 1L; // 以下封装的参数是固定的,为:文件名 文件名+ContentType 文件名+FileName //上传文件 private File upload; //上传文件的类型 private String uploadContentType; //上传文件的名称 private String uploadFileName; public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } @Override public String execute() throws Exception { //声明文件上传的路径 String path = ServletActionContext.getServletContext().getRealPath("/upload"); //根据路径名创建一个文件 File file = new File(path); //判断file是否存在,如果不存在,则自动创建一个 if(!file.exists()){ file.mkdirs(); } //通过调用copyFile()方法将指定的文件copy到指定的路径中 FileUtils.copyFile(upload, new File(file, uploadFileName)); return SUCCESS; } }
第三步:在struts2配置文件中定义UploadAction文件
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
- "http://struts.apache.org/dtds/struts-2.3.dtd">
- <struts>
- <package name="upload" extends="struts-default">
- <action name="upFile" class="cn.csdn.hr.up.action.UploadAction">
- <!-- 上传成功后跳转到success.jsp页面 -->
- <result name="success">/sucess.jsp</result>
- <!-- 上传失败后返回到upload.jsp页面 -->
- <result name="input">/upload.jsp</result>
- </action>
- </package>
- </struts>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="upload" extends="struts-default"> <action name="upFile" class="cn.csdn.hr.up.action.UploadAction"> <!-- 上传成功后跳转到success.jsp页面 --> <result name="success">/sucess.jsp</result> <!-- 上传失败后返回到upload.jsp页面 --> <result name="input">/upload.jsp</result> </action> </package> </struts>
这里就完成了手动上传文件的功能,可以通过Tomcat等服务器测试一下了。成功后会跳转到success.jsp页面:
显示文件上传成功。
上面是为了让大家更加了解文件上传的内部处理过程,其实struts2已经通过拦截器封装好了文件上传的功能,我认为封装的还是非常完整的。
上面实现的功能完全可以用以下拦截器去实现:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
- "http://struts.apache.org/dtds/struts-2.3.dtd">
- <struts>
- <!--
- 因为在struts.properties文件中指明了struts文件上传的默认大小为2M <constant
- name="struts.multipart.maxSize" value="1024*1024*2"></constant>
- -->
- <package name="upload" extends="struts-default">
- <!-- 通过全局定义当上传出错时返回到update.jsp页面 -->
- <global-results>
- <result name="input">/update.jsp</result>
- </global-results>
- <action name="upload" class="cn.csdn.upload.action.UploadAction">
- <interceptor-ref name="fileUpload">
- <!-- 限制上传文件的格式 -->
- <param name="allowedTypes">image/JPEG,image/bmp,image/pjpeg,image/gif</param>
- <!--
- 添加一个拦截器的时候虽然在这里设置了文件上传大小的限制,但是由于
- 在struts.properties文件中有struts文件的设置所以在上面必须添加常量设置
- -->
- <param name="maximumSize">10485760</param>
- </interceptor-ref>
- <!-- 当添加一个拦截器的时候,那么默认的拦截器必须手动添加 -->
- <interceptor-ref name="defaultStack"></interceptor-ref>
- <!-- 依赖注入属性 -->
- <!-- 设置上传文件的路径 -->
- <param name="savePath">/upload</param>
- <!-- 文件上传成功后跳转到success.jsp页面 -->
- <result name="success">/test.jsp</result>
- </action>
- </package>
- </struts>
相关推荐
"张孝祥Struts视频源代码"很可能是由知名IT讲师张孝祥制作的一系列关于Struts框架的教程,其中包含了相应的源代码,帮助学习者通过实际操作理解Struts的工作原理和应用。 在深入探讨Struts框架之前,我们首先需要...
### Struts2标签详解及具体实例解析 #### 一、概述 Struts2是一个基于MVC模式的开源框架,它提供了丰富的标签库来简化Web应用的开发过程。这些标签不仅功能强大,而且易于使用,可以帮助开发者快速构建动态网页。...
"redirectAction"是Struts2独有的,它内部会使用"redirect"实现,但是增加了对Struts2内部动作调用的支持。这意味着你可以直接重定向到另一个Action,而不需要提供完整的URL。此外,它还支持通过Action上下文传递...
- 书籍《软件开发新课堂 Struts2 基础与案例开发详解》光盘中的源码,是学习Struts2的宝贵实践材料,通过阅读和分析代码,可以深入理解Struts2的内部机制和实际应用。 - 视频教程:如果光盘内包含视频教程,建议...
总结来说,这个教程深入讲解了如何在WebWork 2.2.7环境中使用Apache Commons FileUpload来实现文件上传功能,包括配置、源代码实例以及异常处理。通过遵循这些步骤,开发者可以构建健壮的文件上传功能,同时处理大...
总结来说,“诚欣企业免费电子商城”是一个典型的企业级电商系统实例,通过JSP+Struts2的组合,实现了高效、稳定、易扩展的电商功能。对于想要学习Web开发或提升Struts2应用能力的开发者来说,这是一个非常有价值的...
在描述中提到的"Struts2入门实例详解的源代码"是一个简单的应用,展示了如何使用Struts2框架创建一个基础的web项目。这个小例子通常包括以下组件: 1. **Struts2配置文件** (struts.xml): 这是Struts2的核心配置...
9. **第9章**:可能讲解Struts2的文件上传和下载功能,包括使用Commons FileUpload库处理文件上传,以及如何实现文件下载。 10. **第10章**:可能涉及到Struts2与Spring的整合,展示了如何在Struts2应用中使用...
### 详解Struts1的配置文件 #### 一、引言 在Java Web开发中,Struts1框架作为MVC架构的一种实现,被广泛应用于构建动态网站和企业级应用程序。Struts1的核心功能之一在于其强大的配置文件机制,通过XML格式的配置...
这可能表示书中包含了Web应用的实际部署结构,`WEB-INF`通常包含`web.xml`配置文件,章节目录可能包含各章节讲解的源代码示例,而`pages`目录可能是存放JSP或其他视图文件的地方。 学习Struts 2,你需要理解它的...
【标题】"购物车源代码(struts+hibernate)"是指一个基于Struts和Hibernate框架实现的电子商务系统中的购物车功能的源代码。这个项目利用了这两种技术来构建后端逻辑,提供用户交互和数据持久化的解决方案。 【描述...
本资料是关于Struts2的深入详解,包含了各个章节的源代码,有助于读者更好地理解和实践Struts2的核心概念和技术。 1. **MVC模式**:MVC模式是软件设计中的一种架构模式,将业务逻辑、数据和用户界面分离,使得...
你可以逐步查看源代码,了解各个部分的工作原理,并进行调试。 通过这个入门实例,你不仅可以了解Struts2的基本结构,还能实践配置和运行一个简单的Struts2应用。这将为你后续深入学习Struts2,乃至其他Java web...
- **Struts**:一个开放源代码的MVC框架,用于简化Java Web应用程序的开发。 - **版本**:Struts1为早期版本,被广泛应用于许多项目中。 **2.2 核心组件** - **ActionServlet**:总控制器,处理所有用户请求,并将...
"Struts2.1权威指南"是一本详细阐述Struts2.1框架的书籍,其光盘源代码包含了书中实例的完整实现,帮助读者深入理解和应用Struts2.1。 在第六章中,我们可以预想会涵盖以下几个关键知识点: 1. **Action与结果类型...
【SSH2框架详解】SSH2框架,即Struts2、Spring和Hibernate的组合,是JavaEE企业级开发中广泛使用的框架。在这个全注解实例中,我们将深入理解如何利用Struts2.1.6、Spring2.5.6和Hibernate3.3.1构建应用程序,避免...
Struts2和Shiro是两个在Java Web开发中常用的框架,它们各自负责不同的领域。Struts2是一个MVC...在提供的压缩包文件`struts2shiro`中,可能包含了示例代码、配置文件等资源,帮助开发者理解和实践这个集成过程。