文档章节

Servlet的生命周期+实现方式

Jusenr
 Jusenr
发布于 2016/05/17 00:23
字数 841
阅读 7
收藏 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/08/08
0
0
Servlet生命周期与工作原理

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

罗荣熙
2012/12/01
0
2
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

没有更多内容

加载失败,请刷新页面

加载更多

day92-20180918-英语流利阅读-待学习

健身最大的敌人不是懒惰,而是逞强 Daniel 2018-09-19 1.今日导读 还记得 2008 年北京奥运会运动员刘翔的退赛风波吗?那天几乎所有中国人都将视线聚焦在了鸟巢体育馆 110 米栏的项目上,迫不...

飞鱼说编程
16分钟前
1
0
70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
3
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
6
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部