找回密码

碧海潮声大学生网

查看: 904|回复: 1
打印 上一主题 下一主题

[其它] ★●Java程序员必须掌握的框架—Struts●★

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-2 10:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
★●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]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
2#
发表于 2010-3-29 11:20 | 只看该作者
我新手  太深了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋| 碧海潮声大学生网  

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 浙ICP备11026473号 )

快速回复 返回顶部 返回列表