加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java web中的servlet3 upload上传文件实践

发布时间:2020-05-23 14:35:30 所属栏目:Java 来源:互联网
导读:Servlet3.0之前的版本中,文件上传是个挺让人头疼的问题,虽然有第三方框架来实现,但使用也还是比较麻烦,在Servlet3.0中,这些问题将不复存在,Servlet3.0对文件上传提供了直接支持,配合Servlet3.0中基于Annotati

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

二、方法概述

三、@MultipartConfig注解

用于处理文件上传的servlet必须使用@MultipartConfig注解,@MultipartConfig注解有4个属性。

四、处理文件上传的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来处理日志
 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页面

<!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上传文件实践,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读