Servlete三.0的首要性新特色如下3局地永利网上娱乐,  Servlete三.0的最重要新特色如下3片段

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

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

二、概述

  Servlete三.0的主要新特色如下3局地:

  Servlete叁.0的显要新特色如下3有个别:

  • 应用@WebServlet、@WebFilter、@WebListener四个注明来取代web.xml文件中的Servlet、Filter、Listener的配置;
  • Servlet异步处理:当Servlet处理比较棘手的题材时,那会让客户觉得到很卡。当使用尤其处理时方可把早已处理好的始末先一步响应给客户端浏览器,然后使用另1个线程来成功急难的操作,也正是把内容壹部分某些的来得出来;
  • 上传组件:不用再使用fileupload等第二方的上传组件,使用Servlet三.0的上传组件会更利于。
  • 动用@WebServlet、@WebFilter、@WebListener多个注明来代替web.xml文件中的Servlet、Filter、Listener的铺排;
  • Servlet异步处理:当Servlet拍卖相比较费劲的难点时,那会让客户觉获得很卡。当使用极度处理时得以把曾经处理好的剧情先一步响应给客户端浏览器,然后接纳另3个线程来完毕急难的操作,约等于把内容1部分有个其余来得出来;
  • 上传组件:不用再接纳fileupload等第1方的上传组件,使用Servlet三.0的上传组件会更利于。

三、注解代替配置文件

1. 删除web.xml
2. 在Servlet类上添加@WebServlet(urlPatterns={"/AServlet"})
总结:
三、注解代替配置文件

1. 删除web.xml
2. 在Servlet类上添加@WebServlet(urlPatterns={"/AServlet"})
总结:
  • 表明好处:配置音讯少!
  • 诠释缺点:不便利修改!
  • 诠释好处:配置新闻少!
  • 诠释缺点:不便利修改!

3. 在Filter类上添加@WebFilter(urlPatterns="/AFilter")
4. 在Listener类上添加@WebListener

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

  2. 实现异步的步骤
3. 在Filter类上添加@WebFilter(urlPatterns="/AFilter")
4. 在Listener类上添加@WebListener

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

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

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

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假使无法健康输出,那评释响应体大小不足51二B,那你必要多输出点废话!
  • AsyncContext#complete():公告汤姆cat我们异步线程已经实施达成了!那让汤姆cat才会及时的断开与浏览器的连日!

    一 @WebServlet(name = “BServlet”,urlPatterns = “/BServlet”,asyncSupported = true)
    二 public class BServlet extends HttpServlet {
    3 public void doGet(final HttpServletRequest req, final HttpServletResponse resp)
    四 throws ServletException, IOException {
    五 resp.setContentType(“text/html;charset=utf-八”);

    7 // 扶助IE!若是出口不足51二B,未有异步效果!
    八 for(int i = 0; i <= 51二; i++) { 九 resp.getWriter().print("a"); 拾 } 1壹 resp.getWriter().flush(); 1贰 一3 //1. 获得异步上下文对象 14 final AsyncContext ac = req.startAsync(req, resp); 1伍 16 //二. 给上下文对象八个Runnable对象,让它执行那些职分一七 ac.start(new Runnable() { 1八 public void run() { 1九 println("今后眼看开首
    “, resp);
    20 sleep(2000);
    21 for(char c = ‘A’; c <= 'Z'; c++) { 22 println(c+"", resp); 二三 sleep(250); 2四 } 25 // 公告汤姆cat大家已经推行实现了! 26 ac.complete(); 2七 } 2八 }); 2九 } 30 public void println(String text, HttpServletResponse resp) { 3一 try { 3二 resp.getWriter().print(text); 3三 resp.getWriter().flush(); 3四 } catch (IOException e) { } 3伍 } 36 public void sleep(long ms) { 三七 try { 3八 Thread.sleep(ms); 3九 } catch (InterruptedException e) { 40 } 四一 } 4二 }

    5、上传协理

    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>
  • 给上下文3个Runnable对象,运营它!(给上下文1个职分,让它成功!)

    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才会及时的断开与浏览器的连日!

    一 @WebServlet(name = “BServlet”,url帕特terns = “/BServlet”,asyncSupported = true)
    二 public class BServlet extends HttpServlet {
    三 public void doGet(final HttpServletRequest req, final HttpServletResponse resp)
    四 throws ServletException, IOException {
    五 resp.setContentType(“text/html;charset=utf-八”);
    6
    7 // 援救IE!假如出口不足51二B,未有异步效果!
    八 for(int i = 0; i <= 512; i++) { 玖 resp.getWriter().print("a"); 10 } 1一 resp.getWriter().flush(); 1二 一3 //一. 获得异步上下文对象 1四 final AsyncContext ac = req.startAsync(req, resp); 15 16 //贰. 给上下文对象1个Runnable对象,让它实施那些职责一7 ac.start(new Runnable() { 1八 public void run() { 1玖 println("未来立时初始
    “, resp);
    20 sleep(2000);
    21 for(char c = ‘A’; c <= 'Z'; c++) { 2二 println(c+"", resp); 贰三 sleep(250); 二四 } 25 // 通告Tomcat我们曾经推行实现了! 贰陆 ac.complete(); 二柒 } 28 }); 2玖 } 30 public void println(String text, HttpServletResponse resp) { 3一 try { 32 resp.getWriter().print(text); 3三 resp.getWriter().flush(); 3四 } catch (IOException e) { } 35 } 3陆 public void sleep(long ms) { 3七 try { 3八 Thread.sleep(ms); 3玖 } catch (InterruptedException e) { 40 } 四1 } 4贰 }

    五、上传帮助

    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对上传提供了支持:
2、Servlet3.0对上传提供了支持:
  • 表单不变
  • 在Servlet中不要求再采纳commons-fileupload,而是利用Servlet3.0提供的上传组件接口!
  • 表单不变
  • 在Servlet中不须求再利用commons-fileupload,而是采取Servlet三.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
  • 使用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="http://java.sun.com/jsp/jstl/core” %>
    3
    4
    5 Title
    6
    7
    8

    注册

    9


    11 简 历:
    12
    13

    14
    15

    一 package web.servlet;

    叁 import javax.servlet.ServletException;
    四 import javax.servlet.annotation.MultipartConfig;
    伍 import javax.servlet.annotation.WebServlet;
    六 import javax.servlet.http.HttpServlet;
    七 import javax.servlet.http.HttpServletRequest;
    8 import javax.servlet.http.HttpServletResponse;
    九 import javax.servlet.http.Part;
    10 import java.io.IOException;
    1一
    1二 @WebServlet(name = “AServlet”,urlPatterns = “/AServlet”)
    壹三 @MultipartConfig
    1四 public class AServlet extends HttpServlet {
    1伍 protected void doPost(HttpServletRequest request, HttpServletResponse response)
    1陆 throws ServletException, IOException {
    1柒 request.setCharacterEncoding(“utf-捌”);
    1八 //一、getParameter()方法可以行使了
    19 String username = request.getParameter(“username”);//能够动用了
    20 //二、获取文件表单字段,对应的Part对象
    二一 Part part = request.getPart(“resume”);
    2二 //3、从Part中获取须求的多少
    二3 //获取上传文件的MIME类型
    贰四 System.out.println(part.getContentType());//image/jpeg
    二伍 //获取上传文件的字节数
    26 System.out.println(part.getSize());//163302
    二七 //获取上传文件字段名称
    28 System.out.println(part.getName());//resume
    2九 //获取头,那个头中包涵了上传文件的名称
    30 System.out.println(part.getHeader(“Content-Disposition”));//form-data; name=”resume”; filename=”WechatIMG二.jpeg”
    3一
    3二
    3三 //截取上传文件名称
    3肆 String filename = part.getHeader(“Content-Disposition”);
    3五 int start = filename.lastIndexOf(“filename=\””) + 10;
    3六 int end = filename.length()-一;
    叁7 filename = filename.substring(start,end);
    3八 System.out.println(filename);
    3玖 //保存上传文件
    40 part.write(“/Users/Shared/”+filename);
    四一 }
    4二 }

  • 那须求大家生死与共从Content-Disposition头中截取!

    1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core” %>
    3
    4
    5 Title
    6
    7
    8

    注册

    9


    11 简 历:
    12
    13

    14
    15

    一 package web.servlet;

    3 import javax.servlet.ServletException;
    四 import javax.servlet.annotation.MultipartConfig;
    5 import javax.servlet.annotation.WebServlet;
    陆 import javax.servlet.http.HttpServlet;
    七 import javax.servlet.http.HttpServletRequest;
    8 import javax.servlet.http.HttpServletResponse;
    玖 import javax.servlet.http.Part;
    十 import java.io.IOException;
    1一
    1二 @WebServlet(name = “AServlet”,urlPatterns = “/AServlet”)
    一3 @MultipartConfig
    1四 public class AServlet extends HttpServlet {
    1伍 protected void doPost(HttpServletRequest request, HttpServletResponse response)
    1陆 throws ServletException, IOException {
    一柒 request.setCharacterEncoding(“utf-8”);
    18 //一、getParameter()方法能够行使了
    1玖 String username = request.getParameter(“username”);//能够动用了
    20 //2、获取文件表单字段,对应的Part对象
    二一 Part part = request.getPart(“resume”);
    22 //3、从Part中获取必要的多寡
    2三 //获取上传文件的MIME类型
    贰4 System.out.println(part.getContentType());//image/jpeg
    二伍 //获取上传文件的字节数
    贰陆 System.out.println(part.getSize());//163302
    二柒 //获取上传文件字段名称
    2八 System.out.println(part.getName());//resume
    2九 //获取头,这些头中蕴涵了上传文件的名称
    30 System.out.println(part.getHeader(“Content-Disposition”));//form-data; name=”resume”; filename=”WechatIMG二.jpeg”
    31
    3二
    3三 //截取上传文件名称
    34 String filename = part.getHeader(“Content-Disposition”);
    3伍 int start = filename.lastIndexOf(“filename=\””) + 十;
    3陆 int end = filename.length()-一;
    叁7 filename = filename.substring(start,end);
    3八 System.out.println(filename);
    3九 //保存上传文件
    40 part.write(“/Users/Shared/”+filename);
    肆一 }
    4贰 }

 

 

相关文章