Servlet三种创建/接口里面的方法/生命周期

一.URL

打开百度首页随便搜索内容后,会出现

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=a&rsv_pq=c122c9dd0020c7c0&rsv_t=bea4FGcgHWh%2BkVEvNQ0jdx2x%2FoTwRzLc6DNMLetuwFp1w40vDfi70Cvlu8o&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&inputT=1866&rsv_sug4=2206&rsv_sug=9
在这里插入图片描述

这种内容称为请求URL
协议+ip+端口+resource+querything组成
协议:在这里就是https
端口:http默认端口是80,在这里可以省略
querything 由多组参数名和参数组成以问号开头,以&进行分割.

所以如何访问我们自己的项目呢?路径如何书写
协议+ip+端口+资源
http://localhost:8080/项目名/servleturlpattern

二.Servlet三种创建方式

1.实现(implements)Servlet接口
在这里插入图片描述
要重写里面的五种方法
init(),getServletConfig(),service(),getServletInfo(),Destory();
2.继承GenericsServlet类
在这里插入图片描述
要重写service()方法.
3.继承HttpServlet类
在这里插入图片描述
支持http的Servlet,根据实际情况进行重写方法.

三.分析Servlet里面的方法

init
1.它是Servlet组件初始化的一项工作,在整个生命周期内调用0次或者1次
并不会追随容器初始化而初始化(默认情况下).
2.当第一次完成访问的时候才完成初始化.初始化的工作是在Servlet对象创建后完成的
3.且整个初始化只会完成一次.所以Servlet的设计为单例多线程模式.
这里证明下: 使用注解来表明它是一个Servlet,它的路径是localhost/servlet01 在构造 init,service方法中都有响应打印.

@WebServlet(urlPatterns = "/servlet01")
public class Style01 implements Servlet {
    public Style01(){
        System.out.println("Servlet Creating...");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        servletResponse.getWriter().println( "servlet01" );
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destory");
    }
}

当启动tomcat后,无日志打印
在这里插入图片描述
在浏览器输入url后,service方法打印
在这里插入图片描述
在这里插入图片描述
再看控制台,先打印构造函数,说明初始化的工作是在Servlet创建后执行的
在这里插入图片描述
service
每有一次请求,他就会执行一次.
destory
当容器销毁的时候,它才会执行,有个前提,出生过才能死去.
意思就是说,如果没有执行过init方法,它不会执行destory方法.

有个loadOnStartup
这个值默认是-1,它来确定我们的Servlet是否跟随容器的启动而启动.
可以设置优先级,当某些Servlet比较重要的时候,可以设置为让他跟随容器而启动
这样访问它的时候就比较快了.
因为有很多工作它是有严格的先后顺序的,当这些组件工作的时候,
我们就可以通过配置loadOnstartup并指定order就可以完美解决。数字越小,优先级越高.

在这里插入图片描述

四.Servlet的生命周期

图来自B站深圳邱道长
在这里插入图片描述
1.先看servlet是否配置loadOnStartup,
如果配置了那么它将会随容器的启动而执行init方法
如果每配置那么它将等待第一次访问.
2.如果一个Servlet一直没有被访问那么它所有方法不会被执行.
3.如果是第一次访问这个Servlet,那么它先执行init方法,再执行service()方法
4.如果不是第一次,那么直接执行service()方法
5.如果容器要销毁,servlet要跟随它一起销毁.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值