Servlet讲解

Servlet执行原理

在这里插入图片描述
  servlet中并没有main方法,servlet中的方法是Tomcat进行调用的,在写好servlet后,配置好url,用户通过访问指定的url来访问Tomcat服务器,Tomcat服务器会根据用户的url去找对应的servlet

Servlet的创建与继承结构

  要想实现一个servlet,java提供了Servlet接口
在这里插入图片描述
可以看到Servlet定义了一些基本方法:

  1. init:初始化servlet的方法
  2. service:提供服务的方法,当用户通过url访问servlet时,会调用该方法
  3. destroy:销毁servlet,在Tomcat容器关闭的时候,会调用该方法销毁servlet

我们可以直接通过实现Servlet接口来实现一个Servlet,比如这里的demo1
在这里插入图片描述
  但是可以知道,实现一个接口必须要实现该接口的全部方法,但是有时候我们根本用不到一些方法,但是还是必须写出来,所以,Java中提供了抽象类GenericServlet

GenericServlet:
在这里插入图片描述
  可以看到GenericServlet也是实现了Servlet接口,该抽象类为我们实现了一些方法,只有service方法没有实现,我们可以直接通过继承该类,来实现一个Servlet,而且我们只需要重写用到的方法,一起来看一下Demo2:
在这里插入图片描述
  这样去创建一个Servlet是不是更简洁了些,但是我们却不经常这么写,我们一般都是直接继承HttpServlet

HttpServlet:
在这里插入图片描述
  HttpServlet继承了GenericServlet,该类主要就是处理Http的,所以里面对Http做了一些处理,举个例子来说,继承了HttpServlet,我们的service方法就被分为了doGet和doPost方法,把服务的方法分成了服务Get请求和服务Post请求,一起来看一下这段逻辑:
在这里插入图片描述
  首先获得了方法,然后判断方法时哪种,主要用到的就是GET和POST类型,如果是GET类型,就调用doGet方法,如果是POST类型,就调用doPost请求

一般的用法如Demo3所示:
在这里插入图片描述

Servlet生命周期

  Servlet的生命周期可以分为实例化,初始化,请求服务,销毁四个过程。Servlet默认是懒加载机制,当第一次访问该Servlet的时候,会创建一个该Servlet,在后续的过程中就不会再进行创建,而是直接使用第一次创建好的
  Servlet被加载实例之后,需要进行初始化,初始化调用init方法
初始化后的Servlet就处于就绪状态,调用service方法,由具体的Servlet实现。HttpServlet将service方法进行了拆分,分为doGetdoPost
通常Servlet容器停止或者冲重新启动都会引起销毁Servlet对象的动作,这时会调用destroy方法

下面看一下我的这段代码:

@WebServlet("/TestServletLife")
public class TestServletLife implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("servlet init ..." + this.hashCode());
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet service ..."+this.hashCode());
    }

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

    @Override
    public void destroy() {
        System.out.println("servlet destroy ..."+this.hashCode());
    }
}

  访问指定的url,发现init方法调用了,然后重新刷新页面不会再次调用init,可见init方法只会执行一次,每刷新一次service方法就会调用
在这里插入图片描述
  关闭tomcat,会看到调用了destroy方法
在这里插入图片描述

配置Servlet的路径

  上面我们已经提到了,在编写好Servlet后,并不能被直接访问,因为用户访问的是Tomcat服务器,而Tomcat服务器有很多Servlet,无法分辨到底是去调用哪一个Servlet,这就需要为Servlet配置一个url,可以通过web.xml中进行配置,在Servlet3.0版本之后还可以通过注解的方式进行配置

web.xml中进行配置:

在这里插入图片描述
servlet-name:这只是一个名字,可以随意起名
servlet-class:需要关联到对应的类
url-pattern:浏览器访问的url

注解进行配置

在这里插入图片描述
  就在该类上面加注解,明确类了以后,这里只需要配置路径即可

补充:可以为一个类配置多个url
在这里插入图片描述
这三个url都可以路由到对应的Servlet

在路径中也可以加入通配符,但是通配符的优先级最低,比如:
有: /*,/demo

这两个url,但是如果访问/demo会优先访问第二个,Tomcat只有找不到的时候,才会去找通配符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值