JavaEE之Servlet

Servlet处理Http请求的过程

  • 接收http请求
  • 获取请求信息,包括请求参数
  • 完成具体的业务功能
  • 跳转到其他的Web组件(重定向和请求转发)
  • 生成Http响应

HttpServlet

  • 继承自GenericServlet,实现了对Http协议的封装,用于处理客户端的http请求及响应。
  • 主要方法
    • init 初始化时调用
    • doGet() 处理前端页面的的http get请求
    • doPost() 处理前端的页面的http post请求

Servlet的编写步骤

  1. 创建web工程
  2. 在src下创建Servlet类,继承HttpServlet
  3. 在自定义的servlet类中重写doGet()、doPost()方法,实现业务逻辑
  4. 需要在web.xml配置文件中配置该servlet
    1. servlet的声明 指定名字,指定实现类(全限定类名)
    2. servlet的映射  指定映射的servlet的名字  指定提供访问的url (要在url的开头加一个"/")

Servlet的配置方式

  • web.xml中配置(各个servlet版本都支持)
    • 1、servlet的声明
      • 标签,常用的子标签有:
        • 指定servlet的名字,可以自定义,但一般与类名相同
        • 指定servlet对应的实现类,使用全限定类名(包名.类名)
        • 用于配置该servlet的初始化参数,由以下两个子标签指定参数名和参数值:
          • 参数名
          • c参数值
        • 用于配置该servlet的加载顺序,如果是0或者大于0,则容器启动时就加载,如果没有设置,则在第一次访问servlet时加载
    • 2、url的映射
      • 配置servlet的url映射,常用的子标签有:
        • 指定要映射的servlet的名字,必须是上一步servlet声明后的名字
        •   指定访问该servlet的url要以“/”开头
  • 注解配置(servlet3.0及之后支持)
    • 使用@WebServlet进行注解配置,配置属性如下:
      • name 指定servlet的名
      • urlPatterns 指定一组servlet的url匹配项
      • value 等价于urlPatterns,但两者不能同时出现
      • initParams用于定义初始化参数,结合@WebInitParam来定义
      • loadOnStartUp 同web.xml中的标签
      • asyncSuppoed 是否支持异步,默认为false
  • @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
    • 初始化
      • 调用init方法,开发者可以在此阶段获取一些初始化参数等操作
    • 处理请求
      • service()方法自动调用doGet()或doPost()处理请求及响应
    • 销毁
      • 容器关闭或者需要让出资源时,会调用destroy方法,销毁servlet实例

你可能感兴趣的:(JavaEE之Servlet)