Servlet生命周期及实现方法

Servlet生命周期

1.  init()   Servlet初始化方法
public void init(ServletConfig servletConfig) throws ServletException {
       System.out.println("Servlet正在初始化");
}

当服务器启动时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,但是这个方法在后续请求中不会在被Servlet容器调用,就像人只能“出生”一次一样,init方法在一个Servlet实例中也只能被调用一次。

我们可以利用init()方法来执行相应的初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig对象进来从而对Servlet对象进行初始化。

2.  service()  Servlet服务方法
 @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
       //专门向客服端提供响应的方法
        System.out.println("Servlet正在提供服务");
    }

service() 方法是用来处理客户端请求的核心方法。当有请求到达时,Servlet容器会调用service() 方法来处理请求。

service() 方法接收两个参数:ServletRequest一个对象和ServletResponse一个对象。通过这两个对象,Servlet可以获取请求的信息并生成响应。

service() 方法中,你可以根据请求的类型(GET、POST等)来执行相应的逻辑处理。例如,你可以读取请求参数、处理业务逻辑、生成响应内容等。

需要注意的是,每个请求都会创建一个新的线程来处理,因此方法应该是线程安全的,所以我们不能在Servlet实例里创建非状态型成员变量。

3.  destory()  Servlet销毁方法
public void destroy() {
       System.out.println("Servlet正在销毁");
}

当要销毁Servlet时,Servlet容器就会调用这个方法,就如人一样,到时期了就得死亡。在卸载应用程序或者关闭Servlet容器时,就会发生这种情况。

destory()方法只会在Servlet实例被销毁时调用一次,而不是每次请求都会调用。所以我们在这个方法中释放所有的资源,以确保不会出现内存泄漏或资源泄漏的问题。

4.Servlet 的其它两个方法

 getServletInfo( ),这个方法会返回Servlet的一段描述,可以返回一段字符串。

 getServletConfig( ),这个方法会返回由Servlet容器传给init( )方法的ServletConfig对象。

Servlet实现方法

1.  实现Servlet接口
public class Test 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() {

    }
}

Servlet接口中最重要的方法是service()方法。当客户端发送一个HTTP请求时,Servlet容器会调用Servlet的service()方法,并将请求和响应对象作为参数传递给该方法。在service()方法中,你可以根据请求的类型(GET、POST等)来执行相应的逻辑,并生成对应的HTTP响应。

除了方法,Servlet接口还定义了一些其他的方法,例如init()方法用于初始化Servlet,在Servlet被第一次加载时调用;destroy()方法用于销毁Servlet,在Servlet被卸载时调用。

2.  继承GenericServlet类
public class GServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }
}

GenericServlet类提供了Servlet接口的默认实现,并且还提供了一些其他的方法,用于处理Servlet的生命周期和初始化操作。

通过继承GenericServlet类,可以更方便地实现Servlet接口,并且可以重写其中的方法来实现自定义的逻辑。同时,由于GenericServlet类已经实现了Servlet接口的方法,所以在使用GenericServlet类时,只需要关注自定义的逻辑即可,而不需要再实现Servlet接口中的所有方法。

3. 继承HttpServlet类
public class HServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}

HttpServlet类是继承自GenericServlet类的一个子类。HttpServlet类专门用于处理基于HTTP协议的请求和响应。

HttpServlet类在GenericServlet类的基础上进行了扩展,添加了一些针对HTTP协议的特定方法和功能。例如,HttpServlet类提供了doGet()和doPost()等方法,用于处理GET和POST请求,并生成相应的HTTP响应。

通过继承HttpServlet类,我们可以更方便地实现基于HTTP协议的Servlet,并且可以重写其中的方法来实现自定义的逻辑。同时,由于HttpServlet类继承自GenericServlet类,所以也继承了GenericServlet类中的一些通用方法和功能。

4. Servlet请求映射的配置

映射配置在web.xml文件中

注意:在 <url-pattern>中的类名前要加/

<servlet>
        <!--Servlet名称-->
        <servlet-name>HelloServlet</servlet-name>
        <!--类的全限定名-->
        <servlet-class>com.jack.controller.HelloServlet</servlet-class>
    </servlet>

    <!--配置Servlet请求映射-->
    <servlet-mapping>
       <servlet-name>HelloServlet</servlet-name>
       <!--Servlet请求映射-->
       <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping> 
</servlet>
5. Servlet接口,GenericServlet类和HttpServlet类的继承体系

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值