servlet执行原理

1.表述

1.1什么是servlet

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地(动态的)浏览和修改数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,
广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中(Tomcat,Servlet容器)。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

1.2servlet生命周期

Servlet接口:javax.servlet.Servlet,主要用来处理基于HTTP协议的请求和响应

常用的方法:
void init(ServletConfig config) :初始化当前Servlet
void service(ServletRequest req, ServletResponse res) :服务方法
void destroy() :销毁方法
ServletConfig getServletConfig() :获取Servlet的配置信息
String getServletInfo() :获取Servlet的相关的信息


Servlet的生命周期方法:
void init(ServletConfig config) :初始化当前Servlet
void service(ServletRequest req, ServletResponse res) :服务方法
void destroy() :销毁方法

生命周期方法的执行顺序:
执行构造器创建对象—>执行init方法执行初始化操作—>执行service方法—>执行destroy进行资源的销毁
注意:
1.在Servlet中必须要保留一个公共的无参数的构造器(Tomcat使用反射创建对象),Servlet在整个应用最多只有一个对象
2.初始化方法在第一次请求的时候执行
3.service方法每次访问都会执行
4.destroy方法在正常关闭服务器的时候执行,(通常不会将关闭资源的操作放在该方法中)

1.3servlet执行宏观描述

servlet不能单独存在,必须被部署到Servlet容器中,由容器进行实例化并调用其方法,Servlet容器是Web服务器或javaee服务器的一部分,负责在servlet的生命周期内管理servlet
servlet的生命周期定义了一个servlet如何被加载和初始化,怎样接受请求,响应请求和提供服务以及被卸载等。
可分为四个阶段:
1.加载与实例化:servlet容器负责加载与实例化servlet,在默认情况下,第一次请求访问某个servlet时,容器就会创建一个相应的Servlet实例(即进行实例化)
2.初始化:在servlet实例化之后,容器就会调用servlet的init()方法初始化该实例。
3.处理请求:servlet容器调用servlet实例的sevice()方法对请求进行处理。在service()方法中,servlet通过servletrequest对象得到客户端的相关信息与请求信息,在对请求进行处理后,再调用servletresponse对象的方法设置响应信息。
4.终止服务:当web应用被终止,或web应用重新启动,或servlet容器终止运行,或servlet容器重新装载servlet的新实例时,容器就会调用实例的destroy()方法释放该servlet的资源,完成卸载过程

1.4servlet请求流程

在这里插入图片描述

1.5servlet初始化参数

在这里插入图片描述
javax.servlet.ServletConfig接口:对Servlet的配置信息的封装对象
ServletConfig的常用方法:
java.lang.String getServletName() :获取web.xml文件中当前的Servlet的
ServletContext getServletContext() :获取Servlet的上下文对象
使用初始化参数的原因:在Servlet中如果有硬编码,就应该将其配置到web.xml文件,提高的代码的可维护性
获取初始化参数的方法
java.lang.String getInitParameter(java.lang.String name) :根据指定的名称获取初始化参数的值
java.util.Enumeration<java.lang.String> getInitParameterNames() :获取当前的Servlet的所有的初始化参数的名称

如果在多个Servlet有相同的初始化参数,那么是否需要进行多次相同的配置?
答案:不是
解决方案:使用全局的初始化参数

1.6servlet继承体系

问题1:在Servlet类中需要实现Servlet接口,此时Servlet接口中的所有的方法都需要覆盖,但是不是所有的方法都是必
须的
在这里插入图片描述
解决方案:抽取一个公共的类,实现Servlet接口,然后我们其他的Servlet直接继承自公共的Servlet,此时,需要覆盖哪一个方法就覆盖哪一个
在这里插入图片描述
在这里插入图片描述
2.Servlet中的服务方法的实现方式(推荐使用第一种)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.7请求乱码

中文乱码的原因:Tomcat默认是使用ISO-8859-1的方式在处理请求参数,一个字节一个字节的编码,不适合中文的编码
解决的方案:
1.先按ISO-8859-1方式解码,再按UTF-8方式编码
在这里插入图片描述
2.方式一麻烦,可以通过修改配置的方式(在server.xml文件中修改端口的节点中)
只支持get方式是请求
在这里插入图片描述
3.在获取请求参数之前进行编码的设置(只支持post方式的请求)
在这里插入图片描述

2.流程图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值