最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java web中的servlet3 upload上傳文件實(shí)踐

 更新時(shí)間:2017年11月02日 11:02:30   作者:simon-zhao  
這篇文章主要介紹了servlet3 upload上傳文件實(shí)踐,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

Servlet 3.0之前的版本中,文件上傳是個(gè)挺讓人頭疼的問(wèn)題,雖然有第三方框架來(lái)實(shí)現(xiàn),但使用也還是比較麻煩,在Servlet 3.0中,這些問(wèn)題將不復(fù)存在,Servlet 3.0對(duì)文件上傳提供了直接支持,配合Servlet 3.0中基于Annotations的配置,大大簡(jiǎn)化上傳件的操作。

一、javax.servlet.http中Part接口

public interface Part

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

版本:

Servlet 3.1 - Apache Tomcat 8.0.33

二、方法概述

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

三、@MultipartConfig注解

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

屬性 類型 概述
fileSizeThreshold int 文件大小閥值,當(dāng)文件大小大于此值時(shí),文件將被寫入磁盤
location String 服務(wù)器端目錄,服務(wù)器把客戶端上傳的文件默認(rèn)存入此目錄下
maxFileSize long 允許上傳的文件的最大大小,默認(rèn)是-1,表示沒(méi)有限制
maxRequestSize long 限制該multipart/form-data請(qǐng)求的最大數(shù)據(jù)量,默認(rèn)是-1,表示沒(méi)有限制

四、處理文件上傳的servlet

//此處的@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來(lái)處理日志
 private static Log log = LogFactory.getLog(UploadFileTest.class);
 //獲取注解中設(shè)置的值
 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){
 //上傳的單個(gè)文件超出maxFileSize或者上傳的總的數(shù)據(jù)量超出maxRequestSize時(shí)會(huì)拋出此異常
  if(config.maxRequestSize() == -1L)//如果注解中沒(méi)設(shè)置此項(xiàng),那就是單個(gè)文件超出限制
  log.error("單個(gè)文件超限");
  else if(config.maxFileSize() == -1L)//如果注解中沒(méi)有設(shè)置單個(gè)文件最大限制,那就是總數(shù)據(jù)量超限。
  log.error("總數(shù)據(jù)量超限");
  else
  log.error("Error");
 }
 if(part == null)
  return;
 String fileName = part.getSubmittedFileName();//獲得上傳的文件名,沒(méi)有判斷用戶沒(méi)有選擇文件直接提交的情況,沒(méi)有判斷上傳文件失敗的情況
 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));
 //為了避免文件重名,將時(shí)間組合到了文件名中。實(shí)際項(xiàng)目中可以考慮使用用戶主鍵或者生成一個(gè)唯一的ID來(lái)組合文件名。
 String saveName = System.currentTimeMillis() + fileName;
 part.write(saveName);//將上傳的文件保存到磁盤,默認(rèn)是注解中l(wèi)ocation的相對(duì)地址,也可以傳入一個(gè)絕對(duì)路徑
 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+ "成功," +
   "可以到項(xiàng)目目錄的F:\\下查看,保存的文件名是:"+
   saveName+"</h2>\n" +
   "</body></html>");
 }
}

五、前端html頁(yè)面

<!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使用了注解的方式注冊(cè),所以不再需要使用web.xml文件。新建一個(gè)web工程,就使用這兩個(gè)文件就可以部署到tomcat了,要訪問(wèn)的url是http://localhost:8080/UploadFileTest/UploadFile.html

總結(jié)

以上所述是小編給大家介紹的servlet3 upload上傳文件實(shí)踐,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例

    SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例

    這篇文章主要介紹了SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • java微信掃碼支付模式一線下支付功能實(shí)現(xiàn)

    java微信掃碼支付模式一線下支付功能實(shí)現(xiàn)

    本篇文章主要介紹了JAVA微信掃碼支付模式一線下支付功能實(shí)現(xiàn),具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • Java設(shè)計(jì)模式之策略模式

    Java設(shè)計(jì)模式之策略模式

    這篇文章介紹了Java設(shè)計(jì)模式之策略模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • SpringMVC Cron定時(shí)器Demo常見問(wèn)題解決方案

    SpringMVC Cron定時(shí)器Demo常見問(wèn)題解決方案

    這篇文章主要介紹了SpringMVC Cron定時(shí)器Demo常見問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例講解

    Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例講解

    這篇文章主要介紹了Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-03-03
  • IDEA創(chuàng)建parent項(xiàng)目(聚合項(xiàng)目)

    IDEA創(chuàng)建parent項(xiàng)目(聚合項(xiàng)目)

    這篇文章主要介紹了IDEA創(chuàng)建parent項(xiàng)目(聚合項(xiàng)目),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 通過(guò)實(shí)踐了解如何處理Java異常

    通過(guò)實(shí)踐了解如何處理Java異常

    Java中的異常處理不是一個(gè)簡(jiǎn)單的主題。初學(xué)者發(fā)現(xiàn)它很難理解,甚至有經(jīng)驗(yàn)的開發(fā)者也可以花幾個(gè)小時(shí)討論如何以及應(yīng)該拋出或處理哪些異常。下面我們通過(guò)實(shí)踐來(lái)了解如何解決異常
    2019-05-05
  • Spring服務(wù)注解有哪些

    Spring服務(wù)注解有哪些

    這篇文章主要介紹了Spring服務(wù)注解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2016-11-11
  • Java生成驗(yàn)證碼功能實(shí)例代碼

    Java生成驗(yàn)證碼功能實(shí)例代碼

    頁(yè)面上輸入驗(yàn)證碼是比較常見的一個(gè)功能,實(shí)現(xiàn)起來(lái)也很簡(jiǎn)單.給大家寫一個(gè)簡(jiǎn)單的生成驗(yàn)證碼的示例程序,需要的朋友可以借鑒一下
    2017-05-05
  • Java中的CopyOnWriteArrayList解析

    Java中的CopyOnWriteArrayList解析

    這篇文章主要介紹了Java中的CopyOnWriteArrayList解析,ArrayList是非線程安全的,也就是說(shuō)在多個(gè)線程下進(jìn)行讀寫,會(huì)出現(xiàn)異常,既然是非線程安全,那我們就使用一些機(jī)制把它變安全不就好了,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

汽车| 麻城市| 马尔康县| 青海省| 梧州市| 彩票| 同心县| 精河县| 台东市| 绥德县| 静宁县| 海兴县| 久治县| 四平市| 岚皋县| 成安县| 磐石市| 高要市| 东兰县| 财经| 车致| 响水县| 永修县| 永安市| 新密市| 驻马店市| 临夏县| 贵州省| 恩平市| 海原县| 全州县| 三亚市| 双流县| 长宁区| 湟源县| 化州市| 中卫市| 盐城市| 霸州市| 海林市| 麦盖提县|