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 5框架揭秘》正式出版
ASP.NET MVC是一个建立在ASP.NET平台上基于MVC模式的Web开发框架,它提供了一种与Web Form完全不同的开发方式.ASP.NET Web Form借鉴了Windows Form基 ...
- scikit-learn决策树算法类库使用小结
之前对决策树的算法原理做了总结,包括决策树算法原理(上)和决策树算法原理(下).今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的 ...
- Rust初步(六):在C#中使用Rust组件
上一篇文章,我们通过实例比较了一下C#和Rust的性能表现,应该说在Release模式下面,Rust进行计算密集型的运算还是有些比较明显的优势的.那么,我们有没有可能,在C#中做一些快速应用开发,而一 ...
- iOS开发之使用CocoaPods更新第三方出现“target overrides the `OTHER_LDFLAGS`……”问题解决方案
今天在自己的项目中用CocoaPods引入第三方SDWebImage的时候,出现了问题.当更新完毕后,在终端没太注意这个问题的提示,就直接使用SDWebImage了,在使用的时候一些方法的提示和头文件 ...
- Ubuntu杂记——Ubuntu自带拼音输入发杂乱不堪
打开终端,用管理员权限输入ibus-daemon -drx,重启即可
- Windows Server 2008 R2 添加且制成“NFS服务器”角色后与Unix客户端匿名访问常见问题
在复杂的主机与网络环境中,我们可能会接触到多种主机与操作系统,配合Windows Server 2008 R2的原生“NFS服务器”功能可以让这样的复杂操作系统更方便应用. 然而面对网络上众多的帮助指 ...
- Unity调用Android类方法
Unity调用Android类方法 1. 添加Unity的classes.jar文件 创建一个Android工程AndroidUnityDemo. 由于Unity的版本不同,直接在Unity安装包文 ...
- 附录B 安装MySql数据库
B.1 卸载旧的MaySql程序 第一步 查找以前是否安装有mysql 使用命令查看是否已经安装过mysql: #rpm -qa | grep -i mysql 如果没有结果,则可以进行mysq ...
- Spring配置c3p0数据源时出错报:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
今天在使用Spring配置c3p0数据源时,使用的数据库是mysql,服务器是tomcat,运行时报了一个 java.lang.NoClassDefFoundError: com/mchange/v2 ...
- Kafka到Hdfs的数据Pipeline整理
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 找时间总结整理了下数据从Kafka到Hdfs的一些pipeline,如下 1> Kafka ...