Struts2學習筆記14:Struts2的文件上傳和下載【續】

      網友投稿 976 2022-05-28

      Struts2學習筆記14:Struts2的文件上傳和下載【續】

      第十二講

      學習內容:

      通過實例,實現非基于struts2的文件上傳

      使用文件

      -:

      http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.4-bin.zip

      commons-io-1.4.jar

      -:

      http://apache.freelamp.com/commons/fileupload/binaries/commons-fileupload-1.2.1-bin.zip

      commons-fileupload-1.2.1.jar

      將上面的兩個jar包導入到項目中——WebRoot/WEB-INF/lib目錄中

      步驟:

      1)

      在src目錄中新建包"upload",在包中新建Servlet文件,名為

      UploadServlet.java

      ,URL設置為"/uploadservlet"

      2)

      在WebRoot中新建文件夾"upload",在該文件中建立兩個JSP文件,分別名為:upload.jsp和result.jsp

      Struts2學習筆記14:Struts2的文件上傳和下載【續】

      upload.jsp

      顯示上傳文件頁面

      result.jsp

      返回顯示信息

      3)

      在upload.jsp文件中添加表單

      enctype="multipart/form-data">

      username:


      password:


      file1:

      file2:

      4)

      在result.jsp文件中使用EL表達式顯示返回信息

      username:?${requestScope.username?}

      password:?${requestScope.password?}

      file1:${requestScope.file1?}

      fiel2:${requestScope.file2?}

      5)

      編寫UploadServlet.java文件,代碼如下:

      @SuppressWarnings(?{?"deprecation",?"unchecked"?})????public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)????????????throws?ServletException,?IOException?{????????DiskFileItemFactory?factory?=?new?DiskFileItemFactory();??//磁盤文件項目工廠 ????????String?path?=?request.getRealPath("/upload");?//獲取實時路徑為"/upload",其中根目錄為WebRoot ????????factory.setRepository(new?File(path));??//大于設定的閾值大小的文件暫時存放目錄 ????????factory.setSizeThreshold(1024?*?1024);??//設置的大小超出該指定值,則直接寫到磁盤 ????????ServletFileUpload?upload?=?new?ServletFileUpload(factory);??????????//上傳文件中最重要的類,處理上傳文件信息 ????????try?{????????????List?list?=?upload.parseRequest(request);??//請求的Servlet的請求解析 ????????????//?@return?A?list?of?FileItem?instances?parsed?from?the ????????????//?request,?in?the?order?that?they?were?transmitted. ????????????????????????//使用循環遍歷list ????????????for?(FileItem?item?:?list)?{????????????????//一個item對應于表單中的一項 ????????????????if?(item.isFormField())?{?//判斷item是一般的form字段還是file字段 ????????????????????//如果是一般字段則運行下面的代碼,否則運行else語句中的語句 ????????????????????String?name?=?item.getFieldName();?//獲取屬性名 ????????????????????String?value?=?item.getString("utf-8");?//通過一種編碼格式獲取屬性值 ????????????????????request.setAttribute(name,?value);?//將name屬性名和value屬性值放置到request的屬性中 ????????????????????//將來使用EL表達式進行讀取 ????????????????}?else?{????????????????????String?name?=?item.getFieldName();?//獲取field名 ????????????????????String?value?=?item.getName();?//獲取field屬性值 ????????????????????//下面代碼用于解析文件名,因為有的瀏覽器在進行文件上傳的時候,將文件的路徑與文件名都包含進去, ????????????????????//而有的瀏覽器在進行文件上傳的時候,僅包含文件名,所以需要進行解析 ????????????????????int?start?=?value.lastIndexOf("http://");?//獲取file中最后"/"的出現位置????????????????????//在最后"/"后面接的是文件名 ????????????????????String?fileName?=?value.substring(start?+?1);?//獲取文件名,從最后出現斜杠的位置后開始讀取字符串 ????????????????????request.setAttribute(name,?fileName);?//將name屬性名和文件名放置到request的屬性中 ????????????????????//將來使用EL表達式進行讀取 ????????????????????????????????????????//第一個方法,一個簡便的上傳文件方法,可以代替下面的語句 ????????????????????????????????????????//方便的方法寫上載的項目到磁盤。客戶端代碼不關心與否的項目是儲存在內存中,或 ????????????????????//磁盤在一個臨時位置。他們只想寫上載項目到一個文件中。 //??????????????????try?{ //??????????????????????item.write(?new?File(path,fileName)?); //??????????????????}?catch?(Exception?e)?{ //??????????????????????e.printStackTrace(); //??????????????????} ????????????????????//比較復雜的上傳文件的方法,第二個方法 ????????????????????//新建一個輸出流,?????????格式為文件輸出流????建立一個File對象構造方法節中加入文件路徑和文件名 ????????????????????OutputStream?os?=?new?FileOutputStream(new?File(path,????????????????????????????fileName));????????????????????//建立一個輸入流,從item中獲取輸入流 ????????????????????InputStream?is?=?item.getInputStream();????????????????????//將輸入流中的信息方法輸出流中 ????????????????????byte[]?buffer?=?new?byte[400];//定義一個字節數組,緩沖400 ????????????????????int?length?=?0;????????????????????while?((length?=?is.read(buffer))?>?0)?{?//length大于0,表示還有內容 ????????????????????????os.write(buffer,?0,?length);?//將buffer中的信息,寫出,起始位置0,長度length ????????????????????}????????????????????is.close();?//關閉輸入流 ????????????????????os.close();?//關閉輸出流 ????????????????}????????????}????????????//請求轉發到result.jsp頁面中,將request和response都傳到result.jsp中 ????????????request.getRequestDispatcher("/upload/result.jsp").forward(request,????????????????????response);????????}?catch?(FileUploadException?e)?{????????????e.printStackTrace();????????}????}}

      6)

      注釋掉wem.xml文件中的filter元素,本實例是非基于struts2的編程。

      7)

      運行。

      JSP Struts

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎么查找執行比較慢的sql語句
      下一篇:markdown-here離線安裝
      相關文章
      亚洲欧美日韩中文高清www777| 亚洲国产精品网站久久| 亚洲中文字幕日本无线码| 4480yy私人影院亚洲| 亚洲Aⅴ无码专区在线观看q| 亚洲大尺度无码专区尤物| 亚洲AV蜜桃永久无码精品| 亚洲国产成人久久一区久久| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲一区二区三区高清视频| 亚洲视频在线免费看| 911精品国产亚洲日本美国韩国 | 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲AV成人片色在线观看| 久久精品国产亚洲综合色| 国产亚洲免费的视频看| 亚洲国产精品国自产拍AV| 亚洲AV无码久久| 一区二区三区亚洲| 亚洲天堂一区二区三区| 亚洲av午夜精品无码专区| 亚洲中文字幕无码爆乳| 亚洲AV永久无码精品一福利| 国产精品亚洲五月天高清| 亚洲av手机在线观看| 三上悠亚亚洲一区高清| 精品亚洲综合久久中文字幕| 久久久久久亚洲精品| 亚洲色偷偷偷网站色偷一区| 亚洲国产成+人+综合| 亚洲中文字幕无码爆乳app| 亚洲国产成人AV网站| 国产91精品一区二区麻豆亚洲| 黑人大战亚洲人精品一区 | 亚洲中文字幕一二三四区| 亚洲精品av无码喷奶水糖心| 日批日出水久久亚洲精品tv| 久久国产成人亚洲精品影院| 久久夜色精品国产亚洲AV动态图| 中文字幕亚洲综合久久| 亚洲欧洲日本在线观看|