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服务器传送到客户端的浏览器(目前我 ...
随机推荐
- jquery EasyUI的formatter格式化函数代码
要格式化数据表格列,需要设置formatter属性,该属性是一个函数,它包含两个参数: value: 对应字段的当前列的值 record: 当前行的记录数据 复制代码 代码如下: $('#tt' ...
- 大小写互换-"数字字符串"转换成数字
今天穿着hacker浑浊马甲在百度编程课堂实训习题中发现了这个很简单的问题,就做了下. 为了考虑输入的是否是数字,结果写好后竟然超时了. 不过里面用到的将字符串装换成数字的方法,感觉是个收获,因此在此 ...
- 在Navicat premium上创建的SQL Server数据库,实现用PHP连接(即php连接微软MSSQL)
用 freetds 或 dblib的方式连接sql server 在windows下使用FreeTDS 什么是FreeTDS? FreeTDS其实就是一个开源(或者可以说成自由)的C程序库,它可以实现 ...
- 安装好centOS5.5 后中文乱码
1.网页浏览的中文乱码 [root@localhost ~]# yum install fonts-chinese 下载完毕后,浏览器可以浏览中文网页. 2.应用显示中文乱码 #vi /etc/sys ...
- maven全局配置文件settings.xml详解
概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径. settings.xml文件是干什么的,为什么要配置它 ...
- effective java 读后感
think in java , effective java 这两本书一直都在java的生态圈中经久不衰.本来想着先翻过 think in java 这本大山,但是读到一半就放弃了.过长的篇幅,让 ...
- 关于WEB Service&WCF&WebApi实现身份验证之WebApi篇
之前先后总结并发表了关于WEB Service.WCF身份验证相关文章,如下: 关于WEB Service&WCF&WebApi实现身份验证之WEB Service篇. 关于WEB S ...
- 使用AutoMapper进行对象间映射
在开发过程中,难免遇到下面这种情况:两个(或多个)对象所拥有的大多数属性是重复的,我们需要在对象间进行映射(即将一个对象的属性值赋给另一个对象.通常我们可以进行如下操作: A a=new A(); a ...
- grep命令详解
用法格式 grep [option] pattern file 实验文件 [root@zejin240 tmp]# cat testdir/tfile 1 #include <stdio ...
- AngularJS中的JSONP实践
欢迎大家指导与讨论: ) 概念 首先呢,Json和JSONP是不一样的哦.Json呢,是众多数据存储的其中一种格式,是数据书写方式的其中一种.好比是大中华众多诗体的一种(比如说是七言诗吧).这种诗体规 ...