一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java web中的servlet3 upload上傳文件實踐

java web中的servlet3 upload上傳文件實踐

2021-01-29 12:00simon-zhao Java教程

這篇文章主要介紹了servlet3 upload上傳文件實踐,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

Servlet 3.0之前的版本中,文件上傳是個挺讓人頭疼的問題,雖然有第三方框架來實現,但使用也還是比較麻煩,在Servlet 3.0中,這些問題將不復存在,Servlet 3.0對文件上傳提供了直接支持,配合Servlet 3.0中基于Annotations的配置,大大簡化上傳件的操作。

一、javax.servlet.http中Part接口

public interface Part

上傳文件必須使用multipart/form-data作為request body。

版本:

Servlet 3.1 - Apache Tomcat 8.0.33

二、方法概述

 

方法 描述
void delete() 刪除磁盤上關于此part對象的緩存文件
java.lang.String getContentType() 獲取瀏覽器傳遞過來的ContentType
java.lang.String getHeader(java.lang.String name) 獲取瀏覽器傳遞過來的特定的header,參數是header的名字
java.util.Collection getHeaderNames() 獲取傳遞給這個part的所有header的名字
java.util.Collection getHeaders(java.lang.String name) 獲取該name對應的所有的value
java.io.InputStream getInputStream() 獲取InputStream對象,可以用于獲取上傳的文件的內容
java.lang.String getName() 獲取對應于此part的multipart表單的名字
long getSize() 獲取此part的大小,如果是上傳文件的話,表示上傳的文件大小
java.lang.String getSubmittedFileName() 如果此part表示上傳文件的話,返回上傳的文件的名字
void write(java.lang.String fileName) 一個比較方便的方法,將上傳的文件寫入磁盤中

 

三、@MultipartConfig注解

用于處理文件上傳的servlet必須使用@MultipartConfig注解,@MultipartConfig注解有4個屬性。

 

屬性 類型 概述
fileSizeThreshold int 文件大小閥值,當文件大小大于此值時,文件將被寫入磁盤
location String 服務器端目錄,服務器把客戶端上傳的文件默認存入此目錄下
maxFileSize long 允許上傳的文件的最大大小,默認是-1,表示沒有限制
maxRequestSize long 限制該multipart/form-data請求的最大數據量,默認是-1,表示沒有限制

 

四、處理文件上傳的servlet

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//此處的@MultipartConfig注解給出了文件存放的地址和允許上傳的文件最大值
@MultipartConfig(location="F:/", maxFileSize = 1024*1024*20)
@WebServlet(name="UploadFileTest", urlPatterns="/upload")
public class UploadFileTest extends HttpServlet{
 private static final long serialVersionUID = 1L;
 //使用了commons-logging和log4j來處理日志
 private static Log log = LogFactory.getLog(UploadFileTest.class);
 //獲取注解中設置的值
 private static MultipartConfig config
 = UploadFileTest.class.getAnnotation(MultipartConfig.class);
 public UploadFileTest() {
 // TODO Auto-generated constructor stub
 }
 public void doPost(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException{
 request.setCharacterEncoding("UTF-8");
 Part part = null;
 try{
  part = request.getPart("file");//獲取part用于處理上傳的文件
 }catch(IllegalStateException ise){
 //上傳的單個文件超出maxFileSize或者上傳的總的數據量超出maxRequestSize時會拋出此異常
  if(config.maxRequestSize() == -1L)//如果注解中沒設置此項,那就是單個文件超出限制
  log.error("單個文件超限");
  else if(config.maxFileSize() == -1L)//如果注解中沒有設置單個文件最大限制,那就是總數據量超限。
  log.error("總數據量超限");
  else
  log.error("Error");
 }
 if(part == null)
  return;
 String fileName = part.getSubmittedFileName();//獲得上傳的文件名,沒有判斷用戶沒有選擇文件直接提交的情況,沒有判斷上傳文件失敗的情況
 log.info("contentType : " + part.getContentType());
 log.info("fileName : " + fileName);
 log.info("fileSize : " + part.getSize());
 log.info("header names :");
 for(String headerName : part.getHeaderNames())
  log.info(headerName + " : " + part.getHeader(headerName));
 //為了避免文件重名,將時間組合到了文件名中。實際項目中可以考慮使用用戶主鍵或者生成一個唯一的ID來組合文件名。
 String saveName = System.currentTimeMillis() + fileName;
 part.write(saveName);//將上傳的文件保存到磁盤,默認是注解中location的相對地址,也可以傳入一個絕對路徑
 response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  String docType =
  "<!doctype html public \"-//w3c//dtd html 4.0 " +
  "transitional//en\">\n";
  out.println(docType +
   "<html>\n" +
   "<head><title>Upload File</title></head>\n" +
   "<body bgcolor=\"#f0f0f0\">\n" +
   "<h1 align=\"center\">Upload File</h1>\n" +
   "<h2 align=\"center\">上傳文件" + fileName+ "成功," +
   "可以到項目目錄的F:\\下查看,保存的文件名是:"+
   saveName+"</h2>\n" +
   "</body></html>");
 }
}

五、前端html頁面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Upload File</title>
</head>
<body>
<form action="upload" method="POST" enctype="multipart/form-data">
 <table align="center" border="1" width="50%">
 <tr>
  <td>選擇要上傳的文件:</td>
  <td><input type="file" name="file"></td>
 </tr>
 <tr>
  <td><input type="submit" value="上傳"></td>
 </tr>
 </table>
</form>
</body>
</html>

servlet使用了注解的方式注冊,所以不再需要使用web.xml文件。新建一個web工程,就使用這兩個文件就可以部署到tomcat了,要訪問的url是http://localhost:8080/UploadFileTest/UploadFile.html

總結

以上所述是小編給大家介紹的servlet3 upload上傳文件實踐,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/u010902721/article/details/51378282

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产思妍小仙女一二区 | 毛片啪啪视频 | 魔镜号中文字幕 | 扒开腚眼子视频大全 | 操黄| 天天爽天天 | 青青青国产精品国产精品久久久久 | 玩两个少妇女邻居 | 午夜十八岁禁 | 亚洲系列国产精品制服丝袜第 | 好大用力深一点女公交车 | 希岛爱理aⅴ在线中文字幕 午夜综合网 | 天天排行网 | 好大好湿好硬好爽好深免费视频 | 美女扒开屁股 | m3u8久久国产精品影院 | 四虎在线视频免费观看 | 青青草原在线免费 | 青草青青在线视频 | 高清不卡免费一区二区三区 | 西西人体大胆啪啪私拍色约约 | 新新电影理论中文字幕 | chinese帅男gay野外性 | 国产在线观看精品香蕉v区 国产在线观看a | 欧美在线观看一区二区三 | 天天操天天干天天舔 | 亚洲444777KKK在线观看 | 久久综合久久伊人 | 午夜想想爱 | 日本网络视频www色高清免费 | 免费看黄色一级 | 韩国靠逼| 日本不卡不码高清免费观看 | 国产三级跑 | 亚洲毛片基地 | julia ann黑人巨大| 九九国产在线视频 | 四虎影视网址 | 护士的小嫩嫩好紧好舒服 | 国产精品理论片在线观看 | 免费观看一级特黄三大片视频 |