Servlet的使用和生命周期

前面笔记讲的Servlet,都是继承自javax.servlet.http.HttpServlet,是javax.servlet.GenericServlet的子类,主要用于处理http协议。一般的Servlet只需要继承javax.servlet.GenericServlet.


package pocketdigi;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Servlet extends GenericServlet {

	@Override
	public void service(ServletRequest req, ServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setCharacterEncoding("UTF-8");
		//默认是iso-8859-1,中文会乱码
		PrintWriter out=resp.getWriter();
		out.println("");
		out.println("");
		out.println("");
		out.println("Hello,Servlet!我");
		out.println("");
		out.close();
	}

}

注册Servlet,在web.xml中添加:


	<servlet>
		<servlet-name>Servlet</servlet-name>
		<servlet-class>pocketdigi.Servlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Servlet</servlet-name>
		<url-pattern>/Servlet</url-pattern>
	</servlet-mapping>

访问http://localhost:8080/HelloUser/Servlet 即可看到结果(假设项目名为HelloUser).
Sevlet的生命周期:
1、init() 初始化
2、service() 处理客户端请求,返回结果
3、destory() 在Servlet容器卸载Servlet前调用,释放资源

初始化可能在以下情况下完成:
1、服务器启动时
2、浏览器第一次请求时
3、根据管理员配置
所以,并不是被用户请求,才会初始化Servlet,Servlet初始化到卸载Servlet期间没有处理任何请求也是可能的。

如果需要Servlet在服务器启动时初始化,可以在Web.xml中,servlet内增加load-on-startup,如


	<servlet>
		<servlet-name>Servlet</servlet-name>
		<servlet-class>pocketdigi.Servlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

load-on-startup的值必须是正整数,加载优先级从小到大。如果两个Servlet数值相同,由服务器自动选择。

卸载Servlet:
由于系统资源不足或其他原因,Servlet容器会卸载Servlet,这个操作由Servlet容器定义和实现,Servlet容器会在该Servlet处理完所有的请求后马上或指定时间后卸载Servlet,当再次被请求时,Servlet容器重新创建一个新的Servlet实例。

© 2012, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记