码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet配置方式

时间:2020-03-19 13:20:18      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:逻辑   有一个   att   ebs   port   -name   location   容器   创建   

Servlet配置方式

浏览器不能直接访问Servlet文件,只能通过映射的方式来间接访问Servlet,映射需要开发者手动配置,有两种配置方式

1.基于xml文件的配置方式

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>Demo</servlet-name>
        <servlet-class>com.nenu.Demo</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Demo</servlet-name>
        <url-pattern>/Demo</url-pattern>
    </servlet-mapping>
</web-app>

 

2.基于注解的配置方式

在需要配置的类前面加:

@WebServlet("/Demo1")

例如前面的xml配置文件可以被替换为:

@WebServlet("/Demo1")//这里配置Servlet
public class Demo1 implements Servlet {

}

我们会在xml文件配置不直观,麻烦,而且xml中需要配置所有其他的东西,所以后期Servlet一般都用注解的方式替代。Servlet有很多注解,可以对Servlet更方便的配置。

上述两种配置结果完全一样。

 

Servlet的生命周期

Servlet的生命周期例子

作为一个对象来讲,一定会有创建、使用和回收的过程。

java有专门的垃圾回收机制,会自动的帮助我们回收对象,有不同的算法对对象进行回收。我们首先需要了解基础,后期深入了解垃圾回收机制和java虚拟机内存结构等等。学过C++,C++的对象一定要释放。但Java你只需要创建对象就好了。

  • 声明周期显示到代码里,就是这样,Servlet类里面有五个方法:init、ServletConfig、service、getServletInfo、destory。
  • 其中init是servlet的初始化,service是servlet业务方法、destory释放了servlet对象
  • 其他两个方法与其声明周期无关

例如:

package com.nenu;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/Demo1")
public class Demo1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("执行servlet的初始化");
    }//设置输出

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("执行servlet业务逻辑");
    }//设置输出

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

    @Override
    public void destroy() {
        System.out.println("servlet的销毁");
    }//设置输出
}

以上代码在此三处设置输出,启动tomcat,执行并访问后,控制台输出如下:

技术图片

 

 说明调用了init方法,然后调用了service,再刷新几次又调用了很多次service:

技术图片

 init一次,servlet对象就存在了,之后的访问都是使用同一个servlet对象。首先检测servlet容器里面有没有目标Demo1的实体类对象。没有的话创建一个,然后调用它的service;第二次再检测,没有则创建,有就直接用。这样可以节约很多内存空间,而且只需要有一个servlet目标对象即可。类似于我们打电话只需要一部手机接打电话,可以无限循环的打电话,而不需要每次打电话都换一台手机。

destory方法什么时候执行呢?tomcat一关,开始释放资源,当tomcat服务停掉了,装载servlet的对象就停掉了。

那么对象怎样创建出来的呢,servlet方法是非静态方法,非静态方法的调用必须借助于对象。这里并没有看到new Demo1的对象,我们没看到并不代表不存在。而这一系列的完成都是由tomcat容器完成的。通过反射机制来创建对象。通反射机制拿到构造函数,反射创建对象一般都是调用无参的构造函数。我们可以把无参的构造函数重写一下,添加到代码里:

public Demo1(){
        System.out.println("创建了Servlet对象");
    }

肯定是先构造对象,再调用方法。

技术图片

 输出结果印证了这一点,关闭tomcat:

技术图片

 

Servlet的生命周期(从创建到销毁):

  1. 当浏览器访问Servlet的时候,Tomcat会查询当前Servlet的实例化对象是否存在,如果不存在,则通过反射机制动态创建对象,如果存在,直接执行第三步。
  2. 调用init方法完成初始化操作
  3. 调用Servlet方法完成业务逻辑操作
  4. 关闭tomcat时,会调用destory方法,释放当前对象所占用的资源

Servlet声明周期方法

包括无参构造函数、init、service、destory

  1. 无参构造函数只调用一次,创建对象
  2. init只调用一次、初始对象
  3. service调用N次,执行业务方法
  4. destory只调用一次,卸载对象

 

Servlet配置方式

标签:逻辑   有一个   att   ebs   port   -name   location   容器   创建   

原文地址:https://www.cnblogs.com/yangf428/p/12522674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!