`

Servlet接口中的各方法的生命周期及读取web.xml的配置信息

阅读更多
package cn.itcast.servletlife.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 第一访问我们的servlet:
 * 	 方法调用顺序:
 * 	 LifeServlet 构造方法!
	 LifeServlet init!
	 LifeServlet service!
	 
	 第二访问我们的servlet:
	 直接调用我们service方法!
 */

/**
 * Servlet只有一个实例(单例),多线程访问
 * 
 * 生命周期方法: 从他创建(生)到 销毁(死)过程中所调用的方法都叫生命周期方法!
 */
public class LifeServlet implements Servlet {
	
	private ServletConfig config;
	/**
	 * Servlet 构造方法,该实例在用户第一次访问时候创建,只会创建一次
	 * 如果servlet配置中存在<load-on-startup>2</load-on-startup>,他会在tomcat启动中,就自动把该Servlet实例化!
	 */
	public LifeServlet(){
		System.out.println("LifeServlet 构造方法!");
	}
	
	/**
	 * Servlet init初始化方法,该方法在创建对象后调用"一次"
	 * init方法:初始化一些对象,加入一些配置信息,如果比较耗时,第一个用户访问等待时候会很长。
	 * 		如果servlet配置中存在<load-on-startup>2</load-on-startup>,他会在tomcat启动中,就自动把该Servlet实例化掉!
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("LifeServlet init!");
		//System.out.println("config = "+config);
		this.config = config;   
		
		
		System.out.println("--ServletConfig配置信息对象--");
		
		//servlet配置信息对象
		ServletConfig servletConfig = this.getServletConfig();
		String servletName = servletConfig.getServletName();
		
		//获取web.xml中<servlet>标签中<servlet-name></servlet-name>值
		System.out.println("servletName = "+servletName);
		
		//获取web.xml中<servlet>标签中<init-param>属性的值
		String locale = servletConfig.getInitParameter("locale");
		System.out.println("locale = "+locale);

		
		System.out.println("--getInitParameterNames--");
		//获取web.xml中<servlet>标签中所有<init-param>标签
		java.util.Enumeration<String> names = servletConfig.getInitParameterNames();
		while(names.hasMoreElements()){
			String name = names.nextElement();
			System.out.println(name+"  =   "+servletConfig.getInitParameter(name));
		}
	}
	
	/**
	 * Servlet service请求处理方法,该方法可能调用多次(多次请求),也有可能一次都不调用(没有请求)!
	 * ServletRequest 本次请求,对该请求的一个描述对象,该对象包含,请求参数,请求头,等等。。。。
	 * ServletResponse 本次请求响应对象,该对象可以用来向我们浏览器反馈响应信息,响应头,响应内容(html)
	 */
	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		
		//获取web.xml中<servlet>标签中<init-param>属性的值
		String locale = this.getServletConfig().getInitParameter("locale");
		
		/*
		 * 	res.setCharacterEncoding("GBK");
			设置响应内容格式,和内容编码,
			——————注意这个两句必须在res.getWriter();之前才有作用
		*/
		res.setContentType("text/html;charset="+getServletConfig().getInitParameter("encoding"));

		PrintWriter out = res.getWriter();
		if("en".equals(locale)){
			out.println("<h1>hello servlet</h1>");
		}else{
			out.println("<h1>你好 servlet</h1>");
		}
		out.flush();
	}
	
	/**
	 * Servlet destroy销毁方法,该方法在tomcat正常关闭的时候调用一次.
	 */
	@Override
	public void destroy() {
		System.out.println("LifeServlet destroy!");
	}
	
	/**
	 * ServletConfig 类,用于描述我们在web.xml配置文件中<servlet>标签相关的信息
	 * getServletConfig()方法在init方法后执行,返回传入的config信息.
	 */
	@Override
	public ServletConfig getServletConfig() {
		return this.config;
	}
	
	/**
	 * 返回字符串一般包含作者,版本,版权
	 */
	@Override
	public String getServletInfo() {
		return "itcast 1.0 itcast";
	}
}


web.xml配置信息:
<?xml version="1.0" encoding="UTF-8"?>

<web-app 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_2_5.xsd"
	version="2.5">
	
	<servlet>
		<servlet-name>LifeServlet</servlet-name>
		<servlet-class>cn.itcast.servletlife.servlet.LifeServlet</servlet-class>
		
		<!--
			 配置servlet初始化参数
			在servelt中我们可以通过 ServletConfig对中getInitParameter() 
		-->
		<init-param>
			<!-- 参数的key -->
			<param-name>locale</param-name>
			<!-- 参数的value-->
			<param-value>zh_ch</param-value>
		</init-param>
		
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		
		<!-- 大于或等于0 -->
		<load-on-startup>2</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>LifeServlet</servlet-name>
		<url-pattern>/LifeServlet</url-pattern>
	</servlet-mapping>
	
</web-app>
分享到:
评论

相关推荐

    详解Spring mvc的web.xml配置说明

    当Web应用程序启动时,Tomcat或Jetty等容器会触发此监听器,进而加载Spring的配置信息,创建ApplicationContext,使得Spring框架能够接管应用程序的生命周期管理。 2. **过滤器(Filter)** 过滤器在HTTP请求和...

    sevlet生命周期,request web.xml 及ServletContext总结

    理解Servlet生命周期以及如何从`HttpServletRequest`对象获取信息是开发Java Web应用的基础,这对于创建动态、交互式的Web服务至关重要。同时,`web.xml`文件是配置Servlet的重要工具,可以设定Servlet的映射、初始...

    web.xml配置文件详解

    Web.xml 文件是 Servlet 规范中定义的 web 应用的配置文件,它是 web 应用发布描述文件。在启动 WEB 项目时,WEB 容器会读取它的配置文件 web.xml。web.xml 文件的顶层元素是 &lt;web-app&gt;,所有其他子元素都必须定义在...

    web.xml加载顺序与web.xml常用节点解析

    监听器允许开发者在Web应用程序的生命周期事件(如启动、关闭)中执行自定义代码。 - `&lt;context-param&gt;`的值可以在监听器的`contextInitialized(ServletContextEvent)`方法中获取,此时可以利用这些参数进行初始化...

    web.xml配置大全[定义].pdf

    在软件开发领域,尤其是Web应用开发中,`web.xml`文件是Servlet容器(如Tomcat)的核心配置文件,用于定义Web应用的各种组件和行为。本文将深入探讨`web.xml`中的`listener`、`filter`、`servlet`的加载顺序以及相关...

    web.xml的配置(非常全)

    - **`listener`**:用于定义监听器,监听Web应用的生命周期事件,如应用启动、会话创建等。 - **`servlet`** 和 **`servlet-mapping`**:用于注册servlet及其URL映射,使得特定的URL请求能被对应的servlet处理。 - *...

    springmvc、spring、mybatis的resources配置文件和web.xml

    Spring框架的核心在于IoC(Inversion of Control)容器,它通过读取XML配置文件来管理对象的生命周期和依赖关系。在Spring的资源配置文件(通常命名为`beans.xml`)中,我们可以定义Bean的实例化、初始化方法、属性...

    解析web.xml中在Servlet中获取context-param和init-param内的参数

    在Java Web开发中,`web.xml`是应用的部署描述符,它包含了应用程序的各种配置信息。其中,`context-param`和`init-param`是两个重要的元素,用于设置应用级和Servlet级的初始化参数。理解它们的用法和如何在Servlet...

    web.xml中的listen

    `web.xml`是Servlet容器用来初始化Web应用的一个核心配置文件,它允许开发者指定一系列监听器来监控Web应用的生命周期事件。其中一种常见的用途就是加载Spring的配置文件。 - **加载Spring配置文件**:这主要是通过...

    servlet生命周期详解

    Servlet生命周期是Java Web开发中的核心概念,它涵盖了Servlet从创建到销毁的整个过程,主要分为初始化阶段、运行阶段和销毁阶段。这个过程完全由Servlet容器(如Tomcat、Jetty等)管理。 **初始化阶段** 在初始化...

    Web编程(Java )-Servlet的生命周期.doc

    这个方法只在Servlet生命周期的开始时调用一次,用于进行初始化设置,如读取配置信息等。 3. **服务**: 当有HTTP请求到达时,服务器调用Servlet的`service(ServletRequest, ServletResponse)`方法。在这个方法中...

    Web.xml加载顺序[汇编].pdf

    `&lt;context-param&gt;`用于设置全局的初始化参数,这些参数将在整个Web应用程序的生命周期内共享,可以通过`ServletContext`获取。而`&lt;listener&gt;`则定义了监听器,它们在Web应用启动时会被创建,用于监听特定的事件。 ...

    DWR.xml配置文件说明书(含源码)

    “scope参数允许你配置creator的生命周期,共有以下几个选项:application,session,request,page.这些参数对于用过jsp或servlet的开发人员并不陌生. 3.1 Uing static methods 如果你想远程调用一个creator的静态方法,...

    Servlet生命周期

    - 也可以通过配置 `web.xml` 文件中的 `&lt;load-on-startup&gt;` 标签来实现在容器启动时自动创建 Servlet 实例。数字越小优先级越高,多个 `&lt;servlet&gt;` 标签配置时按数字顺序加载。 ##### 2. 初始化 - **init() 方法**...

    applicationContext.xml等文件.rar

    开发者可以在这个文件中定义bean的类、属性、初始化方法、生命周期回调等,实现对象的创建和管理。此外,`applicationContext.xml`还可以用来配置AOP(面向切面编程)、数据源、事务管理等高级特性。 2. **`db....

    Servlet 的生命周期

    这个阶段是Servlet生命周期中最活跃的部分,它处理用户请求并生成响应。 4. **销毁**:当服务器关闭或者Servlet不再需要时,服务器会调用`destroy()`方法,让Servlet释放所占用的资源,如数据库连接、线程池等。这...

    servlet生命周期

    #### 三、Servlet生命周期详解 ##### 实例化 - **按需创建**:默认情况下,当第一次HTTP请求到达时,容器会创建Servlet的实例。 - **预加载**:通过在`web.xml`中配置`&lt;load-on-startup&gt;`标签,可以在应用启动时...

Global site tag (gtag.js) - Google Analytics