Java Servlet是在Web端或应用程序服务器上运行的程序,并充当来自Web浏览器或其他HTTP客户端的请求与HTTP服务器上的数据库或应用程序之间的中间层。
使用Servlet,我们可以通过网页表单收集来自用户的输入,显示来自数据库或其他来源的记录,并动态创建网页。
下图显示了Servlet在Web应用程序中的位置,其中HttpServlet通过Http协议为客户端提供服务,目前,Servlet也只有通过Http协议为我们提供服务,即GenericServlet只有HttpServlet这一个子类:
Servlet API由两个软件包构成,对应于HTTP协议的软件包以及对应于除了HTTP协议以外的其他软件包,因此Servlet API可以适用于任何通信协议。
笔者所学习的Servlet,是位于javax.servlet.http.HttpServlet包中的类和接口,是基于HTTP协议的。
一般在我们实际的编程中,Servlet必须符合一定的规则:
Servlet要想使用,必须对其进行配置:在Servlet3.0版本之前,使用web.xml编写映射关系进行配置,在Servlet3.0之后,我们可以在类的定义之前用注释@WebServlet(value="url-pattern")
对该Servlet添加映射关系,因为Servlet是向下兼容的,所以也可以使用web.xml进行配置。
=》根据找到的
对应的
中的
找到有对应的
的
的
==》最后,Servlet容器将请求交给该
对应的Servlet类进行处理。@WebServlet
方式:
如果使用Eclipse编写Serlet,可以直接在package下直接新建一个Servlet,这样的话会自动完成继承HttpServlet的父类、重写相关的方法和web.xml或注释的相关映射编写操作。
我们编写的url-pattern的格式为“/URL”,其中的“/”代表的是一个根目录,对于一个html(包括后续使用的JSP)来说,“/”等同于服务器根目录,即http://ip.post;如果是在web.xml或Servlet注释,则等同于该项目的项目根路径,即ip:post/项目/。如果index.jsp中请求abc
,则会去项目的src的根目录下寻找该Servlet,也会到该项目的WebContent下去寻找该html或jsp。
例如在一个自定义的Servlet(servlet.exampleServlet)下编写以下的init()方法:
public void init() throws ServletExecption{
//获取当前的Servlet的初始化参数,即ServletVonfig接口的String getInitParameter(String name)方法
String value = super.getInitParameter("servletParam");
System.out.println("当前Servlet的参数servletParam的值为:"+value );
//获取当前的Web容器的初始化参数,即ServletContext接口的String getInitParameter(String name)方法
ServletContext servletContext = super.getServletContext();
String globeValue = servletContext .getInitParameter("globeParam");
System.out.println("当前Web容器的参数servletParam的值为:"+globeValue );
}
在web.xml下:
<context-param>
<param-name>globeParamparam-name>
<param-value>globeValueparam-value>
context-param>
<servlet>
<servlet-name>exampleServletservlet-name>
<servlet-class>servlet.exampleServletservlet-class>
<init-param>
<param-name>servletParamparam-name>
<param-value>servletParamValueparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>exampleServletservlet-name>
<url-pattern>/exampleServleturl-pattern>
servlet-mapping>
注意:不管是ServletVonfig接口的String getInitParameter(String name)方法还是ServletContext接口的String getInitParameter(String name)方法,都需要有该
的
,并且name需要写对。
Java Servlet通常具有与使用通用网关接口(CGI)实现的程序相同的目的。但是,与CGI相比,Servlet具有许多优势:
Java Servlet是由Web服务器运行的Java类,该Web服务器具有支持Java Servlet规范的解释器。
就像任何其他Java类一样,Java servlet已经创建并编译好了。安装Servlet软件包并将其添加到计算机的Classpath之后,可以使用JDK的Java编译器或任何其他当前编译器来编译servlet。
说明:Servlet的生命周期一共有5个阶段(注意,3个阶段是不正确的),这5个阶段分别是:
Servlet一般应用在后台充当服务器进行对客户端请求的操作处理,然而也可以把他做成前端可展示的页面——jsp。jsp其实就是一种Servlet,然而,在学习jsp和Servlet过程中,我们一般推荐先学习Servlet,这样子在弄明白什么是客户端什么是服务器之后,再学习jsp就轻松许多了。