javaWeb_Servlet_Servlet基础_Servlet配置以及Servlet生命周期

Servlet基础_Servlet配置以及Servlet生命周期

1.servlet方法和一般的java方法不同之处

(1).现象
我们看见一个显现,启动tomcat服务器的时候,我们所调用的这一个Servlet方法已经被执行了,并打出了要输出的部分信息。我们之前是
自己启动,自己创建实例,自己调用方法,字节结束方法,但是servlet就自己调用了方法,其实这是服务器执行的,因为Servlet是运行在
服务器端的应用程序,Servlet容器会帮我们创建Servlet实例,调用Servlet方法,在结束的时候会调用销毁方法。

(2).Servlet容器做的操作
A:创建Servlet实例,并调用Servlet的相关生命周期方法。(即先init()-->Service()--->destory())
B:如jsp,Filter,listener,Tag等运行在Servlet容器中的都受到Servlet容器管理。

2.Servlet相关的生命周期方法

(1).构造器:第一次请求servlet的时候,只会被调用一次,创建Servlet的实例,调用构造器。同时也说明Servlet是单实例的。(这一个时候就
存在线程安全的问题也就是说不提倡使用全局变量在Servlet里面)。

(2).init():只会被调用一次,也即是创建好实例以后会被调用,用于初始化当前的Servlet,注意:是可传递参数的初始化,一般就是配置信息。

(3).Service():会被多次调用,这个就是用于响应请求的。

(4).destory():只会被调用一次,在当前的servlet所在的web被卸载调用之前会被调用,用于释放servlet占用的资源。

注意:以上的方法都是被servlet容器所调用。

3.特殊的参数:load-on-startup

(1).作用:指定该servlet在容器中被创建的时机。配置在servlet的节点中。参数如果为负数,那么会被第一次请求的时候被创建实例,
如果不为负数,那么会被servlet容器加载的时候创建实例,且数据值越小越早被创建。

(2).实例:

<servlet> <servlet-name>Manager</servlet-name> <servlet-class>com.action.Manager</servlet-class> <load-on-startup>1</load-on-startup> </servlet>

4.servlet容器响应servlet请求的过程

(1).Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行(4),否则执行(2)
(2).装载并创建该Servlet的一个实例对象:调用该Servlet的构造器。
(3).调用Servlet实例对象的init()方法。
(4).创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用
Servlet的service()方法并将请求和响应对象作为参数传递进去。
(5).WEB应用程序被停止请求和重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的
destory()方法。

5.Servlet的注册以及Servlet的运行

(1).Servlet程序必须通过Servlet容器来启动运行,并且存储目录需要有特殊要求,通常
需要存储在<WEB应用程序目录>\WEB-INF\classes\目录中。

(2).Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎记载和被外界访问。

(3).servlet的注册和映射

A:注册
一个Servlet元素用于注册一个Servlet,它包含俩个主要的子元素:<servlet-name><servlet-class>,分别用于设置Servlet的注册名称,
和Servlet的完整类名。

B:映射
一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含俩个子元素:<servlet-name><url-pattern>
分别用于指定Servlet的注册名称和Servlet的对外访问路径。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

java代码073

code073.javapackagepack02;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.UUID;importjavax.servlet.ServletException;importjavax.servlet.annotation.Multip

Servlet的多线程机制与线程安全

Servlet的多线程机制     Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Ser

javaWeb_Servlet_Servlet基础_Servlet配置以及Servlet生命周期 - HelloWorld