Servlet简介
(1)Servlet技术简介
a.Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的WEB服务器端编程技术。
b.Servlet技术也是JSP技术(另外一种动态网页开发技术)的基础。
c.一个Servlet程序就是一个实现了特殊接口的Java类,它由支持Servlet(具有Servlet引擎)的WEB服务器调用和启动运行。Web服务器可以把一个或一组URL地址的访问请求交给某个的Servlet程序去处理,Servlet可以接收到客户端的请求信息和产生响应内容。
d.Applet是用于浏览器端的Java小程序,Servlet是用于WEB服务器端的Java小程序。
e.Servlet程序可以完成普通Java程序所能完成的大多数任务:
(e-1)获取客户端通过HTML的FORM表单递交的数据和URL后面的参数信息
(e-2)创建对客户端的响应消息内容
(e-3)访问服务器端的文件系统
(e-4)连接数据库并开发基于数据库的应用
(e-5)调用其它的Java类
(2)Servlet API介绍
a.Servlet API(Servlet Application Programming Interface)是SUN公司定义的一套专门用于开发Servlet程序的Java类和接口。
b.早期包装Servlet API的jar包被称之为JSDK(Java Servlet Development Kit,即Java Servlet开发工具包),最新版本的Java Servlet开发工具包已经被集成到了SUN公司的Java EE(J2EE升级后的名称,即Java企业级版本)开发工具包中,这些开发工具包都可以从http://java.sun.com站点上下载到。
c.应结合Servlet API帮助文档来学习和应用Servlet API,边学边查、边用边查。必须了解HTTP协议和WEB服务器的内部运行方式、以及Servlet引擎的一些实现机制后,才能够在看懂帮助文档中的英文单词的基础上去了解和掌握一些Servlet API的用途与用法,才能够使用Servlet来实现一些特殊的WEB功能。
(3)编写Servlet程序
a.一个Servlet程序就是一个实现了javax.servlet.Servlet接口的Java类,Servlet接口定义了Servlet引擎与Servlet程序之间通信的协议约定。
b.javax.servlet.GenericServlet类实现了Servlet接口,它实现了Servlet程序的基本特征和功能。
c.javax.servlet.http.HttpServlet类是GenericServlet的子类,它在GenericServlet类的基础上进行了一些针对HTTP特点的扩充。
客户端每次访问一个支持HTTP的Servlet程序时,Servlet引擎都将调用Servlet的service方法来进行处理。service方法接受两个参数,一个是用于封装HTTP请求消息的对象,其类型为HttpServletRequest,另一个是代表HTTP响应消息的对象,其类型为HttpServletResponse。
调用HttpServletResponse对象的getWriter方法可以获得一个文本输出流对象,向这个流对象中写入的数据将作为HTTP响应消息的实体内容部分发送给客户端。
(4)Servlet的注册与运行
a.Servlet程序必须通过Servlet引擎来启动运行,并且储存目录有特殊要求,通常需要存储在\WEB-INF\classes\目录中。
b.Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。
c.一个元素用于注册一个Servlet,它包含有两个主要的子元素:和,分别用于设置Servlet的注册名称和Servlet的完整类名。
d.一个元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:和,分别用于指定Servlet的注册名称和Servlet的对外访问路径。
e.同一个Servlet可以被映射到多个URL上,即多个元素的子元素的设置值可以是同一个Servlet的注册名。
f.同一个Servlet类可以被注册多次,即创建出这个Servlet类的多个实例对象。
g.在Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。带扩展名的*前不能有“/”,即不能设置为“/action/*.xx”形式。
(5)Servlet映射的最具体匹配原则---servlet匹配最接近的
对于如下的一些映射关系:
/abc/* 映射到 Servlet1
/* 映射到 Servlet2
/abc 映射到 Servlet3
*.do 映射到 Servlet4
当请求URL为“/abc/a.html”,“/abc/*”和“/*”都可以匹配这个URL,
Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/abc/*”和“/abc” 都可以匹配这个URL,
Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都可以匹配这个URL,
Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都可以匹配这个URL,
Servlet引擎将调用Servlet2。
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都可以匹配这个URL,
Servlet引擎将调用Servlet2。
(6)缺省Servlet
如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet;
凡是在web.xml文件中找不到匹配的元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求;
在\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为了缺省Servlet;
当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。
(7)Servlet的特点
a.Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。
b.Servlet引擎是一种容器程序,它负责管理和维护所有Servlet对象的生命周期。Servlet的加载、执行流程、以及如何接收客户端发送的数据和如何将数据传输到客户端等具体的底层事务,都是由Servlet引擎来实现的。Servlet引擎负责将客户端的请求信息转交给Servlet和将Servlet生成的响应信息返回给客户端。
c.Servlet属于一种插件,它是一个提供了一些约定方法供容器去调用的类,它只负责在自身的方法中接受并处理容器传递进来的数据,以及生成并返回给容器去使用的数据和状态信息。
d.Servlet的最常见应用在于读取WEB浏览器传递给WEB服务器的参数和生成WEB服务器返回给WEB浏览器的动态网页文档内容;Serlvet也能获取WEB浏览器发送的HTTP请求消息中的各个请求头和请求行信息,以及生成用于WEB服务器发送的HTTP响应消息中的状态行和响应头信息;Serlvet还能获取WEB服务器和Servlet引擎自身的一些环境和状态信息。
e.
Servlet程序的运行过程就是它与Servlet引擎的交互过程,Servlet程序只与Servlet引擎打交道,它并不与Web服务器和客户端进行任何直接的交互。
Servlet本身就是Java语言的一个应用,具有Java语言的所有优势,能完成普通Java程序所能完成的所有功能。
Web服务器上可以布置多个功能各不相同的Servlet,每个Servlet 都应宣称它可以处理何种样式的URL,当符合样式的URL请求到达时,Servlet引擎调用相应的Servlet进行处理。
(8)通过注解部署Servlet
@WebServlet(name="",urlPatterns={"/my"})-------通过WebServlet注解类型来声明一个Servlet。
name属性是可选的,如果有一般是用来提供Servlet类的名称,关键是urlPatters属性,也是可选的,但是几乎都会用到它,通过/my调用这个Servlet。
如果同时使用注解和web.xml部署Servlet时,注解会不起作用。