Servlet(基础)

Servlet 专 题 (基础)

Servlet容器:
Servlet 由 Servlet容器提供,Servlet容器是指 提供了Servlet功能的服务器。
(如Tomcat)。

作用:
Servlet容器会将Servlet动态加载到服务器,然后通过HTTP请求 和 HTTP响应与客户端进行交互。















什么是Servlet?







宏观上:
Servlet 是 Servlet 规范中的一个具体的接口。Servlet 规范中包含一套接口。而 Servlet 接口仅仅是其中之一。

微观上:
Servlet 是 Servlet 接口实现类的一个实例对象,是运行在服务器上的一段 Java
小程序。即 Server Applet,也就是 Servlet 这个单词的来历。
通常来说,Servlet指所有实现了Servlet这个接口的类。

Servlet 的主要功能
根据客户端提交的请求,调用服务器端相关 Java 代码,完成对请求的处理与运算。(即,主要用于处理客户端传来的HTTP请求,并返回一个响应给客户端。)



Servlet的特征?




Servlet接口中定义了 五个抽象方法








Servlet的生命周期:







生命周期方法执行流程:










Servlet 生命周期方法的执行流程:
(1)当请求发送到 Web 容器后,Web 容器会解析请求 URL,
并从中分离出 Servlet 对应的URI。

(2)根据分离出的 URI,通过 web.xml 中配置的 URI 与 Servlet 的映射关系,
找到要执行的Servlet,即找到用于处理该请求的 Servlet。

(3)若该 Servlet 不存在,
则调用该 Servlet 的无参构造器、init()方法,实例化该 Servlet。
然后执行 service()方法。

(4)若该 Servlet 已经被创建,则直接调用 service()方法。

(5)当 Web 容器被关闭,或该应用被关闭,
则调用执行 destroy()方法,销毁 Servlet 实例。



第一个Servlet程序: HelloServlet.java

1.HelloServlet.java







2.web.xml 配置文件



3.将项目发布到Tomcat上,并启动Tomcat服务器。发现eclipse控制台上,并无打印信息。

4. 访问:http://localhost:8080/01-myServlet/hello


只有在访问的时候,才会执行 无参构造器方法 和 执行init()方法,进行初始化。

5. 再次访问http://localhost:8080/01-myServlet/hello



发现: 无参构造器方法 和 执行init()方法只会在首次访问的时候执行一次。




总结:
(1)项目部署后启动服务器,发现并没有执行 Servlet 的无参构造器方法,说明在 Web 容器启动时并没有创建 Servlet 对象。
(2)用户提交请求后,马上可以看到无参构造器、init()方法、service()方法均执行。
(3)刷新页面,发现只会执行 service()方法,每刷新一次,即每提交一次请求,就会执行一次 service()方法。
(4)让另外一个浏览器也发出同样的请求,会发现只执行 service()方法,而无构造器、init()方法均未执行。
(5)正常关闭 Tomcat(使用 stop server 关闭,不能使用 Terminate 关闭),发现 destroy()方法也会执行。



设置优先级:
只需改动一下web.xml配置文件,如图示:







将项目发布到tomcat服务器,并启动。

得出结论: 可以设置优先级,对象Servlet的创建时期,提前到 tomcat服务器启动时。



Servlet虚拟路径映射配置







Servlet的多重映射:
指的是 同一个Servlet可以被映射成多条虚拟路径。即,客户端可以通过多条路径实现对同一个Servlet的访问。

一、Servlet多重映射的实现方式:有两种

方式1: 配置多个<servlet-mapping>元素



使用http://localhost:8080/01-myServlet/a
或使用http://localhost:8080/01-myServlet/b ,访问的都是同一个Servlet


方式2:配置多个<url-pattern>子元素



二、Servlet映射路径中使用通配符:2种方式
实际开发中,开发中有时会希望某个目录下的所有路径都可以访问同一个Servlet。
此时可以在Servlet映射的路径中使用通配符 * 。
2种方式:

* . 扩展名
如:*.do 匹配以 .do 结尾的所有URL地址


/ *
如: /abc/* 匹配以 /abc开始的所有URL地址

注意事项1: 这两种通配符的格式不能混用。
如: /qbc/*.do 是不合法的映射路径。

注意事项2:
当客户端访问一个Servlet时,如果请求的URL地址能够匹配多条 虚拟路径时。那么Tomcat将会采取最具体的匹配原则查找 与请求URL最接近的虚拟映射路径。




三、,默认Servlet

若某个Servlet的映射路径仅仅是一个正斜线 / ,那么这个Servlet就是当前Web应用默认的Servlet。
Servlet服务器在接收到访问请求时,若在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,则会将访问请求交给默认的Servlet处理。即,默认Servlet用于处理其他Servlet都不会处理的访问请求。




启动服务器,在浏览器的地址栏中输入任意的地址,都能够访问。

思考:当URL地址 和 项目的虚拟路径不匹配时,浏览器仍旧可以正常访问项目。原因是什么?

在Tomcat服务器的安装目录下的web.xml文件中也配置 一个默认的Servlet。配置信息如下:





针对Servlet接口,sun公司提供了2个默认的接口实现类:
GenericServlet类 和 HttpServlet类

GenericServlet类 :
是一个抽象类,该类为Servlet接口提供了部分实现,它并没有实现HTTP请求处理。

HttpServlet类:
它是GenericServlet类的子类,它继承了GenericServlet类的所有方法,并且为HTTP请求中的Get 和 Post等类型提供了具体的操作方法。
通常情况下,编写的Servlet类都继承自HttpServlet,在开发中使用的也是HttpServlet对象:
继承自HttpServlet,并重写doPost() 和 doGet()方法







猜你喜欢

转载自www.cnblogs.com/penguin1024/p/12153279.html
今日推荐