-
非阻塞
-
简介
- 接收请求后,启动一个异步线程处理请求:客户端可以继续请求这个Servlet,而不必等待上次请求返回
- 默认关闭
-
非阻塞配置
位置:web.xml中 <servlet> <servlet-name>PrintServlet</servlet-name> <servlet-class>com.chiansofti.chapter10.section01.PrintServlet</servlet-class> <!--对该servlet的请求配置非阻塞--> <async-supported>true</async-supported> </servlet> ....略过 <servlet-mapping> </servlet-mapping>
-
-
注解配置
-
@WebServlet 配置servlet
name属性: 等价<servlet-name>配置项,默认为类全限定名 urlPatterns 等价<url-pattern>配置项 value: 同上urlPatterns loadOnStartup: 等价<load-on-startup> initParams 等价<init-param>标签,参数为@WebInitParam注解 asyncSupported 等价<async-supported> description 等价<description> displayName 等价<display-name> 实例: @WebServlet(urlPatterns = {"/demo"}, asyncSupported = true, loadOnStartup = -1, name = "DemoServlet", displayName = "chinasofti", initParams = { @WebInitParam(name = "username", value = "etc") } )
-
@WebInitParam 配置初始化参数
-
@WebFilter 配置过滤器
-
@WebListener 配置监听器
-
@MultipartConfig 文件上传支持
-
-
文件上传
-
简介:
- 核心接口
Part接口方法: void delete() 删除part对象对应文件项的基本存出,包括删除相关临时文件 String getContentType() 请求上传文件的类型 String getHeader(String name) 获取上传文件内容的指定名字的请求头信息 Collection<String> getHeaderNames() 获取全部请求头名称 InputStream getInputStream() 获取输入流 String getName() 获取控件名称 Long getSize() 获取上传文件的大小 void write(String fileName) 将文件写入到物理磁盘
- 获取Part实例方法
请求接口 HttpServletRequest: Part getPart(String name) 根据上传控件名称获取上传文件对应的Part对象 Collection<Part> getParts() 根据所有上传文件对应的Part对象
-
实现
upload.jsp====上传表单 <form action="uploadServelt" method="post" enctype="multipart/form-data“ > 文件1:<input type="file" name="myfile1"/><br/> 文件2:<input type="file" name="myfile2"/><br/> <input type="submit" name="submit" value="upload"/> </form>
UploadServlet==实现上传功能 @WebServlet("/uploadServelt") @MultipartConfig( location = "E:\\upload",//文件存放路径 maxFileSize = 8388608,//最大上传文件大小 fileSizeThreshold = 819200,//当数据量大于该值时,内容将被写入文件。 maxRequestSize = -1 //针对该 multipart/form-data 请求最大数量,默认值为 -1,表示没有限制。以字节为单位。 ) //获取所有上传文件对应的Part对象 Collection<Part> parts = request.getParts(); //遍历上传文件对应的part对象,将文件写入上传文件目录 for (Iterator<Part> iterator = parts.iterator(); iterator.hasNext();) { Part part = iterator.next(); //获取content-disposition请求头,提取文件名称 String cotentDisposition = part.getHeader("content-disposition"); System.out.println("cotent-disposition="+cotentDisposition); String fileName = null; //使用正则表达是部分匹配,获取上传文件名称 Pattern pattern = Pattern.compile("filename=\".+\""); Matcher matcher = pattern.matcher(cotentDisposition); if(matcher.find()){ fileName = matcher.group(); System.out.println("fileName="+fileName); fileName = fileName.substring(10, fileName.length()-1); System.out.println("subFileName="+fileName); } if(fileName!=null){ /写入到磁盘中去 part.write(fileName); }
过滤器===解决文件名统一编码问题 public void init(FilterConfig filterConfig) throws ServletException { //初始化 glEncoding = filterConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (glEncoding != null) { // request编码 request.setCharacterEncoding(glEncoding); // response编码 response.setContentType("text/html;charset=" + glEncoding); } // 传给下一个过滤器 chain.doFilter(request, response); }
-
JavaEE基础十之servlet3.0新特性盘点
最新推荐文章于 2022-07-08 21:31:00 发布