Servlet规范简介

Servlet规范

1. 作用

  • 接受客户端请求,完成操作任务
  • 指定动态资源文件开发步骤
  • 指定动态资源文件调用规则

2. Servlet接口

2.1 实现方式

  • 实现Servlet接口
  • 继承GenericServlet 抽象类(无协议,需要重写service方法)
  • 继承HttpServlet抽象类(有协议,常用)

2.2 生命周期

Servlet的生命(周期)是由容器管理的,换句话说,Servlet程序员不能用代码控制其生命

  • 初始化Servlet 初始化后调用 init () 方法。
  • 请求处理Servlet 调用 service() 方法来处理客户端的请求。
  • 销毁Servlet 销毁前调用 destroy() 方法。
  • 回收Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

2.3 ServletRequest接口

  1. 介绍

    ServletRequest接口的实现类封装了客户端请求的所有信息

  2. 常用方法

    • 一些HTTP请求头部的获取方法,如getHeader、getHeaders和getHeaderNames。
    • 一些获取请求路径的方法,如getContextPath、getServletPath和getPathInfo,对于路径变量,其中requestURI=contextPath+servletPath+pathInfo,而getRealPath方法则是获取某个相对路径对应的文件系统路径。
    • 获取Cookie的方法,如getCookies方法;提供了判断标识是否为HTTPS的方法,如isSecure方法。
    • 获取客户端语言环境的方法,如getLocale和getLocales,它们对应HTTP的Accept-Language头部
    • 获取客户端编码的方法,如getCharacterEncoding,对应HTTP协议的Content-Type头部。

2.4 ServletResponse接口

  1. 介绍

    ServletResponse接口的对象封装了服务器要返回客户端的所有信息。如果使用HTTP,则包含了HTTP的响应行、响应头部和响应体。

  2. 功能

    • 将执行结果以二进制形式写入到【响应体】。
    • 设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频】等。
    • 设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求。

2.5 Filter接口

  1. 作用
    • 拦截Http服务器,帮助Http服务器检测当前请求合法性
    • 拦截Http服务器,对当前请求进行增强操作

3. Servlet调用规则

  • 重定向
  • 请求转发

3.1 重定向

  1. 工作原理

    1. 客户浏览器发送http请求

    2. 服务器接受后发送302状态码响应及对应新的location给客户浏览器

    3. 客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址

    4. 服务器根据此请求寻找资源并发送给客户

  2. 实现命令

     response.sendRedirect("url") //将地址写入到响应包中响应头中location属性
    
  3. 特征

    1)请求地址:内部的资源地址or其它网站URl

    2)请求次数:浏览器至少发起两次请求

    3)客户端发起

  4. 缺点

    重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间 消耗在往返次数上,增加用户等待服务时间

3.2 请求转发

  1. 工作原理

    • 客户浏览器发送http请求
    • web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户
  2. 实现命令

    //1.通过当前请求对象生成资源文件申请报告对象
    RequestDispatcher  report = request.getRequestDispatcher("/资源文件名");
    //2.将报告对象发送给Tomcat
    report.forward(request,response);
    
  3. 特征

    1) 在请求转发过程中,浏览器只发送一次请求

    2) 转发只能将请求转发给同一个WEB应用中的组件

    3) 服务器发起

  4. 优点

    Servlet之间调用发生在服务端计算机上,节省服务端与浏览器之间往返次数增加处理服务速度

4.Servlet数据共享

  • ServletContext
  • HttpSession
  • Cookie

4.1 ServletContext

  1. 介绍
    • 全局作用域对象
    • 可以读取全局配置参数
    • 可以搜索当前工程目录下面的资源文件
  2. 常用方法
// 域对象
setAttribute(name,value); 
getAttribute(name);
removeAttribute(name);
// 读取全局配置参数
servletContext.getInitParameter("name"); //根据指定的参数名获取参数值
servletContext.getInitParameterNames();  //获取所有参数名称列表

4.2 HttpSesssion

  1. 介绍

    HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端对象,保存在服务器端【会话作用域对象】

  2. 常用方法

    void setAttribute(String name, Object value);
    Object getAttribute(String name);
    void removeAttribute(String name);
    
  3. 销毁机制

    • 直接调用invalidate()方法
    • 服务器关闭了挡墙应用
    • 超出HttpSession过期时间,默认30s
  1. 介绍

    Cookie是由服务器生成的,保存在客户端的一种载体

  2. 原理

  1. 常用方法

    // 新增
    Cookie cookie = new Cookie(name,value);
    response.addCookie(cookie);
    // 查询
    Cookie[] cookies = request.getCookies();
    
  2. 分类

    • 会话级别的Cookie:默认的关闭了浏览器Cookie就销毁了

    • 持久级别的Cookie:需要设置有效时长,关闭浏览器也不会销毁的Cookie

      setMaxAge(int expiry):
      以秒为单位的时间,超过了该时间后Cookie会自动销毁
      setMaxAge(0):
      setPath(Stirng uri):
      
posted @ 2021-04-14 22:52  混吃等你  阅读(177)  评论(0编辑  收藏  举报