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

速动画教程第二十二集 使用Struts上传文件

阅读更多

制作环境:

    Eclipse3.1.1  、 MyEclipse4.1  、 Tomcat5.5.x

 

步骤:

    新建工程 upload

 

    添加 Struts 框架,使用 Struts1.2 版本

 

    新建 一个 jsp + action 这里将使用动态的 ActionForm

 

    在新建表单对像时使用一个文件名和一个文件对像进行提交

 

    修改动态 From 的类型为 org.apache.struts.upload.FormFile

 

    < form-bean name = "upfileForm" type = "org.apache.struts.action.DynaActionForm" >

      < form-property name = "filename" type = "java.lang.String" />

      < form-property name = "filedata" type = "java.lang.String" />

    </ form-bean >

 

    改为

 

    < form-bean name = "upfileForm" type = "org.apache.struts.action.DynaActionForm" >

      < form-property name = "filename" type = "java.lang.String" />

      < form-property name = "filedata" type = " org.apache.struts.upload.FormFile " />

    </ form-bean >

 

    修改 upfile.jsp 文件,在<Form> 中加入 enctype = "multipart/form-data" ,这样才可以提交二进制类型的文件

 

    修改文件第一行代码

       <%@ page language = "java" %>

       改为

    <%@ page contentType = "text/html;charset=UTF-8" language = "java" %>

       这里将使用 UTF-8 的编码格式

 

    修改 upfileAction.java 文件,修改后的内容如下:

 

package com.test.struts.action;

 

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

 

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.action.DynaActionForm;

import org.apache.struts.upload.FormFile;

 

/**

 * MyEclipse Struts

 * Creation date: 07-05-2006

 *

 * XDoclet definition:

 * @struts.action path="/upfile" name="upfileForm" input="/upfile.jsp" scope="request" validate="true"

 */

public class UpfileAction extends Action {

 

    // --------------------------------------------------------- Instance Variables

 

    // --------------------------------------------------------- Methods

 

    /**

     * Method execute

     * @param mapping

     * @param form

     * @param request

     * @param response

     * @return ActionForward

     */

    public ActionForward execute(

       ActionMapping mapping,

       ActionForm form,

       HttpServletRequest request,

       HttpServletResponse response) {

       DynaActionForm upfileForm = (DynaActionForm) form;

       // 声明并获取对像

                   String filename = upfileForm.getString("filename");

        // 输出文件名

                   System.out.println(filename);

        FormFile filedata = (FormFile) upfileForm.get("filedata");

        // 取当前系统路径

                   String filePath = request.getRealPath("/");

        try {

            // 转换文件为数据流

                            InputStream stream = filedata.getInputStream();

            // 建立输出流

                            OutputStream bos = new FileOutputStream(filePath + "/" +

                    filedata.getFileName());

            // 将文件写入网站根目录下

                            int bytesRead = 0;

            byte[] buffer = new byte[8192];

            while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {

            bos.write(buffer, 0, bytesRead);

            }

            bos.close();

            stream.close();

        } catch (FileNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        // 返回到提交页面

                   return mapping.getInputForward();

    }

 

}

 

    现在可以进行测试了

 

    这时将会发现,提交的文件及文件名称都是乱码!下面将解决乱码

 

    增加一个过滤器,过滤器的代码请查看包中的具体文件

 

    web.xml 文件中加入以下配置内容,过滤器的编码设置为 UTF-8

       < filter >

       < filter-name > Set Character Encoding </ filter-name >

       < filter-class > com.test.SetCharacterEncodingFilter </ filter-class >

       < init-param >

           < param-name > encoding </ param-name >

           < param-value > UTF-8 </ param-value >

       </ init-param >

    </ filter >

    < filter-mapping >

       < filter-name > Set Character Encoding </ filter-name >

       < url-pattern > /* </ url-pattern >

    </ filter-mapping >

    < filter-mapping >

       < filter-name > Set Character Encoding </ filter-name >

       < servlet-name > action </ servlet-name >

    </ filter-mapping >

 

    配置 Tomcat 的 server.xml 文件,文件在 Tomcat_Home/conf 中

 

    在端口配置的前面加入 URIEncoding="UTF-8" 如果使用了和IIS集成的话需要在 8009 的端口前也加入此配置内容,关于详细的和IIS集成方法和乱码解决请查看第二十一集的录像

分享到:
评论

相关推荐

    速动画教程系列第22集

    接下来,`速动画教程第二十二集.rtf`很可能是一个配套的教程文本,以Rich Text Format (RTF) 格式存储,详细解释了在Struts中实现文件上传的步骤。RTF文件通常包含了丰富的格式信息,方便用户阅读和理解教程内容。 ...

    java开源包8

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    JAVA上百实例源码以及开源项目源代码

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    java开源包1

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包11

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包2

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包3

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包6

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包5

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包10

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包4

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包7

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包9

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包101

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    Java资源包01

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    Java学习笔记-个人整理的

    {13.10}可滚动结果集}{201}{section.13.10} {13.11}Procedure}{201}{section.13.11} {14}xml}{204}{chapter.14} {14.1}元素}{204}{section.14.1} {14.2}XML的设计}{205}{section.14.2} {14.3}DTD/Schema}{205}...

    java技术点

    【Java技术点】涵盖的内容广泛,从初级到高级,涵盖了编程基础、Web开发、框架使用、数据处理、安全防范等多个方面。以下将按照知识等级进行详细的解析: **初级知识点** 1. **SVN环境搭建**:版本控制系统,用于...

Global site tag (gtag.js) - Google Analytics