servlet02--Servlet

1	Servlet
1.1	Servlet概述
1.1.1	什么是Servlet
Servlet是由SUN提供的动态WEB资源开发技术. 
Servlet本质上就是一段java程序, 只不过这段程序无法独立运行, 需要放在Servlet容器(tomcat服务器)中, 由容器调用才可以执行.
1.2	开发Servlet程序
1.2.1	开发Servlet程序的步骤
(1)写一个类, 需要实现Servlet接口(或者继承Servlet接口的子类)
(2)将编译后的类, 放在web应用中, 并在web.xml文件中配置Servlet对外访问的虚拟路径. 将web应用部署到虚拟主机即可!
1.2.2	案例: 使用记事本开发一个Servlet
1.需求: 通过浏览器访问服务器中news应用中的FirstServlet, FirstServlet处理浏览器发送过来的请求, 将表示当前时间的字符串响应给浏览器.
2.实现步骤:
(1)写一个类FirstServlet. 并实现Servlet接口(或继承Servlet接口的子类如GenericServlet)
 
 
(2)添加Servlet接口中(或GericeServlet类中未实现的)的方法, 其中要实现service方法来处理请求
 
(3)在service方法中处理请求, 将表示当前时间的字符串响应给浏览器
 
(4)细节处理: 导入依赖包, 并添加当前类的包路径
 
(5)编译FirstServlet类
a)在cmd窗口中通过javac命令遍java类. 编译后会出现如下错误, 是由于javax.servlet包不存在造成的.
 
解决方法: 在cmd中通过 set classpath来设置 javax.servlet的包路径, 如下:
 

设置之后再去编译(带包编译):
 
 
(6)将编译后的类放在web应用中
将编译后的class文件(带包)放在web应用news的classes目录下.
 
(7)在web应用的web.xml文件中配置servlet对外访问的虚拟路径
 
(8)将web应用部署到虚拟主机中, 启动服务器测试程序.
 
1.3	使用eclipse开发Servlet程序
1.3.1	Servlet的 继承结构
 

Servlet接口 – 通用的Servlet接口, 提供了一个Servlet应该具有哪些功能
	|
	|-- GenericServlet抽象类, 实现了Servlet接口, 并且实现了servlet接口中大部分的方法, 但是service方法没有实现, 需要开发人员自己来实现.
				|
				|-- HttpServlet抽象类, 继承了GenericServlet, 并且实现了service方法, 在service方法中根据不同的请求方式调用不同的doXxx方法.
						 |
						 |-- XxxServlet类, 继承了HttpServlet, 需要覆盖doGet和doPost方法. 
因此我们在开发中, 只需要写一个类, 继承HttpServlet, 覆盖需要覆盖doGet和doPost方法, 分别来处理GET请求和POST请求即可!!

1.4	Servlet的调用过程
问题描述: 在WEB应用中开发一个Servlet中, 并在web应用的web.xml文件中配置了Servlet对外访问的虚拟路径, 打开浏览器就可以访问到这个Servlet. 问题是这个Servlet是如何被调用的? Servlet又是如何执行的?
详细过程参见<<Servlet调用过程>>图解!!!
 
1.4.1	Servlet生命周期:
Servlet是在第一次被访问时创建Servlet实例, 创建之后服务器会立即调用init方法进行初始化的操作, Servlet实例会驻留在服务器的内存中, 为后续的请求服务, 只要有请求访问servlet, 将会调用service方法来处理请求, 直到服务器关闭或者web应用被移出容器时为止, 随着web应用的销毁, servlet实例也会跟着销毁, 在销毁之前服务器会调用destroy方法进行善后的处理.

1.5	 Servlet在web.xml中的配置
在开发完一个servlet程序之后, 需要在web应用的web.xml文件中配置servlet对外访问的虚拟路径, 如:
<servlet-mapping>
	<servlet-name>SecondServlet</servlet-name>
	<url-pattern>/SecondServlet</url-pattern>
</servlet-mapping>
在上述配置中, 我们是直接配置了一个固定的路径, 在访问时只能通过这个固定的路径来访问, 否则就是提示资源找不到.

servlet在web.xml文件中的路径配置也可以有其他方式:
(1)	直接写一个固定的路径, 如上面的配置
(2)	通过 * 号匹配符配置一个路径
a) 以斜杠(/)开头, 以斜杠星(/*)结尾, 如: /*, /servlet/*, /a/b/c/*
b) 以 *.后缀 的形式, 如: *.do, *.html, *.jsp, *.abc...

示例:
Servlet1 映射到 /abc/* 
Servlet2 映射到 /* 
Servlet3 映射到 /abc 
Servlet4 映射到 *.do 

当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应?
	Servlet1将会被调用
当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应?
	Servlet3将会被调用
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应?
	Servlet1将会被调用
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应?
	Servlet2将会被调用

猜你喜欢

转载自blog.csdn.net/TomHaveNoCat/article/details/82910918