文档章节

Servlet的生命周期+实现方式

Jusenr
 Jusenr
发布于 2016/05/17 00:23
字数 841
阅读 7
收藏 0
点赞 2
评论 0

    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();

 

  代码演示:

 1 import java.io.IOException;
 2 
 3 import javax.servlet.Servlet;
 4 import javax.servlet.ServletConfig;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.ServletRequest;
 7 import javax.servlet.ServletResponse;
 8 
 9 
10 public class ServletTest implements Servlet {
11 
12     /**
13      * 初始化方法。Servlet创建之后调用,调用一次
14      */
15     public void init(ServletConfig config) throws ServletException {
16 
17         System.out.println("init() 被调用了。。。");
18     }
19 
20     /**
21      * 获取ServletConfig对象的方法
22      */
23     public ServletConfig getServletConfig() {
24         // TODO Auto-generated method stub
25         return null;
26     }
27 
28     /**
29      * 提供服务的方法,调用多次
30      */
31     public void service(ServletRequest req, ServletResponse res)
32             throws ServletException, IOException {
33 
34         res.setContentType(getServletInfo());
35         String ip = req.getRemoteAddr();
36         System.out.println(req.getRemoteAddr() +"哎呀,怎么就被访问了呢?!。。。。。。");
37         if("192.168.1.65".equals(ip)){
38             res.getWriter().write("<h1>你被和谐了!。。。</h1>");
39             return;
40         }
41         res.getWriter().write("<h3>haha Servlet</h3>");
42         
43     }
44 
45     /**
46      * 获取Servlet信息的方法。如:版本号,作者等
47      */
48     public String getServletInfo() {
49         // TODO Auto-generated method stub
50         return null;
51     }
52 
53     /**
54      * 销毁方法 调用一次。
55      */
56     public void destroy() {
57 
58         System.out.println("destroy() 要挂了...");
59     }
60 
61 
62 }

 

  XML文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   
 8    <servlet>
 9         <servlet-name>one</servlet-name>
10         <servlet-class>Serlet.ServletTest</servlet-class>    
11     <load-on-startup>5</load-on-startup>
12     </servlet>
13     <servlet-mapping>
14         <servlet-name>one</servlet-name>
15         <url-pattern>/one</url-pattern>
16     </servlet-mapping>
17 
18   <display-name></display-name>    
19   <welcome-file-list>
20     <welcome-file>index.jsp</welcome-file>
21   </welcome-file-list>
22 </web-app>

 

© 著作权归作者所有

共有 人打赏支持
Jusenr
粉丝 0
博文 20
码字总数 10876
作品 0
西安
Android工程师
Servlet生命周期与工作原理

Servlet生命周期分为三个阶段:   1,初始化阶段 调用init()方法   2,响应客户请求阶段  调用service()方法   3,终止阶段  调用destroy()方法 Servlet初始化阶段:   在下列时...

罗荣熙
2012/12/01
0
2
Servlet生命周期与工作原理

Servlet生命周期分为三个阶段:   1,初始化阶段 调用init()方法   2,响应客户请求阶段  调用service()方法   3,终止阶段  调用destroy()方法 Servlet初始化阶段:   在下列时...

№贪↗恋♂
2012/08/08
0
0
Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。 init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet 对象。可以配...

ArlenXu
2015/01/24
0
0
Tomcat如何与Servlet对象进行交互

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上...

KeepMoving
2015/03/09
0
0
Servlet创建运行的过程--生命周期以及自动加载

前言 初学者像我这样的,刚开始学的时候一脸懵逼,为什么Servlet可以直接运行,明明没有入口啊 只是重写了Servlet中的方法。然后访问该地址怎么就直接运行了。 所以了解Serlvet的运行过程即生...

codingcoge
06/12
0
0
JavaEE细节问题04——Servlet细节问题

1.<url-patten>的优先级问题 大家都知道,在web.xml中可以通过配置<servlet>和<servlet-mapping>来让一个servlet真正跑起来,而让服务器通过URL定位到 具体serlvet的标签就是通过<url-patten......

Lunqi
2015/08/17
0
0
Java Web(一) Servlet详解!!

一、什么是servlet?     处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且...

architect刘源源
05/08
0
0
JavaWeb09-HTML篇笔记(二)

1.1 案例一:使用Servlet完成一个用户登录的案例.1.1.1 需求: 在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功...

我是小谷粒
05/21
0
0
[转]通俗易懂Tomcat中Servlet的生命周期

我在上一篇文章里详细的介绍了 HTTP协议工作的流程,其中最重要的就是如何理解HTTP请求头和HTTP响应头,现在在这里再来详细的说明Tomcat 容器(即Servlet 容器)到底是如何 管理Servlet的,S...

穿越星辰
2010/05/13
0
2
2014-07-03 Java Web的学习(3)-----Servlet的知识

1.什么是Servlet SUN公司定义Servlet规范,其中Servlet API是这样定义的:A servlet is a small Java program that runs withina Web server. Servlets receive and respond to requests from ......

查封炉台
2014/07/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
18分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
26分钟前
0
0
mysql高级

一、存储引擎 InnoDB MyISAM 比较 二、数据类型 整型 浮点数 字符串 时间和日期 三、索引 索引分类 索引的优点 索引优化 B-Tree 和 B+Tree 原理 四、查询性能优化 五、切分 垂直切分 水平切分...

丁典
46分钟前
1
0
rsync通过同步服务、系统日志、screen工具

rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...

黄昏残影
今天
5
0
Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
今天
123
2
流利阅读笔记31-20180720待学习

克罗地亚:输了世界杯,却赢了全世界 雪梨 2018-07-20 1.今日导读 1998 年,年轻的克罗地亚国家队在法国世界杯给全世界留下了不可磨灭的印象,格子军团一举夺得了季军。4 年后,克罗地亚折戟...

aibinxiao
今天
5
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
今天
959
14
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部