Servlet概念

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet概念相关的知识,希望对你有一定的参考价值。

Servlet概念

Servlet是javaWeb的三大组件之一,其他的两种分别是Filter(拦截器),Listener(观察者模式)。我们的一个web项目需要部署在web服务器(例如tomcat)上,才能够接收浏览器等客户端的请求。服务器接收到请求之后,实际上是由Servlet组件来进行具体的业务逻辑处理,然后再对客户端进行响应。一个web项目中通常会有多个Servlet组件来处理不同的请求。例如在开发一个管理系统时,用户在进行登录的时候,服务器上将调用登录的Servlet来进行登录逻辑处理:

技术分享图片

那么Servet有什么作用呢?它的主要功能在于交互式地浏览和修改数据,生成动态Web内容。JavaEE为我们提供了Servlet接口标准,实现了该接口的类都可以称为一个Servlet:

package com.rl.servlet;
public class ServletDemo1 implements Servlet{
}

Servlet的主要接口

Servlet接口中有5个方法,实现该接口的类,都可以称为一个Servlet:

package com.rl.servlet;
import javax.servlet.*;
import java.io.IOException;

public class ServletDemo1 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

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

    @Override
    public void destroy() {

    }
}
  1. init()方法的执行时机:当前实例被创建的时候被调用,做一些初始时的工作,这个方法平时用的不多。它的参数ServletConfig在初始化的时候可以进行配置,这个晚点说。
  2. service()方法是Servlet的核心方法。它的执行时机是当一个请求来请求当前的Servlet的时候被调用,进行具体的逻辑处理并响应请求。
  3. destroy()方法的执行时机是当前对象被销毁的时候,用于执行一些收尾工作。
  4. getServletInfo()用于获得当前Servlet的一些信息
  5. ServletConfig ()用于获得当前Servlet的配置信息

先不关注getServletInfoServletConfig这两个方法。实现其他三个方法如下所示:

package com.rl.servlet;
import javax.servlet.*;
import java.io.IOException;

public class ServletDemo1 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("excute ServletDemo1 init()");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("excute ServletDemo1 service()");
    }

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

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

写好了Servlet之后,还需要在web.xml进行配置才能访问到ServletDemo1
技术分享图片

<servlet><servlet-mappint>总是需要成对出现的。<servlet-name>为servlet起了个别名,<servlet-class>指定了别名关联的真正处理请求的java类是哪个,<url-pattern>指定在浏览器访问该Servlet时的访问名称。
假设你已经配置好了本地的tomcat服务器,启动服务器之后访问"http://localhost:8080/hello" 即可以访问到ServletDemo1

技术分享图片

Tomcat服务器在本地启动并加载了本项目后,便可以接收来自浏览器的请求。当它收到"http://localhost:8080/hello" 请求时,Tomcat会找到web.xml文件,通过<url-pattern>/hello<url-pattern>发现该配置与请求路径匹配。这说明存在一个可以处理该请求的Serverlet,于是通过上述的<servlet-name> <servlet-class>最终找到了ServletDemo1.

再回过头来看,其实Servlet是实现了javax.servlet接口的类。它被部署在web服务器上,通过配置文件来定义其请求路径。而浏览器依据该路径,来访问到具体的Servlet进行业务逻辑的处理。

Servlet的生命周期

生命周期指的是Servlet的实例从创建到销毁的整个过程,该过程与我们上面提到的三个方法有关:

  • init():在Servlet的生命周期中,仅执行一次init()方法,负责在服务器装入Servlet时初始化Servlet对象。可以通过web.xml来配置服务器,用于控制在启动服务器时或是首次访问Servlet时装入Servlet。服务器装入Servlet对象后,无论有多少客户端请求Servlet,都不会再调用init()方法。
<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.rl.servlet.ServletDemo1</servlet-class>
<!--用于配置在启动Tomcat服务器时装入ServletDemo1服务器-->
    <load-on-startup>1</load-on-startup>  
</servlet>
  • service():每当一个客户端请求一个Servlet对象时该方法被调用。服务器将客户端的请求包装成ServletRequest对象作为“请求”参数,同时传递一个ServletResponse对象作为“响应”参数来调用service()方法。

  • destory():在服务器停止、卸载Servlet时,该方法被调用,且仅执行一次,这标记着一个Servlet退出了它的生命周期,该方法负责释放占用的资源。

(完)

以上是关于Servlet概念的主要内容,如果未能解决你的问题,请参考以下文章

servlet,过滤器,监听器,拦截器的区别

servlet和filter的区别

Servlet学习之Servlet概念与运行流程

Servlet的概念和运行流程

梳理一下web总的一些概念

Servlet入门总结及第一个Servlet程序