Javaweb学习之servlet接口常见实现类

学习目的

  1. 掌握servlet接口常用的实现类
  2. 掌握servlet接口每一个实现类的功能作用与使用
  3. 了解如何查看servlet接口实现类源码

一、HttpServlet抽象类

  1. 描述
    HttpServlet抽象类是一个Servlet接口的实现类,但HttpServlet并非直接实现Servlet,HttpServlet继承于抽象类GenericServlet类,GenericServlet类才直接实现Servlet接口。

  2. 作用
    HttpServlet的出现是为了降低Servlet实现类与Servlet接口之间的实现难度,当Servlet实现类只想重写实现Servlet接口中对自己有用的方法时,就可以使用Servlet实现类继承于HttpServlet,Servlet实现类不想重写Servlet接口的方法全部交由HttpServlet抽象类来继承。

  3. 源码解释

// HttpServlet类的Service()方法,采用"模板模式",完成父类决定在何种情况下调用子类的何种方法
// 具体是:可以自动判断浏览器提交请求的方式,决定调用Servlet实现类重写的doGet() 或 doPost()方法
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String method = req.getMethod();
       long lastModified;
       if (method.equals("GET")) {
           lastModified = this.getLastModified(req);
               //  具体参考源码在Servlet源码包的 package javax.servlet.http;
           }
       } else if (method.equals("PUT")) {
          
       } else {
           String errMsg = lStrings.getString("http.method_not_implemented");
           Object[] errArgs = new Object[]{method};
           errMsg = MessageFormat.format(errMsg, errArgs);
           resp.sendError(501, errMsg);
       }
}

二、HttpServletRequest接口

  1. 描述
    HttpServletRequest接口来自于Servlet规范,其继承于ServletRequest接口。存在于Tomcat源码jar包下的servlet-api.jar包中。

  2. 特点

  • HttpServletRequest接口实现类由Http服务器负责提供,而不是由开发人员进行实现;
  • HttpServletRequest接口负责在 doGet() 或 doPost()方法运行时 读取Http请求协议包中的信息;
  • 开发人员习惯于将HttpServletRequest接口修饰的对象称为 请求对象。
  1. 作用
  • 读取Http请求协议包中 请求行的信息,即读取URL信息 和 请求提交的方式;
  • 可以读取保存在Http请求协议包中 请求头(GET提交) 或 请求体(POST提交)中的请求参数信息;
  • 可以代替浏览器 向Http服务器申请资源文件调用。

三、HttpServletResponse接口

  1. 描述
    HttpServletResponse接口来自于Servlet规范,其继承于ServletResponse接口。存在于Tomcat源码jar包下的servlet-api.jar包中。

  2. 特点
    HttpServletResponse接口实现类由Http服务器负责提供
    HttpServletResponse接口负责将doGet/doPost方法执行结果写入到【响应体】交给浏览器
    开发人员习惯于将HttpServletResponse接口修饰的对象称为【响应对象】

  3. 主要功能

  • 将doGet() 或 doPost()的执行结果以二进制形式写入到 响应体;
  • 设置响应头中的 content-type属性 -- 返回数据的类型,从而控制浏览器使用对应的编译器 将响应体二进制数据编译为文字、图片、视频、命令等;
  • 设置响应头中的 location -- 位置属性,将一个请求的地址赋值给location,从而控制浏览器向指定的服务器发送请求。

四、ServletContext接口

  1. 描述
    ServletContext接口来自于Servlet规范中一个接口。存在于Tomcat源码jar包下的servlet-api.jar包中。

  2. 特点

  • 在Tomcat中由Http服务器负责提供这个接口实现类;
  • 如果两个Servlet来自于同一个网站,彼此之间可通过网站的ServletContext实例对象实现数据共享;
  • 开发人员习惯于将ServletContext对象称为 全局作用域对象。
  1. 工作原理
    每一个网站都存在一个全局作用域对象,这个全局作用域对象 相当于 一个Map图。在这个网站中,Servlet实现类可以将一个数据存入到全局作用域对象,而当前网站中的其他Servlet实现类对象,都可以从全局作用域对象得到这个数据并进行使用。

  2. 全局作用域对象生命周期

  • 在Http服务器启动过程中,自动为当前网站在内存中创建一个全局作用域对象;
  • 在Http服务器运行期间时,一个网站只有一个全局作用域对象;
  • 在Http服务器运行期间,全局作用域对象一直处于存活状态;
  • 在Http服务器准备关闭时,Http服务器将当前网站中全局作用域对象进行销毁处理。
  1. 全局作用域对象特点
  • 同一个网站中,OtherServlet将数据共享给anotherServlet;
  • 全局作用域对象生命周期贯穿网站整个运行期间。
  1. 全局作用域对象实现
      public class OtherServlet extends HttpServlet{
            public void doGet(HttpServletRequest request,HttpServletResponse response){
                   // 1、通过请求对象request 向Tomcat索要当前网站中 全局作用域对象
                  ServletContext application = request.getServletContext();
                  // 2、将数据 添加到全局作用域对象作为 共享数据
                  // 全局作用域对象 == Map(key,value)
                  application.setAttribute(key1,数据)
              }
}

      public class AnotherServlet extends HttpServlet{
            public void doGet(HttpServletRequest request,HttpServletResponse response){
            // 1、通过请求对象request 向Tomcat索要当前网站中 全局作用域对象
            ServletContext application = request.getServletContext();
            // 2、从全局作用域对象得到指定关键字对应数据
            // 全局作用域对象 == Map,获取数据采用get(key)
            Object 数据 =  application.getAttribute(key1);
            }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文包括: Servlet简介关于Servlet的一些类 Servlet生命周期 ServletConfig获得初...
    廖少少阅读 9,436评论 1 67
  • 前言 Spring Boot 中的spring-boot-web-starter中默认配置的Web容器就是Tomc...
    whllhw阅读 4,918评论 0 0
  • Servlet技术(上) Tomcat的<CATALINA_HOME>/lib/servlet-api.jar文件...
    So_ProbuING阅读 4,363评论 0 1
  • 一 servlet概述 狭义的Servlet指javax.servlet包中的一个接口,而广义的Servlet则是...
    静慎独阅读 3,541评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 11,038评论 0 5

友情链接更多精彩内容