Servelt生命周期与执行原理

Servlet

宏观上来讲:Servlet是连接Web服务器与服务端java程序的协议,是一种通信归范。这个规范是以一套接口的形式体现。

微观来讲:Servlet是Servlet接口实现类的一个实例对象,是运行在服务器上的一段java小程序

Servlet的主要功能:根据客户提交的请求,调用服务器相关的java代码,完成对请求的处理与运算。

**Servlet生命周期

1,Servlet对象的创建(实例化):执行无参构造器
2,Servlet对象的初始化:执行init()方法
3,Servlet对象服务的执行:执行service()
4,Servlet对象被销毁的整个过程:执行destroy()方法
该过程由Web服务器负责管理,程序员可以获取到Servlet的生命周期时间点,并可以指定Servlet做一些具体业务相关的事情。

**Servlet特征:

1,一个Sevlet实例对象只创建和初始化一次(第一次访问时),但它的service()方法用户每提交一次请求,就会执行一次,所以Servlet是单例多线程的。
2,Servlet单例多线程,存在线程安全问题,一般情况下不去在Servlet中定义可修改的成员变量。
3,一个Servlet实例只执行一次destroy()方法,即在应用停止时(关闭服务器)执行。
4,默认情况下,Servlet在Web容器启动时是不会实例化的,(直接创建会占用内存),但对客户响应速度有影响的重要Servlet,一般会在Web容器启动时先创建好(在WEB-INF下的web.xml中设置)。
<!--注册Servlet-->
<Servlet>
	<servlet-name>some-servlet</servlet-name>
	<servlet-class>全限定性类名</servlet-class>
	<!--
		1,load-on-up元素标记容器是否应该在Web容器启动时就创建Servlet
		2,这个值必须为整数,如果该值为负数或没有设置,Servlet还是会在请求发出时创建。
		3,如果值为正整数或0,则值越小,优先级越高,越先被加载。
	-->
	<load-on-startup>数字<load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>some-servlet</servlet-name>
	<url-pattern>/some</url-pattern>
</servlet-mapping>

Servlet执行原理:

两个Map:在这里插入图片描述
两个Map:
Web容器中存在两个Map,这两个Map的key均为Servlet注册时的url-pattern的值,但其value是不同的。
第一个Map的value是Servlet实例对象的引用,第二个Map是
servlet-class的值,即Servlet类的全限定性类名。

过程:
当对Servlet的请求到达Sevlet容器时,会先对请求进行解析,使用解析出的URI,作为比较对象,从第一个Map中查找是否存在相匹配的key,若存在相匹配的key,那么读取其value,即Servlet对象的引用,执行该Servlet的service()方法。若不存在相匹配的key,则到第二个Map中查找是否有相匹配的key,若存在,则读取其value,即要访问的Servlet的全限定性类名。然后使用反射机制class.forName(“全限定性类名”)创建Servlet实例,并将该实例写入到第一个Map中,然后再执行该Servlet的service()方法,若第二个Map仍未找到匹配的key,就会跳转到系统错误处理页面404。

常用状态码:
2xx:表示对请求计算与响应成功。其中常用的状态码是200
4xx:表示请求错误。其中常见的状态码是404,表示资源找不到。一般都是请求路径书写问题。
5xx:表示服务器错误。其中常见的状态码是500,表示服务器内部错误。一般都是服务端的java代码发生错误。

默认404 页面对用户不友好,可以在web.xml中指定一个更加友好的页面

<!--指定404状态码的错误页面-->
<error-page>
	<error-code>404</error-code>
	<location>/errors.html</location>
</error-page>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值