Servlet处理Http请求的过程:
- 接收http请求
- 获取请求信息,包括请求参数
- 完成具体的业务功能
- 跳转到其他的Web组件(重定向和请求转发)
- 生成Http响应
HttpServlet
- 继承自GenericServlet,实现了对Http协议的封装,用于处理客户端的http请求及响应。
- 主要方法
- init 初始化时调用
- doGet() 处理前端页面的的http get请求
- doPost() 处理前端的页面的http post请求
Servlet的编写步骤
- 创建web工程
- 在src下创建Servlet类,继承HttpServlet
- 在自定义的servlet类中重写doGet()、doPost()方法,实现业务逻辑
- 需要在web.xml配置文件中配置该servlet
- servlet的声明<servlet></servlet> 指定名字<servlet-name></servlet-name>,指定实现类(全限定类名)<servlet-class></servlet-class>
- servlet的映射<servlet-mapping></servlet-mapping> 指定映射的servlet的名字<servlet-name></servlet-name> 指定提供访问的url (要在url的开头加一个"/")<url-pattern></url-pattern>
Servlet的配置方式
- web.xml中配置(各个servlet版本都支持)
- 1、servlet的声明
- <servlet>标签,常用的子标签有:
- <servlet-name> 指定servlet的名字,可以自定义,但一般与类名相同
- <servlet-class> 指定servlet对应的实现类,使用全限定类名(包名.类名)
- <init-param> 用于配置该servlet的初始化参数,由以下两个子标签指定参数名和参数值:
- <param-name> 参数名
- <param-value> c参数值
- <load-on-startup> 用于配置该servlet的加载顺序,如果是0或者大于0,则容器启动时就加载,如果没有设置,则在第一次访问servlet时加载
- <servlet>标签,常用的子标签有:
- 2、url的映射
- <servlet-mapping>配置servlet的url映射,常用的子标签有:
- <servlet-name> 指定要映射的servlet的名字,必须是上一步servlet声明后的名字
- <url-pattern> 指定访问该servlet的url要以“/”开头
- <servlet-mapping>配置servlet的url映射,常用的子标签有:
- 1、servlet的声明
- 注解配置(servlet3.0及之后支持)
- 使用@WebServlet进行注解配置,配置属性如下:
- name 指定servlet的名
- urlPatterns 指定一组servlet的url匹配项
- value 等价于urlPatterns,但两者不能同时出现
- initParams用于定义初始化参数,结合@WebInitParam来定义
- loadOnStartUp 同web.xml中的<load-on-startup>标签
- asyncSuppoed 是否支持异步,默认为false
- 使用@WebServlet进行注解配置,配置属性如下:
-
@WebServlet( name="HelloServlet", urlPatterns={"/HelloServlet"}, initParams= {@WebInitParam(name="name",value="gao"), @WebInitParam(name="age",value="20")}, loadOnStartUp=0 )
- 两种servlet配置方式的优缺点
- 注解配置需要servlet3.0及以上、Tomcat7及以上;web.xml配置,不要求版本
- 注解配置代码量少、可读性强、便于理解,但是如果项目中有大量的servlet,不便于查找和修改
- web.xm的配置,集中管理所有的servlet便于查找和修改,但可读性差
Servlet的生命周期
- 分为四个阶段
- 实例化
- tomcat容器加载并实例化servlet按照如下规则(servlet在Tomcat中是以单例模式存在的):
- 如果配置了loadonStartup项,且值大于等于0,则容器一启动就加载并实例化该servlet
- 如果没有上述配置,则容器在第一次请求该servlet的时候加载并实例化该servlet
- tomcat容器加载并实例化servlet按照如下规则(servlet在Tomcat中是以单例模式存在的):
- 初始化
- 调用init方法,开发者可以在此阶段获取一些初始化参数等操作
- 处理请求
- service()方法自动调用doGet()或doPost()处理请求及响应
- 销毁
- 容器关闭或者需要让出资源时,会调用destroy方法,销毁servlet实例
- 实例化