米米罗 发表于 2009-4-2 10:56

★●Java程序员必须掌握的框架—Struts●★

★●Java程序员必须掌握的框架—Struts●★7.1.3
通过Common-FileUpload框架实现文件上传现在来看如何通过Common-FileUpload框架实现文件上传。
步骤如下。
(1)新建用户输入页upload.jsp。该页面仅仅包含一个表单,用来输入用户名以及选择用来上传的文件。这里需要注意两点:第一点是在于form表单的method属性必须为post,即设置表单的提交方式为POST方式;第二点必须设置form表单的enctype属性为multipart/form-data,这样才会以二进制流的方式来处理表单数据,从而完成文件的上传。enctype属性的默认值为application/x-www-form-urlencoded,这样的编码格式会将表单处理成URL编码格式。
<%@ page language="java" pageEncoding="gb2312"%>

<html>

<head>

<title>文件上传</title>

</head>


<center>


<h1>通过Common-FileUpload框架完成上传</h1>


<form action="UploadServlet" method="post" enctype="multipart/form-data">



<table>



<tr>



<td>用户名:</td>



<td><input type="text" name="username" ></td>



</tr>



<tr>



<td>上传文件:</td>



<td><input type="file" name="myFile"></td>



</tr>



<tr>



<td><input type="submit" value="上传"></td>



<td><input type="reset"></td>



</tr>



</table>


</form>

</center>

<body>

</body>
</html>
(2)新建Servlet用来处理上传。重点在于对表单域的判断,判断该表单域是一个普通的表单域还是文件域。如果是普通表单域则取得其表单域的name属性值和value属性,这个相当于传递参数中的参数与参数值。如果是文件表单域则取得该文件表单域的name属性值和上传文件名,并将该文件保存到设置的上传文件目录中。完成文件上传后,跳转页面到结果输出页。
package net.hncu.upload;
import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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


public class UploadServlet extends HttpServlet {


public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//新建上传工厂

DiskFileItemFactory factory = new DiskFileItemFactory();
                  

//设置文件大小限制。

//如果小于该文件限制,则文件直接保存在内存中如何保存到目标文件夹中。

//如果大于该文件限制,则文件将保存到设置的临时目录中。

factory.setSizeThreshold(1024 * 1024);
                  

//设置临时目录

factory.setRepository(new File(getServletContext().getRealPath("/temp")));
                  

//实例化一个ServletFileUpload对象用来上传

ServletFileUpload sfu = new ServletFileUpload(factory);
                  

//得到所有的表单项

List<FileItem>
all = null;

try {


all = sfu.parseRequest(request);

} catch (FileUploadException e) {


e.printStackTrace();

}
                  

for(FileItem item : all) {

//如果是普通表单字段

if(item.isFormField()) {

//获得该字段名称

String name = item.getFieldName();
                                    

//获得该字段值

String value = item.getString("gbk");
                                    

//将值设置到request属性范围中

request.setAttribute(name, value);

}
                           
                           

//如果为文件域

else {

//取得文件域字段名

String name = item.getFieldName();
                                    

//取得文件名

String value = item.getName();
                                    

//截取文件名

int begin = value.lastIndexOf("\\");

value = value.substring(begin + 1);
                                    

//将值设置到request属性范围中

request.setAttribute(name, value);
                                    

//设置上传文件目录

String uploadPath = getServletContext().getRealPath("/upload");
                                    

//写入文件

try {

item.write(new File(uploadPath,value));

} catch (Exception e) {

e.printStackTrace();

}

}
                           

}
                  

//上传完成后执行跳转

request.getRequestDispatcher("/result.jsp").forward(request, response);

}

}
(3)配置文件上传Servlet。
<?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>UploadServlet</servlet-name>

<servlet-class>net.hncu.upload.UploadServlet</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>UploadServlet</servlet-name>

<url-pattern>/UploadServlet</url-pattern>

</servlet-mapping>

</web-app>
(4)新建结果输出页result.jsp。在该页面中输出用户的用户名以及上传的文件名。
<%@ page language="java" pageEncoding="gb2312"%>


<html>

<head>

<title>文件上传</title>

</head>

<center>


<h1>通过Common-FileUpload框架完成上传</h1>
         用户名:${requestScope.username}<br>
         上传文件名:${requestScope.myFile }

</center>

<body>

</body>
</html>
以上内容节选自 机械出版社 《零基础学struts》
本书的销售网址是http://product.dangdang.com/product.aspx?product_id=20511367
技术讨论交流网址http://www.rzchina.net/
http://www.china-pub.com/log/log.aspx?id=195283&shuming=%c1%e3%bb%f9%b4%a1%d1%a7Struts"%20style
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10073053

CF-empire 发表于 2010-3-29 11:20

我新手太深了。。。
页: [1]
查看完整版本: ★●Java程序员必须掌握的框架—Struts●★