0%

Servlet源码解析

一个简单的Servlet请求

  1. 新建HelloController继承HttpServlet
  2. 在web.xml中,注册HelloController,或者使用@WebServlet注解注册HelloController
  3. 重写doGet(),doPost()或者其他doXxx()方法

Servlet请求参数

HttpServletRequest和HttpServletResponse是doXxx()方法的默认参数。

HttpServletRequest

HttpServletRequest代表浏览器发送给服务器的请求报文。该对象由web服务器创建(如Tomcat),最终作为参数传递到doXxx()或者其他方法中,我们可以在doXxx()方法中直接使用

  1. 获取用户发送的请求参数

    1
    request.getParmater("name");
  2. 获取项目的名字

    1
    request.getContextPath();
  1. 作为一个域对象,在不同的web资源之间共享数据。
  2. 请求和转发
    1
    request.getRequestDispatcher("target.html").forward(request,response);

HttpServletResponse

HttpServletResponse代表服务器发送给浏览器的响应报文。该对象由web服务器创建(如Tomcat),最终将作为参数传递到doXxx()方法中,我们可以在doXxx()方法中直接使用。

  1. 响应给浏览器一个网页或者Json数据等

    1
    2
    PrintWriter printWriter = response.getWriter();
    printWriter.writer(Hello Servlet~);
  2. 请求的重定向

    1
    response.sendRedirect("target.html");

转发和重定向的区别

转发 重定向
请求的次数 1 2
发生的位置 服务器内部 浏览器
浏览器地址 不改变 改变

过滤器

通过实现Filter接口,完成我们自定义的过滤器功能。过滤器有以下功能:

  1. HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
  2. 根据需要检查HttpServletRequest,也可以修改HttpServletRequest的头和数据
  3. 在HttpservletResponse到达客户端之前,拦截HttpServletResponse
  4. 根据需要检查HttpServletResponse,也可以修改HttpServletReponse的头和数据

监听器

监听器可以监听客户端的请求,服务端的操作,通过监听自动激发一些操作。监听器主要有以下几种:

  1. ServletContextListener:对应所有用户
  2. ServletSessionListener:对应于一个用户
  3. ServletRequestListener:对应用一个请求
    我们可以实现上面的接口,去完成监听事件。

Servlet生命周期

  1. 通过调用init()方法初始化Servlet实例
  2. 调用service()方法处理请求
  3. 调用相应的请求方式的方法比如post请求,调用doPost()方法
  4. 停止服务的时候,调用destroy()方法

HttpServlet类图关系

image

Servlet工作流程

image

  1. 浏览器发出Http请求到Servlet容器
  2. Servlet容器生成HttpServletRequest和HttpServletResponse
  3. Servlet将HttpServletRequest和HttpServletResponse参数传递给Filter,Filter处理过滤请求
  4. Filter将HttpServletRequest和HttpServletResponse传递给Servlet,Servlet处理请求
  5. Servlet处理完请求后,将数据返回给Filter,Filter返回给Servlet容器,Servlet容器再返回给浏览器
iisheng wechat
微信扫码关注 Coder阿胜