什么是Servlet

Servlet = Server + applet
Server:服务器
applet:小程序
Servlet 含义是服务器端的小程序

Servlet 是JavaWeb三大组件,三大组件分别是 Servlet Filter Listener
Servlet是运行在服务器上的一个java小程序,可以接受客户端发送过来的请求,并响应数据给客户端。
在这里插入图片描述

生命周期

  1. 执行Servlet构造方法
  2. 执行init初始化 (1、2 是第一次访问的时候创建Servlet程序会调用)
  3. 执行service方法 (每次执行都会被调用)
  4. 执行destroy销毁方法 (在web工程停止的时候调用)
  • Servlet实现tomcat只会创建一个,所有的请求都是这个实例去响应
  • 默认情况下,第一次请求时,tomcat才会去实例化,初始化,然后再服务, 提高系统启动速度

启动时机

默认是第一次接受请求时,实例化,初始化

我们可以通过来设置Servlet启动的先后顺序,数字越小,启动越靠前,最小值 0

小结

Servlet 在容器中是单例的,线程不安全的

  • 单例: 所有的请求都是同一个实例去响应
  • 线程不安全: 一个线程需要根据这个实例中的某个成员变量值去做逻辑判断,但是中间某个时机,另一个线程改变了这个成员变量的值,从而导致第一个线程的执行路径发生了变化
  • 尽量不要在Servlet中定义成员变量,如果不得不定义成员变量,那么不要去:不要去修改成员变量的值。 不要根据成员变量的值做一些逻辑判断。
继承关系

javax.servlet.Servlet接口

javax.servlet.GenericServlet抽象类

javax.servlet.http.httpServlet

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关方法

  1. init()
  2. service()
  3. destroy()

服务方法

  1. 当有请求时,Servlet方法会自动相应(其实是tomcat容器调用的)
    • 在HttpServlet中我们会去分析请求的方式:到底是get post delete 等等
    • 然后再决定调用哪个do开头的方法
    • 那么在HttpServlet中这些do方法默认都是405的实现风格-要我们子类去实现对应的方法,否则默认报错
    • 因此,我们在新建Servlet时,我们才会去考虑请求方法,从而决定重写哪个do方法。

设置编码:

tomcat8之前,设置编码

  • get请求:
//get方式目前不需要设置编码
String name = req.getParameter("name");
//将字符串打散为字节数组
byte[] bytes = name.getBytes("ISO-8895-1");
//将字节数组按照设定的编码重新组装成字符串
name = new String(bytes,"UTF-8");
  • post请求:

  • 只需要一句,但是设置编码这一句代码必须放在所有获取参数动作之前

    req.setCharacterEncoding("UTF-8");
    
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐