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

jsp\struts1.2\struts2 中文件上传

    博客分类:
  • J2EE
阅读更多
刚刚做了三个文件上传的Demo
a.在jsp中简单利用Commons-fileupload组件实现
b.在struts1.2中实现
c.在sturts2中实现
现在把Code与大家分享一下..
注:此为三个简单Demo,仅供练习用,并没有做太多上传限制
如有兴趣可以自行查看相关文档说明

一.在JSP环境中利用Commons-fileupload组件实现文件上传
   1.页面upload.jsp清单如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>The FileUpload Demo</title>
  </head>
  
  <body>
    <form action="UploadFile" method="post" enctype="multipart/form-data">
    	<p><input type="text" name="fileinfo" value="">文件介绍</p>
    	<p><input type="file" name="myfile" value="浏览文件"></p>
    	<p><input type="submit" value="上 传"></p>
    </form>
  </body>
</html>

注意:在上传表单中,既有普通文本域也有文件上传域

2.FileUplaodServlet.java清单如下:
package org.chris.fileupload;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.*;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUplaodServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
		
		//文件的上传部分
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		
		if(isMultipart)
		{
			try {
				FileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload fileload = new ServletFileUpload(factory);
				
//				 设置最大文件尺寸,这里是4MB    
				fileload.setSizeMax(4194304);
				List<FileItem> files = fileload.parseRequest(request);
				Iterator<FileItem> iterator = files.iterator();	
				while(iterator.hasNext())
				{
					FileItem item = iterator.next();
					if(item.isFormField())
					{
						String name = item.getFieldName();
						String value = item.getString();
						System.out.println("表单域名为: " + name + "值为: " + value);
					}else
					{
						//获得获得文件名,此文件名包括路径
						String filename = item.getName();
						if(filename != null)
						{
							File file = new File(filename);
							//如果此文件存在
							if(file.exists()){
								File filetoserver = new File("d:\\upload\\",file.getName());
								item.write(filetoserver);
								System.out.println("文件 " + filetoserver.getName() + " 上传成功!!");
							}
						}
					}
				}
			} catch (Exception e) {
				System.out.println(e.getStackTrace());
			}
		}
	}
}

3.web.xml清单如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<servlet>
		<servlet-name>UploadFileServlet</servlet-name>
		<servlet-class>
			org.chris.fileupload.FileUplaodServlet
		</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>UploadFileServlet</servlet-name>
		<url-pattern>/UploadFile</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>/Index.jsp</welcome-file>
	</welcome-file-list>
	
</web-app>


二.在strut1.2中实现
1.上传页面file.jsp 清单如下:
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
 
<html> 
	<head>
		<title>JSP for FileForm form</title>
	</head>
	<body>
		<html:form action="/file" enctype="multipart/form-data">
		<html:file property="file1"></html:file>
			<html:submit/><html:cancel/>
		</html:form>
	</body>
</html>


2.FileAtion.java的清单如下:
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package action;

import java.io.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import form.FileForm;

/** 
 * @author Chris
 * Creation date: 6-27-2008
 * 
 * XDoclet definition:
 * @struts.action path="/file" name="fileForm" input="/file.jsp"
 */
public class FileAction extends Action {
	/*
	 * Generated Methods
	 */

	/** 
	 * Method execute
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return ActionForward
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		FileForm fileForm = (FileForm) form;
		FormFile file1=fileForm.getFile1();
		if(file1!=null){
			//上传路径
			String dir=request.getSession(true).getServletContext().getRealPath("/upload");
			OutputStream fos=null;
			try {
				fos=new FileOutputStream(dir+"/"+file1.getFileName());
				fos.write(file1.getFileData(),0,file1.getFileSize());
				fos.flush();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				try{
				fos.close();
				}catch(Exception e){}
			}
		}
		//页面跳转
		return mapping.findForward("success");
	}
}


3.FileForm.java的清单如下:
package form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

/** 
 * @author Chris
 * Creation date: 6-27-2008
 * 
 * XDoclet definition:
 * @struts.form name="fileForm"
 */
public class FileForm extends ActionForm {
	/*
	 * Generated Methods
	 */
	private FormFile file1;
	/** 
	 * Method validate
	 * @param mapping
	 * @param request
	 * @return ActionErrors
	 */
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		// TODO Auto-generated method stub
		return null;
	}

	/** 
	 * Method reset
	 * @param mapping
	 * @param request
	 */
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		// TODO Auto-generated method stub
	}

	public FormFile getFile1() {
		return file1;
	}

	public void setFile1(FormFile file1) {
		this.file1 = file1;
	}
}

4.struts-config.xml的清单如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="fileForm" type="form.FileForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      attribute="fileForm"
      input="/file.jsp"
      name="fileForm"
      path="/file"
      type="action.FileAction"
      validate="false">
       <forward name="success" path="/file.jsp"></forward>
      </action>

  </action-mappings>

  <message-resources parameter="ApplicationResources" />
</struts-config>

5.web.xml代码清单如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>


三.在struts2中实现(以图片上传为例)
1.FileUpload.jsp代码清单如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
  	<title>The FileUplaodDemo In Struts2</title>
  </head>
  
  <body>
    <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data">
    	<s:file name="myFile" label="MyFile" ></s:file>
    	<s:textfield name="caption" label="Caption"></s:textfield>
    	<s:submit label="提交"></s:submit>
    </s:form>
  </body>
</html>


2.ShowUpload.jsp的功能清单如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
    <title>ShowUpload</title>
  </head>
  
  <body>
    <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" > 
        <img src ='UploadImages/<s:property value ="imageFileName"/> '/>
        <br /> 
        <s:property value ="caption"/> 
    </div > 
  </body>
</html>


3.FileUploadAction.java的代码清单如下 :
package com.chris;

import java.io.*;
import java.util.Date;

import org.apache.struts2.ServletActionContext;


import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{

	 private static final long serialVersionUID = 572146812454l ;
     private static final int BUFFER_SIZE = 16 * 1024 ;
    
     //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定
     //所以同时要提供myFileContentType,myFileFileName的set方法
     
     private File myFile;	//上传文件
     private String contentType;//上传文件类型
     private String fileName;	//上传文件名
     private String imageFileName;
     private String caption;//文件说明,与页面属性绑定
    
     public void setMyFileContentType(String contentType)  {
    	 System.out.println("contentType : " + contentType);
         this .contentType = contentType;
    } 
    
     public void setMyFileFileName(String fileName)  {
    	 System.out.println("FileName : " + fileName);
         this .fileName = fileName;
    } 
        
     public void setMyFile(File myFile)  {
         this .myFile = myFile;
    } 
    
     public String getImageFileName()  {
         return imageFileName;
    } 
    
     public String getCaption()  {
         return caption;
    } 
 
      public void setCaption(String caption)  {
         this .caption = caption;
    } 
    
     private static void copy(File src, File dst)  {
         try  {
            InputStream in = null ;
            OutputStream out = null ;
             try  {                
                in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
                out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                 byte [] buffer = new byte [BUFFER_SIZE];
                 while (in.read(buffer) > 0 )  {
                    out.write(buffer);
                } 
             } finally  {
                 if ( null != in)  {
                    in.close();
                } 
                  if ( null != out)  {
                    out.close();
                } 
            } 
         } catch (Exception e)  {
            e.printStackTrace();
        } 
    } 
    
     private static String getExtention(String fileName)  {
         int pos = fileName.lastIndexOf(".");
         return fileName.substring(pos);
    } 
 
    @Override
     public String execute()      {        
        imageFileName = new Date().getTime() + getExtention(fileName);
        File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileName);
        copy(myFile, imageFile);
         return SUCCESS;
    }
}

注:此时仅为方便实现Action所以继承ActionSupport,并Overrider execute()方法
  在struts2中任何一个POJO都可以作为Action

4.struts.xml清单如下:
<?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>
	<package name="example" namespace="/" extends="struts-default">
		<action name="fileUpload" class="com.chris.FileUploadAction">
		<interceptor-ref name="fileUploadStack"/>
		<result>/ShowUpload.jsp</result>
		</action>
	</package>
</struts>

5.web.xml清单如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<filter > 
        <filter-name > struts-cleanup </filter-name > 
        <filter-class > 
            org.apache.struts2.dispatcher.ActionContextCleanUp
        </filter-class > 
    </filter > 
     <filter-mapping > 
        <filter-name > struts-cleanup </filter-name > 
        <url-pattern > /* </url-pattern > 
    </filter-mapping >
	
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
  <welcome-file-list>
    <welcome-file>Index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>
分享到:
评论

相关推荐

    struts1.2驱动包

    Struts1.2驱动包是Java Web开发中一个重要的组件,它是Apache Struts框架的特定版本,用于支持基于Model-View-Controller (MVC)设计模式的应用程序开发。Struts1.2因其稳定性和广泛的功能集而在过去备受推崇,尤其在...

    struts1.2实现动态多文件上传

    在Struts1.2中实现动态多文件上传是一项常见的需求,它允许用户在一次提交中上传多个文件,如图片、文档等。这项功能的实现涉及前端表单设计、后端处理逻辑以及文件存储策略。 首先,我们需要创建一个HTML或JSP页面...

    struts1.2资源整合

    这次我们讨论的是如何进行Struts1.2的资源整合,包括核心源码、库文件以及API文档。 首先,`struts1.2源码.rar`包含了Struts1.2框架的核心源码。通过阅读源码,开发者可以深入理解Struts1.2的工作原理,这对于调试...

    Struts1.2中文学习手册

    这是Struts1.2应用的核心配置文件,定义了Action映射、Form Bean定义、数据源以及其他相关的设置。理解如何编写和解析这个文件对于开发者来说至关重要。 手册还会深入讲解Struts1.2的MVC架构。Model代表业务逻辑,...

    STRUTS1.2中文文档

    2. **Action类**:Action类是Struts1.2的核心组件,它实现了Controller的功能。每个Action类对应一个用户请求,处理完成后返回一个ActionForward对象,指示下一个视图或动作。 3. **配置文件**:Struts1.2的配置...

    基于Struts1.2的上传下载Demo

    本项目"基于Struts1.2的上传下载Demo"是针对该框架的一个实践示例,旨在帮助开发者理解和解决在Struts1.2环境中进行文件上传与下载的问题。 首先,让我们深入了解一下Struts1.2中的文件上传功能。在Struts1.2中,...

    struts1.2下载包

    在JSP中,Struts1.2扮演着核心控制器的角色,它将用户请求转发到相应的Action,然后Action处理业务逻辑,最终通过模型更新数据并传递结果到视图进行展示。 首先,我们来看"struts-1.2.9-bin"这个压缩包文件。这通常...

    struts1.2 + spring2.5 + hibernate3.2框架demo

    在Struts1.2和Hibernate3.2集成中,Spring可以作为它们之间的粘合剂,比如管理Action的生命周期,提供数据访问的事务控制。 再来看Hibernate3.2,它是Java世界中广泛使用的ORM解决方案。通过将Java对象映射到数据库...

    struts、struts1.2 学习教程

    5. **Action与结果**:在Struts2中,Action类不再负责视图的跳转,而是通过返回一个结果名,由框架决定跳转的页面。 四、学习路径 对于初学者,建议从理解MVC模式入手,然后学习Struts1.2的基本组件和配置,如...

    struts1.2 jar包

    在`struts1.2-jars`这个压缩包中,包含了Struts1.2运行所需的各个jar文件,比如`struts-core.jar`包含了框架的核心组件,`struts-tiles.jar`包含Tiles视图管理组件,`struts-taglib.jar`提供了与JSP相关的标签库,...

    struts 1.2驱动包

    Struts 1.2虽然在现代Web开发中已经被Struts 2或者Spring MVC等更新的框架取代,但它的设计理念和模式对于理解MVC架构和Web应用的开发仍然具有重要的学习价值。在学习和使用Struts 1.2时,开发者应关注其核心组件的...

    struts1.2标签实例

    Struts1.2标签是Java Web开发中Struts框架的一部分,它提供了一种在JSP页面中更加便捷、可维护的方式来处理业务逻辑和控制流程。Struts1.2标签库大大简化了视图层的开发,使开发者可以避免过多地在JSP中编写Java脚本...

    struts1.2 from表单提交包含list的对象

    在Struts1.2中,这个请求会被Struts的ActionServlet捕获,ActionServlet会根据配置的Struts配置文件(struts-config.xml)来决定调用哪个Action类来处理请求。 对于包含列表的表单,用户可能需要在页面上输入多条...

    ext+struts1.2图书管理系统

    解压后,开发者可以研究其目录结构,理解 EXT 和 Struts1.2 如何协同工作,查看具体的 Action 类如何处理请求,以及 JSP 页面如何与 EXT 组件交互。此外,还可以学习到如何配置 Struts 的配置文件(struts-config.xml...

    Struts 1.2 API详细讲解.rar

    这个压缩包文件"Struts 1.2 API详细讲解.rar"显然包含了对Struts 1.2 API的深入解析,对于初学者来说是一份宝贵的参考资料。 在Struts 1.2 API中,主要包括以下几个核心组件和接口: 1. **ActionServlet**:这是...

    struts1.2+hibernate开发的小项目

    Struts1.2和Hibernate是两个非常经典的Java Web开发框架,它们在早期的Web应用程序开发中占据了重要地位。Struts1.2是一个基于MVC(Model-View-Controller)模式的框架,主要用于处理用户请求和控制业务逻辑,而...

    struts1.2.jar包

    2. **Action类**:在Struts1.2中,Action类是核心组件,它接收来自用户的请求,处理业务逻辑,并决定跳转到哪个JSP页面进行响应。Action类继承自org.apache.struts.action.Action,并需要覆盖execute()方法。 3. **...

    struts1.2-jars.rar 所有jar包

    在"struts1.2-jars.rar"这个压缩包中,包含了Struts1.2框架运行所需的全部JAR文件,这些文件是开发和运行Struts1.2应用的基础。 一、Struts1.2核心组件: 1. `struts-core.jar`:包含Struts框架的核心类,如Action...

    struts1.2源代码及文档

    Struts1.2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。这个框架的主要目的是为了简化Web应用开发,提高开发效率,提供一套标准的方式来处理HTTP...

Global site tag (gtag.js) - Google Analytics