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、付费专栏及课程。

余额充值