Servlet生命周期及Config(配置)对象

一、Servlet简介

Servlet是SUN公司提供的一个动态网页开发技术,是一个运行在Web服务器上的小的Java程序。用来接收和响应从客户端发送过来的请求,通常使用HTTP协议。

Servlet的作用

用来处理从客户端浏览器发送的请求,并且可以对请求作出响应。(处理/响应 请求)

Servlet运行原理

Servlet作为补充Web服务器功能的组件,需要依赖于Servlet容器才能运行。
在这里插入图片描述

说明:当用户在浏览器发出请求,浏览器会依据地址栏中的IP地址以及端口号找到相对应的Web服务器。

  • 如果请求的是静态资源:Web服务器直接找到相应的HTML页面然后返回给浏览器。
  • 如果请求的是动态资源:Web服务器会进一步将请求传递给Servlet容器,Servlet容器会创建Servlet实例,并将请求的数据解析出来传递给Servlet实例。Servlet实例真正处理完数据之后,响应结果由容器的一个通信模块返回给Web服务器,进而返回给浏览器

二、Servlet生命周期

(1)Servlet四个阶段的执行时机

①实例化  调用Servlet的构造器创建一个具体的Servlet对象的过程。
②初始化  在初始化阶段,init()方法会被调用。
③就绪  Servlet被初始化后就处于能够响应请求的就绪状态,Servlet(req,res)
④销毁  销毁Servlet容器停止或者重新启动都会引起销毁Servlet对象的动作destyoy()。

(2)编写Servlet(演示生命周期)

创建servlet实现Servlet接口或继承HttpServlet的Java类,覆盖service()。

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LifeServlet extends HttpServlet {
	// 1.实例化
	public LifeServlet() {
		System.out.println("第一阶段--->实例化");
	}

	// 2.初始化
	public void init() throws ServletException {
		System.out.println("第二阶段--->初始化");
	}

	// 3.就绪
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("第三阶段--->就绪");
	}

	// 4.销毁
	public void destroy() {
		System.out.println("第四阶段--->销毁");
	}
}

Servlet配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <!-- servlet配置 -->
  <servlet>
    <!-- servlet的名称 -->
    <servlet-name>LifeServlet</servlet-name>
    <!-- servlet的全路径 -->
    <servlet-class>web.LifeServlet</servlet-class>
  	<!-- 设置初始化参数 -->
  	<init-param>
  		<!-- 参数名 -->
  		<param-name>company</param-name>
  		<!-- 参数值 -->
  		<param-value>keystone</param-value>
  		
  	</init-param>
  	<init-param>
  		<param-name>address</param-name>
  		<param-value>zhengzhou</param-value>
  		
  	</init-param>
    <!-- 设置servlet在服务器启动的时候被创建,>=0表示启动时会被创建,<0或未设置表示servlet被请求时被创建-->
    <!-- 如果有多个servlet,谁的值越小,谁被创建的越早 -->
    <load-on-startup>1</load-on-startup>
  	
  </servlet>

<!-- servlet的映射 -->
  <servlet-mapping>
  	<!-- servlet的名称,对应servlet配置中的名称 -->
    <servlet-name>LifeServlet</servlet-name>
    <!-- servlet的访问路径(1.完全路径匹配) -->
    <url-pattern>/life</url-pattern> 
    <!-- 2.目录匹配 -->
    <!-- <url-pattern>/aaa/*</url-pattern>-->
    <!-- 3.后缀匹配 -->
    <!-- <url-pattern>*.do</url-pattern> -->
  </servlet-mapping>	
  
</web-app>

url-pattern配置

完全路径匹配 > 目录匹配 > 后缀匹配

①完全路径匹配:以/开始

如:/ServletDemo1/aaa/ServletDemo2/aaa/bbb/ServletDemo3
②目录匹配/通配符匹配:以/开始 需要以*结束。*匹配0个或多个字符

例如:/*/aaa/*/aaa/bbb/*
③后缀匹配:不能以/开始,可以以*开始的

例如:*.do*.action

目录匹配和后缀匹配不能混合使用。错误的写法:/*.do/aaa/bbb/*.do

在这里插入图片描述

三、ServletConfig对象

ServletConfig对象作用是获得servlet配置信息

获得ServletConfig对象:Servlet cfg = getServletConfig();

获取init-param参数值

方法 作用
String getServletName(); 获得Servlet在web.xml中配置的name的值
String getInitParameter(String name); 获得Servlet的初始化参数
Enumeration getInitParameterNames(); 获得所有Servlet的初始化参数的名称
String getServletContext(); 获得servletContext对象

ServletConfig对象Demo

	// 3.就绪
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("第三阶段--->就绪");
		//获得servletConfig对象,从而获取初始化参数
		ServletConfig config =getServletConfig();
		String company = config.getInitParameter("company");
		String address = config.getInitParameter("address");
		System.out.println("company:"+company+"   address:"+address);
	}

在这里插入图片描述

发布了328 篇原创文章 · 获赞 798 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/103483932