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>
分享到:
相关推荐
当Web应用程序启动时,Tomcat或Jetty等容器会触发此监听器,进而加载Spring的配置信息,创建ApplicationContext,使得Spring框架能够接管应用程序的生命周期管理。 2. **过滤器(Filter)** 过滤器在HTTP请求和...
理解Servlet生命周期以及如何从`HttpServletRequest`对象获取信息是开发Java Web应用的基础,这对于创建动态、交互式的Web服务至关重要。同时,`web.xml`文件是配置Servlet的重要工具,可以设定Servlet的映射、初始...
Web.xml 文件是 Servlet 规范中定义的 web 应用的配置文件,它是 web 应用发布描述文件。在启动 WEB 项目时,WEB 容器会读取它的配置文件 web.xml。web.xml 文件的顶层元素是 <web-app>,所有其他子元素都必须定义在...
监听器允许开发者在Web应用程序的生命周期事件(如启动、关闭)中执行自定义代码。 - `<context-param>`的值可以在监听器的`contextInitialized(ServletContextEvent)`方法中获取,此时可以利用这些参数进行初始化...
在软件开发领域,尤其是Web应用开发中,`web.xml`文件是Servlet容器(如Tomcat)的核心配置文件,用于定义Web应用的各种组件和行为。本文将深入探讨`web.xml`中的`listener`、`filter`、`servlet`的加载顺序以及相关...
- **`listener`**:用于定义监听器,监听Web应用的生命周期事件,如应用启动、会话创建等。 - **`servlet`** 和 **`servlet-mapping`**:用于注册servlet及其URL映射,使得特定的URL请求能被对应的servlet处理。 - *...
Spring框架的核心在于IoC(Inversion of Control)容器,它通过读取XML配置文件来管理对象的生命周期和依赖关系。在Spring的资源配置文件(通常命名为`beans.xml`)中,我们可以定义Bean的实例化、初始化方法、属性...
`web.xml`是Servlet容器用来初始化Web应用的一个核心配置文件,它允许开发者指定一系列监听器来监控Web应用的生命周期事件。其中一种常见的用途就是加载Spring的配置文件。 - **加载Spring配置文件**:这主要是通过...
Servlet生命周期是Java Web开发中的核心概念,它涵盖了Servlet从创建到销毁的整个过程,主要分为初始化阶段、运行阶段和销毁阶段。这个过程完全由Servlet容器(如Tomcat、Jetty等)管理。 **初始化阶段** 在初始化...
这个方法只在Servlet生命周期的开始时调用一次,用于进行初始化设置,如读取配置信息等。 3. **服务**: 当有HTTP请求到达时,服务器调用Servlet的`service(ServletRequest, ServletResponse)`方法。在这个方法中...
在Java Web开发中,`web.xml`是应用的部署描述符,它包含了应用程序的各种配置信息。其中,`context-param`和`init-param`是两个重要的元素,用于设置应用级和Servlet级的初始化参数。理解它们的用法和如何在Servlet...
`<context-param>`用于设置全局的初始化参数,这些参数将在整个Web应用程序的生命周期内共享,可以通过`ServletContext`获取。而`<listener>`则定义了监听器,它们在Web应用启动时会被创建,用于监听特定的事件。 ...
“scope参数允许你配置creator的生命周期,共有以下几个选项:application,session,request,page.这些参数对于用过jsp或servlet的开发人员并不陌生. 3.1 Uing static methods 如果你想远程调用一个creator的静态方法,...
- 也可以通过配置 `web.xml` 文件中的 `<load-on-startup>` 标签来实现在容器启动时自动创建 Servlet 实例。数字越小优先级越高,多个 `<servlet>` 标签配置时按数字顺序加载。 ##### 2. 初始化 - **init() 方法**...
开发者可以在这个文件中定义bean的类、属性、初始化方法、生命周期回调等,实现对象的创建和管理。此外,`applicationContext.xml`还可以用来配置AOP(面向切面编程)、数据源、事务管理等高级特性。 2. **`db....
这个阶段是Servlet生命周期中最活跃的部分,它处理用户请求并生成响应。 4. **销毁**:当服务器关闭或者Servlet不再需要时,服务器会调用`destroy()`方法,让Servlet释放所占用的资源,如数据库连接、线程池等。这...
#### 三、Servlet生命周期详解 ##### 实例化 - **按需创建**:默认情况下,当第一次HTTP请求到达时,容器会创建Servlet的实例。 - **预加载**:通过在`web.xml`中配置`<load-on-startup>`标签,可以在应用启动时...