什么是Servlet

Servlet其实就是一个java程序,运行在Tomcat上,用于接收和响应客户端的 http 请求

更多的是配合动态资源来做,其实静态资源也有一个DefaultServlet,Tomcat自己定义了,所以不用我们写。

 

编写第一个HelloServlet

1、新建一个类,去实现Servlet接口,并且同时要实现接口中的抽象方法

2、配置文件web.xml ,目的就是告诉Tomcat,我的这个应用需要这些个Servlet。相当于在自定义的Servlet类的上面上加上WebServlet,例如 @WebServlet(name="FormServlet",urlPatterns = {"/from"})

3配置文件内容如下:

<!--告诉Tomcat容器,这里有一个Servlet,名字叫做myservlet,具体的路径是comweb.MyServlet-->
<servlet>
     <servlet-name>myservlet</servlet-name>
     <servlet-class>comweb.MyServlet</servlet-class>
</servlet>

<!--这里是Servlet的映射,servlet-name找到上面注册的具体的Servlet,要与要找的Servlet的servlet-name名字一致才能找到,  url-pattern:表示在地址栏上面的path,必须以  /  打头 -->
<servlet-mapping>
     <servlet-name>myservlet</servlet-name>
     <url-pattern>/my</url-pattern>
</servlet-mapping>

4、在地址栏上输入:http://localhost:8080/HelloWeb_war_exploded/my

 

Servlet的配置方式

  • 全路径匹配

在配置文件中的<url-pattern>/my</url-pattern>标签内容的写法

/my/aa/bb    或者  /dsad      或者/a/b

url:localhost:8080/项目名称/my/aa/bb

  • 路径匹配

 以  /  开头,以  *   结尾,    *也就是通配符,匹配任意字符

/my/*    或者  /my/*/*

url:localhost:8080/项目名称/my/aaaaaa    或者  localhost:8080/项目名称/my/ccc/ffff

  • 以扩展名匹配

以  *  号开头,例如 *.aa    或者  *.bb

url:localhost:8080/项目名称/ss.aa     或者   localhost:8080/项目名称/dasfdsa.bb

 

Servlet的执行过程

 

Servlet的通用写法

1.定义一个类MyServlet,继承HttpServlet,重写doGet() 和 doPost()方法

 

Servlet的生命周期

  • 生命周期

Servlet从创建到销毁的一段时间

  • 生命周期方法

Servlet从创建到销毁的一段时间所调用的方法

  • init(ServletConfig servletConfig) 方法

该方法在类加载的时候调用,一个Servlet只会初始化一次,并且init()只会加载一次

默认情况下,初次访问该Servlet时候,才会调用。里面通常定义一些初始化的操作

  • service(ServletRequest servletRequest, ServletResponse servletResponse) 方法

只要访问Servlet,就会调用该方法,每访问一次,就会就会调用一次。

一次请求,对应一次service方法

  • destroy() 方法

Servlet销毁的时候,调用该方法。

1.当把项目从Tomcat上移除的时候,调用该方法

2、当关闭服务器的时候,调用该方法。不是在idea上停止服务器,而是进入Tomcat的bin目录中,使用shutdown.bat

doGet 和 doPost不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行

 

让Servlet创建实例的时机 提前

1、在默认的情况下,只有在第一次加载Servlet的时候才会调用init()方法,有的时候,要在这个方法里进行一些初始化的操作,或者进行一些比较耗时的逻辑

2、这个时候初次访问可能在init() 方法中耗时太久,所以要让其初始化的时机提前一点

3、在web.xml文件中使用<load-on-startup>2</load-on-startup>标签,数字越小,表明启动时机越早,一般不用负数,一般使用2开始即可

 

ServletConfig对象

  • ServletConfig对象的获得和使用

ServletConfig对象封装了 Servlet的配置信息(web.xml部署描述符 或者 @WebServlet),可以通过该对象获取配置信息的内容。

该对象在Servlet初始化的时候调用init() 方法时,Tomcat服务器传入给该对象一个Servletconfig对象

        //1、获取ServletConfig对象,专门用于在配置servlet的信息
        ServletConfig servletConfig = this.getServletConfig();
       
         //2、获取配置文件中<servlet-name>config</servlet-name>标签的内容
        String servletName = servletConfig.getServletName();
        System.out.println("name:  "+servletName);

        //3、获取具体的某一个参数(<param-name>)对应的<param-value>的值
        String username = servletConfig.getInitParameter("username");
        System.out.println("username:"+username);

        //4、获取所有参数<param-name>的名称(枚举)
        Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
        //开始遍历每一项
        while(initParameterNames.hasMoreElements()){
            String key = initParameterNames.nextElement();
            String value = servletConfig.getInitParameter(key);
            System.out.println("key:"+ key+"   value:"+ value);
        }

 

  • 为什么需要使用ServletConfig

1、在未来的时候,我们自己开发一个应用,但是用到了一些技术或者需要一些代码,自己不会写。但是有人帮你写出来了,所以把他的代码防止在自己的Servlet类中,

2、刚好这个servlet需要一个变量,或者是一个变量值。但是这个变量值不能固定不变。所以当我们使用他的时候,也就是在注册(配置web.xml文件的映射)的时候,要加一个参数<init-param>

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
		//1. 获取该servlet配置的参数。
		ServletConfig config = getServletConfig();
		String  number = config.getInitParameter("number");
		
		if(number == null){
			throw new IllegalArgumentException("servlet在配置的时候,一定要写number这个参数。。");
		}else{
			System.out.println("number....");
		}
	}

导入过程

1、首先先把相应的jar包导入到目录中去

2、注册Servlet类

3、添加相应的参数

在开发当中比较少用。

 

 

 

 

 

 

 

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐