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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值