Servlet的生命周期+实现方式
1.Servlet的生命周期:
(1)被创建:
默认情况下,Servlet第一次被访问时,被服务器创建。会调用init()方法。
一个Servlet只会被创建一次。init()方法也只会被调用一次。
Servlet是单例的。而服务器时多线程的。可能存在线程安全问题。
为了避免安全问题,在Servlet中尽量不要定义成员变量。即使定义了。也不要进行其他操作(只能查询)。
可以配置启动服务器时,创建Servlet
配置启动创建
值:
0和正整数:在服务器启动时创建
数字越小 优先级越高
负整数:-1是默认值。在第一次被访问时创建
<load-on-startup>2</load-on-startup>
(2)提供服务:
每一次被被访问,都会调用service方法提供服务。调用多次。
提供服务:
1.获取请求消息数据
2.设置响应消息数据
(3)被销毁:
服务器关闭时,servlet被销毁。
服务器正常关闭前,会销毁Servlet,在销毁之前,会调用destory()方法。只调用一次。
2.Servlet的实现方式:
(1)实现Servlet接口:
* ServletConfig:Servlet配置对象
* getInitParameter(String name) :获取servlet的初始化参数值
* Enumeration getInitParameterNames() :获取servlet的初始化参数的名称枚举
* ServletContext getServletContext() :获取ServletContext
* String getServletName() :获取Servlet名称
* 服务器创建的。
* 对于getServletConfig()的实现。
1.定义成员变量。ServletConfig config
2.在init 方法中 对其赋值
3.在getServletConfig() 返回成员变量。
(2)继承GenericServlet:
优化1:对于getServletConfig()的实现。
在该类中,init方法有两个,一个有参的,一个无参的。我们要复写无参的。
优化2:实现了ServletConfig 接口
我们可以通过简单方式获取ServletContext对象。
(3)继承HTTPServlet:对HTTP协议的封装。
// 1.获取请求方式
String method = req.getMethod();
//2.根据方式的不同,执行不同的操作
if("GET".equals(method)){
//get方式的代码
doGet(req,resp);
}else if("POST".equals(method)){
//get方式的代码
doPost(req,resp);
}
以后我们需要复写 doGet()和 doPost();
代码演示:
import java.io.IOException; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class ServletTest implements Servlet { /**
* 初始化方法。Servlet创建之后调用,调用一次
*/
public void init(ServletConfig config) throws ServletException { System.out.println("init() 被调用了。。。");
} /**
* 获取ServletConfig对象的方法
*/
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
} /**
* 提供服务的方法,调用多次
*/
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException { res.setContentType(getServletInfo());
String ip = req.getRemoteAddr();
System.out.println(req.getRemoteAddr() +"哎呀,怎么就被访问了呢?!。。。。。。");
if("192.168.1.65".equals(ip)){
res.getWriter().write("<h1>你被和谐了!。。。</h1>");
return;
}
res.getWriter().write("<h3>haha Servlet</h3>"); } /**
* 获取Servlet信息的方法。如:版本号,作者等
*/
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
} /**
* 销毁方法 调用一次。
*/
public void destroy() { System.out.println("destroy() 要挂了...");
} }
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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"> <servlet>
<servlet-name>one</servlet-name>
<servlet-class>Serlet.ServletTest</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>one</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping> <display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Servlet的生命周期+实现方式的更多相关文章
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...
- servlet的生命周期与工作原理、使用!
概念: Servlet是一个java程序运行在服务器上,处理客户端请求并做粗响应的程序!Servlet是和平台无关的服务器组件,它运行在Servlet容器中,Servlet容器 负责servlet和客 ...
- Servlet相关接口和Servlet的生命周期
http://www.cnblogs.com/luotaoyeah/p/3860292.html Servlet相关接口和Servlet的生命周期 创建一个Servlet类最直接的方式是实现javax ...
- Servlet的生命周期?
Servlet何时被创建: 1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例. 2,当web.xml文件中如果<servlet> ...
- Servlet的生命周期与运行原理
Servlet的生命周期: 1 加载classLoader 2 实例化 new 3 初始化 init(ServletConfig) 4 处理请求 service doGet d ...
- servlet的生命周期和servlet的继承关系
一.servlet的生命周期 一个servlet类的对象 加载——>实例化——>初始化——>服务——>销毁 第一次访问某个servlet的时候 首先调用其 构造函数 pub ...
- http协议,servlet的生命周期
1.http协议(http协议是无状态的) http协议是指计算机通信网络中两台计算机进行通信必须共同遵守的规定或规则,它允许将超文本标记语言(html)文档从web服务器传送到客户端的浏览器(目前我 ...
随机推荐
- ASP.NET MVC之分部视图和ChildAction(三)
前言 上节我们已经非常清晰并且明确的讲了@Html.ActionLink的作用,这一节我们开始讲讲分部视图以及孩子Action. 话题 在C#中我们知道继承的目的是为了代码的复用,在Web应用程序同样 ...
- First Blog
俗话说“笨鸟先飞”,遗憾的是我这只笨鸟直到今天才意识到个人博客的重要性. 原来记录下学习生活中的每一丝领悟与思考,可以让个人内在,对知识的理解得到更好的升华. 有梦的人很美,追梦的人更美.像我的座右铭 ...
- MVC中处理表单提交的方式(使用html扩展方法+juqery插件)
这里使用扩展方法来扩展基于jquery.form 插件,实现基于异步的ajax的提交方式.
- 窥探Swift编程之在Playground上尽情的玩耍
自从苹果公司发布Swift的时候,Xcode上又多了一样新的东西---"Playground".Playground就像操场一样,可以供我们在代码的世界里尽情的玩耍,在本篇博客中就 ...
- 【记录】AutoMapper Project To not support ResolveUsing
示例代码: public List<OrderLineDTO> GetLinesForOrder(int orderId) { Mapper.CreateMap<OrderLine, ...
- 关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解
所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码. 而宽字符,顾名思义,就是用16bit表示的字符,典型的有UNICODE. **************************** ...
- 从底层开发谈WebGIS中实现地理长度固定的可视窗口的思路和方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.具体问题 在公司某边界城市的项目中,对方提出因为自己的地图安全度要 ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- 模拟实现SQL Server中的datepart(week,date)的功能
本文目录列表: 1.为什么要模拟实现datepart(week,date)的功能 2.具体实现思路 3.T-SQL代码实现逻辑 4.总结语 5.参考清单列表 1.为什么要模拟实现datepart( ...
- 实战 ASP.NET Web API
Web API 框架是一个面向 Http 协议的通信框架.相对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置.Web API 的开发类似于 ASP.N ...