Servlet (执行过程,生命周期,创建方式)

一.Servlet

servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。

servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。


1.1、编写一个servlet程序:


a、写一个java类,实现servlet接口




b、修改web.xml文件,给servlet提供一个可访问的URI地址


c、部署应用到tomcat服务器
d、测试:http://locahost:8080/day08_00_servlet/demo1


细节补充:

由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。 一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径


二、执行过程



Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:


1   Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
2   装载并创建该Servlet的一个实例对象。
3   调用Servlet实例对象的init()方法。
4   创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
5   WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

三、Servlet生命周期(重要)


实例化-->初始化-->服务->销毁
出生:(实例化-->初始化)第一次访问Servlet就出生(默认情况下)
活着:(服务)应用活着,servlet就活着

死亡:(销毁)应用卸载了servlet就销毁。






小知识:

如何让servlet在服务器启动时就创建。(数字为正整数)




四、Servlet的三种创建方式


4.1、实现javax.servlet.Servlet接口(参见:编写一个servlet程序:)

4.2、继承javax.servlet.GenericServlet类(适配器模式)




4.3、继承javax.servlet.http.HttpServlet类(模板方法设计模式)

(开发中常用方式)


模板:指的是HttpServlet中的service方法,拆成了doGet/doPost方法。

Servlet --> GenericServlet --> HttpServlet (继承HttpServlet)
曾祖父 爷爷 爸爸 孙子

HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。

HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。


小技巧:使生成的servlet更清新一些
找到:MyEclipse\Common\plugins目录

把com.genuitec.eclipse.wizards_9.0.0.me201108091322.jar复制到上面目录(F!)


servlet映射细节:


servet映射细节1:



servet映射细节2: 通配符* 代表任意字符串


url-pattern: *.do 以 .do 字符串的请求都可以访问 注:不要加/
url-pattern: /* 任意字符串都可以访问

url-pattern: /action/* 以/action开头的请求都可以访问


匹配规则:
优先级:从高到低
绝对匹配--> /开头匹配 --> 扩展名方式匹配

如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。
凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。
在<tomcat的安装目录>\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为了缺省Servlet。
当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。


猜你喜欢

转载自blog.csdn.net/qq_43563538/article/details/85855730
今日推荐