Servlet3.0
分类:突袭反恐任务

一、要求
1. 发布到Tomcat7.0或以上版本!

二、概述

  Servlete3.0的根本新个性如下三局地:

  • 应用@WebServlet、@WebFilter、@WebListener七个评释来代表web.xml文件中的Servlet、Filter、Listener的配置;
  • Servlet异步处理:当Servlet拍卖相比较棘手的主题材料时,那会让客商觉获得很卡。当使用特别管理时得以把早就管理好的从头到尾的经过先一步响应给客商端浏览器,然后使用另贰个线程来完结急难的操作,也等于把内容一部根据地部的来得出来;
  • 上传组件:不用再使用fileupload等级三方的上传组件,使用Servlet3.0的上传组件会更便利。
三、注解代替配置文件

1. 删除web.xml
2. 在Servlet类上添加@WebServlet(urlPatterns={"/AServlet"})
总结:
  • 讲明好处:配置消息少!
  • 讲授劣点:不便利修改!
3. 在Filter类上添加@WebFilter(urlPatterns="/AFilter")
4. 在Listener类上添加@WebListener

四、异步处理
  1. 什么是异步处理
    原来,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果!
    现在异步处理的作用:在服务器开始响应后,浏览器就可以看到响应内容,不用等待服务器响应结束!

  2. 实现异步的步骤
  • 得到AsyncContext,它异步上下文对象

AsyncContext ac = request.startAsync(request,response);

  • 给上下文一个Runnable对象,运营它!(给上下文贰个职务,让它落成!)

    ac.start(new Runnable() {

    public void run() {...}
    

    });

  • @WebServlet(urlPatterns="/AServlet", asyncSupported=true)

  • resp.setContentType("text/html;charset=utf-8");
  • IE借使不可能健康输出,那表达响应体大小不足512B,那你必要多输出点废话!
  • AsyncContext#complete():布告汤姆cat大家异步线程已经实行完成了!那让汤姆cat才会及时的断开与浏览器的总是!

    1 @WebServlet(name = "BServlet",urlPatterns = "/BServlet",asyncSupported = true) 2 public class BServlet extends HttpServlet { 3 public void doGet(final HttpServletRequest req, final HttpServletResponse resp) 4 throws ServletException, IOException { 5 resp.setContentType("text/html;charset=utf-8"); 6 7 // 协理IE!假若出口不足512B,未有异步效果! 8 for(int i = 0; i <= 512; i++) { 9 resp.getWriter().print("a"); 10 } 11 resp.getWriter().flush(); 12 13 //1. 得到异步上下文对象 14 final AsyncContext ac = req.startAsync(req, resp); 15 16 //2. 给上下文对象三个Runnable对象,让它试行那些职责17 ac.start(new Runnable() { 18 public void run() { 19 println("今后眼看初步
    ", resp); 20 sleep(2000); 21 for(char c = 'A'; c <= 'Z'; c++) { 22 println(c+"", resp); 23 sleep(250); 24 } 25 // 公告汤姆cat大家已经实施完毕了! 26 ac.complete(); 27 } 28 }); 29 } 30 public void println(String text, HttpServletResponse resp) { 31 try { 32 resp.getWriter().print(text); 33 resp.getWriter().flush(); 34 } catch (IOException e) { } 35 } 36 public void sleep(long ms) { 37 try { 38 Thread.sleep(ms); 39 } catch (InterruptedException e) { 40 } 41 } 42 }

    五、上传帮忙

    1. 上传
  • 上传对表单的渴求:

    • method="post"
    • enctype="multipart/form-data",它的暗中认可值是:application/x-www-form-urlencoded
    • <input type="file" name="必须给"/>
  • 上传Servlet的使用:
    • request.getParameter()无法再用
    • request.getInputStream()使用它来获得整个表单的数量!
  • commons-fileupload
    • 创造工厂
    • 解析器
    • 行使解析器来深入分析request对象,获得List<FileItem>
2、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头中截取!

    1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <%@taglib prefix="c" uri="" %> 3 4 5 Title 6 7 8

    注册

    9
    10 用户名:
    11 简 历:
    12 13
    14 15

    1 package web.servlet; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.annotation.MultipartConfig; 5 import javax.servlet.annotation.WebServlet; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import javax.servlet.http.Part; 10 import java.io.IOException; 11 12 @WebServlet(name = "AServlet",urlPatterns = "/AServlet") 13 @MultipartConfig 14 public class AServlet extends HttpServlet { 15 protected void doPost(HttpServletRequest request, HttpServletResponse response) 16 throws ServletException, IOException { 17 request.setCharacterEncoding("utf-8"); 18 //1、getParameter()方法能够使用了 19 String username = request.getParameter("username");//能够应用了 20 //2、获取文件表单字段,对应的Part对象 21 Part part = request.getPart("resume"); 22 //3、从Part中赢得需求的多少 23 //获取上传文件的MIME类型 24 System.out.println(part.getContentType());//image/jpeg 25 //获取上传文件的字节数 26 System.out.println(part.getSize());//163302 27 //获取上传文件字段名称 28 System.out.println(part.getName());//resume 29 //获取头,这几个头中富含了上传文件的名称 30 System.out.println(part.getHeader("Content-Disposition"));//form-data; name="resume"; filename="WechatIMG2.jpeg" 31 32 33 //截取上传文件名称 34 String filename = part.getHeader("Content-Disposition"); 35 int start = filename.lastIndexOf("filename="") + 10; 36 int end = filename.length()-1; 37 filename = filename.substring(start,end); 38 System.out.println(filename); 39 //保存上传文件 40 part.write("/Users/Shared/"+filename); 41 } 42 }

 

本文由金沙APP发布于突袭反恐任务,转载请注明出处:Servlet3.0

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文