Servlet 知识总结

servlet是一段运行在服务器上的程序,没有main方法,需要通过servlet容器(例如 Tomcat)来调用他的方法

servlet容器主要负责管服务器机器,比如端口,接收http请求,发送http响应等,具体的业务流程将会调用servlet的方法(doGet,doPost 。。。)

在一个JVM中,servlet一般只有一个实例。对于一个请求的到来, 容器会分配一个servlet线程进行处理

Servlet 知识总结

Servlet事实上是一个接口,HttpServlet继承了GenericServlet,后者是实现Servlet的一个抽象类,这两个类都是抽象类。

servlet 生命周期

  • servlet 类的加载
  • servlet 实例化
  • 调用init方法
  • 调用service方法(负责调用doPost,doGet 等方法)
  • 调用destroy方法

Servlet 知识总结

ServletConfig 是一个存有servlet的配置信息的对象,每一个servlet都有。

ServletContext 则是一个存有应用配置信息的对象,包含Servlet运行时的环境,一个应用只有一个,每个servlet都能访问

在servlet初始化之前不能使用servlet初始化参数。容器首先读取web.xml,然后根据内容生成一个servletConfig,然后调用servlet的init,传入ServletConfig

context初始化需要使用ServletContextListener接口进行监听

完整的过程

  1. 容器读取web.xml配置文件

  2. 容器获得context初始化参数,创建ServletContext,把参数放入context中

  3. 容器创建ServletContextListener的一个实例,调用contextInitialized,传入ServletContextEvent。执行一系列context初始化代码。可以将需要与servlet共享的对象setAttribute

  4. 之后就是servlet自己的初始化了

Servlet 知识总结

在Web应用中,属性有三个作用域,分别为context,request,httpsession。

context,httpsession中的属性不是线程安全的,修改的时候需要加锁

一个servlet要么转发请求,要么响应请求

session存在与服务器上

cookie存在于客户端上

sessionId 经常借用cookie头部进行传递而已

对于每个应用的一个SessionId,只有一个HttpSession对象,如果容器发现sessionId不在同一vm中 httpSession对象会发生迁移

jsp实际上是一个servlet,只不过是由容器生成的

<%@ page import=”xxx,xxxx”%> 指令 用于向容器提供特殊的指示

<% %> Scriptlet 普通Java代码,会原样放在servlet的服务方法中

<%= %> 表达式,会成为out.print()参数, 不需要参数

<%! %> 声明 用于声明所生成的servlet类成员

所有scriptlet中声明的变量总是局部变量

jsp:useBean中的scope

  • page: 当前jsp页面有效 对象储存在pagecontext中
  • request: 当前请求有效 对象储存在servletrequest中
  • session: 当前会话有效 对象储存在httpsession中
  • application:所有用户都可以使用 储存在servletcontext中

bean法则

  1. 必须有一个无参数的公共构造函数
  2. get,set,方法
  3. set的参数与get返回值 类型必须一样
  4. set和get方法决定了性质名(set,get后面的名字)和类型
  5. 结合jsp,性质类型必须为string或者基本类型

过滤器

重要方法:init(), doFilter(), destory()

过滤器可入栈,通过filterchain.doFilter调用下一个filter,该filter执行完后回到当前函数

匹配的过滤器会按照DD中声明的顺序组成一个链

请求过滤器,响应过滤器

响应过滤器需要传入一个定制的响应对象HttpServletResponse(包含定制输出流),防止容器直接获得servlet的响应而略过了过滤器要做的处理。主要使用使用xxxxxWrapper,包装类。继承它,覆盖对应的方法

图片来自《Head First Servlets and JSP 中文版 第2版》

相关文章: