1、servlet基础

139 阅读3分钟

servlet生命周期介绍

servlet程序是由web服务器调用,web服务器实现了对servlet生命周期的管理。 声明周期归纳为:servlet加载-》实例化-》服务-》销毁

  1. 创建servlet实例(web容器启动时或者第一次使用这个servlet时),web.xml文件指定servlet位置,反射进行实例化。
  2. servlet容器调用init()方法,初始化对象(主要是为了让servlet对象在处理请求前完成一些初始化工作)
  3. servlet初始化后一直存在于容器中,service()处理客户请求(统一调用service()(必须init()正确完成)然后根据情况调用doGet或者doPost或者自己处理返回
  4. web容器在销毁servlet时候,先调用servlet的distroy方法(仅执行一次)

servlet运行工作原理详解

image.png 处理流程

  1. 用户点击链接,指向servlet
  2. 创建两个对象HttpServletReqest和HttpServletRespose
  3. 容器根据请求中的url对应的servlet,为请求创建或者分配一个线程,并把请求和响应对象传递给servlet线程(线程调用servlet的service方法)
  4. service会调用doGet和doPost或者直接处理
  5. 生成页面放到响应对象中,(此时容器中还有响应对象的引用)
  6. 线程结束,容器吧响应对象转换为一个http响应,并发给客户,然后删除请求和响应对象。

servlet入门详解

servlet是只能运行在服务器端的java类

servlet容器

image.png

从图中可以看出真正管理servlet容器的是context容器,一个context对应一个web工程,context容器是直接管理servlet容器中包装类Wrapper,所以context容器如何工作将直接影响servlet的工作方式。

servlet线程安全

web服务器会给每个请求创建一个线程,并在这个线程上调用service

总结

  1. servlet被部署在服务器上(应用服务器中用于管理java组件的部分被抽成容器),由容器管理servlet的声明周期。
  2. 除非做了配置,否则在容器启动的时候不会被加载,只在第一次请求的时候被加载和实例化
  3. 一旦被加载,一般不会从容器中删除,直到服务器关闭或者重新启动。容器垃圾回收,servlet也有可能被删除。

servlet init()初始化方法详解

首次访问的时候执行,通过ServletConfig参数向servlet传递配置信息,ServletConfig对象还可以获取servletContext对象,用于和容器通信。

servlet init-param配置与参数获取

init-param是配置Servlet的初始化参数

获取参数

  1. 在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
  2. 在servlet的init()方法中通过this.getInitParameter("param1")获取

servlet service()请求处理方法详解

  1. 当需要修改服务器数据的时候,调用doPost方法
  2. 不需要修改服务器数据的时候,调用doGet方法
  3. 如果你重写了service方法没有调用do方法,即使你在继承的servlet中重写了do方法也不会调用。

servlet中service() doGet() doPost() 方法详解

如果没有重写do方法,则会被缺省调用

ServletConfig对象配置并获取Servlet初始化参数详解

一个web应用可以存在多个ServletConfig对象

  1. servlet配置了参数后,web容器在创建servlet实例对象的时候,自动把参数封装到ServletConfig对象中,调用init方法的时候将对象传入servlet
  2. 主要是用于获取字符集编码,数据库连接等

ServletContext对象详解

  1. 一个web应用只有一个ServletContext所以作用范围是整个应用
  2. 可以通过此对象共享数据实现对容器的通信,比如分发请求等

HttpServletRequest客户请求对象详解

获取请求内容

HttpServletRequest获取客户端所有参数

可获取真实ip

HttpServletRequest获取URL,URI方法详解

自己搞搞

HttpServletRequest获取真实IP地址详解

自己搞搞

Java中servlet http status状态码详解

常用状态搞一搞