碧海潮声大学生网
标题:
★●Java程序员必须掌握的框架—Struts●★
[打印本页]
作者:
米米罗
时间:
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/
[img]
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10073053
[/img]
作者:
CF-empire
时间:
2010-3-29 11:20
我新手 太深了。。。
欢迎光临 碧海潮声大学生网 (http://www.zjoubbs.com/)
Powered by Discuz! X3.2