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将会被调用
servlet02--Servlet
猜你喜欢
转载自blog.csdn.net/TomHaveNoCat/article/details/82910918
今日推荐
周排行