servle 3.0 新特性之一 对上传表单的支持
1. 上傳
* 上傳對表單的要求:
> method="post"
> enctype="multipart/form-data",它的默認值是:application/x-www-form-urlencoded
> <input type="file" name="必須給"/>
* 上傳Servlet的使用:
> request.getParameter()不能再用
> request.getInputStream()使用它來獲取整個表單的數據!
使用 commons-fileupload 上傳文件的步驟:
* commons-fileupload
> 創建工廠
> 解析器
> 使用解析器來解析request對象,得到List<FileItem>
Servlet3.0對上傳提供了支持:
* 表單不變
* 在Servlet中不需要再使用commons-fileupload,而是使用Servlet3.0提供的上傳組件接口!
?
?
上傳的步驟:
* 使用request.getPart("字段名"),得到Part實例,
* Part:
> String getContentType():獲取上傳文件的MIME類型
> String getName():獲取表單項的名稱,不是文件名稱
> String getHeader(String header):獲取指定頭的值
> long getSize():獲取上傳文件的大小
> InputStream getInputStream():獲取上傳文件的內容
> void write(String fileName):把上傳文件保存到指定路徑下
* 默認Servlet是不支持使用上傳組件:需要給Servlet添加一個注解: @MultipartConfig
?
它沒有提供獲取上傳文件名稱的方法:
* 這需要我們自己從Content-Disposition頭中截取!
?
例如:
前端 form上傳表單頁面:form.jsp
| <body> ????<h1>注冊</h1> ????<form action="<c:url value='/AServlet'/>" method="post" enctype="multipart/form-data"> ????????用戶名: ????????<input type="text" name="username" /> ????????<br /> ????????簡歷: ????????<input type="file" name="resume" /> ????????<br /> ????????<input type="submit" value="注冊" /> ????</form> </body> |
?
服務器端: Aservlet.java
| import javax.servlet.http.Part; /* * 默認Servlet是不支持使用上傳組件:需要給Servlet添加一個注解: @MultipartConfig */ @WebServlet(urlPatterns="/AServlet") @MultipartConfig public class AServlet extends HttpServlet { ????@Override ????public void doPost(HttpServletRequest req, HttpServletResponse resp) ????????????throws ServletException, IOException { ????????req.setCharacterEncoding("UTF-8"); ????????/* ???????? * 1. getParameter()方法可以使用了!!! ???????? */ ????????String username = req.getParameter("username");//可以使用了!!! ????????/* ???????? * 2. 獲取文件表單字段,對應的Part對象 ???????? */ ????????Part part = req.getPart("resume"); ???????? ????????/* ???????? * 3. 從Part中獲取需要的數據 ???????? */ ????????// 獲取上傳文件的MIME類型 ????????System.out.println(part.getContentType()); ????????// 獲取上傳文件的字節數 ????????System.out.println(part.getSize()); ????????// 獲取文件字段名稱 ????????System.out.println(part.getName()); ????????// 獲取頭,這個頭中包含了上傳文件的名稱 ????????System.out.println(part.getHeader("Content-Disposition")); ????????// 保存上傳文件 ????????part.write("C:/xxx.jpg"); ???????? ????????// 截取上傳文件名稱 ????????String filename = part.getHeader("Content-Disposition"); ????????int start = filename.lastIndexOf("filename=\"") + 10; ????????int end = filename.length() - 1; ????????filename = filename.substring(start, end); ????????System.out.println(filename); ????} } |
?
轉載于:https://www.cnblogs.com/Prozhu/p/5452628.html
總結
以上是生活随笔為你收集整理的servle 3.0 新特性之一 对上传表单的支持的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stage3d 骨骼优化
- 下一篇: CVE-2016-0143 漏洞分析(2