JAVAweb开发(二)(servlet,Web.xml,@WebServlet()详解)
一.servlet
(1)servlet的生命周期
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁
- 服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,就会初始化一个Servlet对象,执行init()方法
- 该servlet对象去处理所有客户端请求,
service()
方法中执行 - 最后服务器关闭时,才会销毁这个servlet对象,执行
destroy()
方法。
(2)servlet的继承结构
图有点儿糊,但是我们可以看出,我们用的HttpServlet继承于GenericServlet,再实现Servlet接口
Servlet接口中有init(),servlet(),destroy()的三个重要的方法,init()的负责初始化,servlet()负责调用dopost,doget等方法,destroy负责销毁对象。
二.web.xml和@WebServlet的作用
当我们有一个请求的时候,我们的服务器要怎么才能找到相应的Servlet来进行服务呢?这个时候我们就需要web.xml还有@WebServlet标签,来找到我们的servlet
(1)@WebServlet标签的使用
@WebServlet(name = "123",
urlPatterns = {"/hello.do"},
initParams = {
@WebInitParam(name="admin",value="你爸爸")
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xihNlSfX-1594955288856)(C:\Users\13710795181\Desktop\recent1\webservlet.png)]
(1).loadOnStartup属性:标记容器是否在启动应用时就加载Servlet,默认不配置或数值为负数时表示客户端第一次请求Servlet时再加载;0或正数表示启动应用就加载,正数情况下,数值越小,加载该Servlet的优先级越高;
(2).name属性:可以指定也可以不指定,通过getServletName()可以获取到,若不指定,则为默认是Servlet的完整类名
(3).urlPatterns/value属性: String[]类型,可以配置多个映射,如:urlPatterns={"/user/test", “/user/example”},拦截多个请求
(4).urlPatterns的常用规则:
- /*或者/:拦截所
- *.do:拦截指定后缀
- /user/test:拦截路径
- /user/.do、/.do、test*.do都是非法的,启动时候会报错
(2)web.xml
<servlet>
<servlet-name>123</servlet-name>3.名字相对应
<servlet-class>apps</servlet-class>4.找到相应的类
</servlet>
<servlet-mapping>
<servlet-name>123</servlet-name>2.找到名字
<url-pattern>/my</url-pattern>1.服务器先从这里找
</servlet-mapping>
web.xml的配置和@WebServlet作用一样,会覆盖@WebServlet的配置
web.xml流程
1.客户端向服务端请求
2.服务器在web.xml寻找相应的url形式
3.在servletmaping找出servlet的名字
4.名字找出servlet的class