【JavaEE】Servlet学后大汇总

一、WEB容器

web容器干啥用的:

  1. 管理Servlet的生命周期;
  2. 维持浏览器和服务器之间的通信(对话);
  3. 加载web应用,处理请求。
  4. 多线程支持。

二、Servlet常用API和简单说明

Tomcat10jakarta,如果不是这个版本就是javax,本质没变.

jakarta.servletjakarta.servlet.http包表示servlet api 的接口和类。
jakarta.servlet包中包含servlet或容器使用的许多接口和类。这些接口不是特定于任何协议。
jakarta.servlet.http包中包含仅用于负责http请求的接口和类。

注:以下说的是一些常用的,并不是所有。
🙌jakarta.servlet包中的接口

Servlet
ServletRequest//service方法第一个参数
ServletResponse//service方法第二个参数
RequestDispatcher//请求转发对象
ServletConfig//Servlet配置信息
ServletContext//应用项目配置信息
Filter  //过滤器
FilterChain // doFilter方法中的一个参数类型,该实现是由所使用的Tomcat猫它实现的。当然也可以是别的服务器

🙌jakarta.servlet包中的类

GenericServlet//实现了Servlet接口的抽象类(适配器)
ServletException

🙌jakarta.servlet.http包中的接口

HttpServletRequest//继承了ServletRequest接口
//在ServletRequest接口方法外,还有getMethod(),getContextPath()等有用方法
HttpServletResponse//继承了ServletReponse接口
HttpSession//session会话,会话域对象

🙌jakarta.servlet.http包中的类

HttpServlet//继承了GenericServlet抽象类,HttpServlet也是一个抽象类
Cookie // 一种会话跟踪技术

HttpServlet不同于GenericServlet抽象类的地方是它享有Http协议
它使用了模块化设计,可以针对请求类型做出响应的操作,而这个是GenericServlet所达不到的。

三、Servlet生命周期

Servlet的生命周期可以分为几步来看:

  1. Tomcat小猫咪去web.xml文件中找对应的Servlet,然后通过反射对Servlet进行加载;
  2. 通过类对象创建出对应的Servlet对象(通过Servlet中的无参构造);
  3. 有了Servlet对象,然后调用里面的init方法进行初始化Servlet;此时ServletConfig对象被创建。
  4. 然后调用Servlet类的service方法;
  5. 最后调用destroy方法,在服务中删除Servlet实例之前,该方法使得Servlet有机会清理所有的资源,例如:内存,线程等等。

在这里插入图片描述

Servlet对象是什么时候被创建的?

  • 是首次向服务器发送请求的时候创建的。服务器是先判断内存中是否存在该Servlet对象,如果存在就直接调用service方法,不存在就执行上面四大步。
  • 那能否在打开服务器的时候就创建对象呢?
    可以的;在web.xml文件中配置< load-on-startup>(加载优先级) < /load-on-startup>
    如下图所示(未发送请求就创建好对象咯):
    在这里插入图片描述
  • 也可以通过 WebServlet 注解去进行设置;

在这里插入图片描述

Servlet被称为假单例

我们所知道的单例都是把构造方法给私有,然后通过方法获取实例对象,但Servlet构造方法仍然是可以用的,但它在服务器出现的次数是一次的,所以说它是假单例。
如何验证?
通过init方法服务器调用的次数就可以简单验证了,当然最准确的验证是在Servlet构造方法中输出个东西,反复的发送请求看看构造方法中的输出语句会不会反复执行?
服务器中init方法只执行一次,当重复发送请求的时候,是先检验内存中是否有该对象,如果存在就直接调用service方法,并不会反复的去创建Servlet对象。

一个请求对应一个request和一个response

四、Servlet属性设置——三个范围(请求、会话、应用)

  • request(对应的类名:ServletRequest
    请求域(请求级别的)
  • session(对应的类名:HttpSession
    会话域(用户级别的)
  • application(对应的类名:ServletContext
    应用域(项目级别的,所有用户共享的)
    这三个域对象的大小关系:request<session<application
    他们三个域对象都有以下四个公共的方法:
void setAttribute(String name,Object obj)//向域中绑定数据
Object getAttribute(String name)//获取域中的数据
void removeAttribute(String name)//删除域中的数据
Enumeration< String> getAttributeNames()//得到域中所有数据对应的name

使用规则:尽量使用小的域
注:
HttpServletRequest是ServletRequest的一个子接口

getContextPath
getSession
getServletPath
getMethod
.....等好用的方法是在HttpServletRequest

五、会话、过滤器

可以看看下面这些博客了解,Servlet 中的会话机制和过滤器(采用了责任链设计模式设计的)

Session会话机制
Cookie会话
Filter过滤器

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假正经的小柴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值