Servlet 全称是 Server Applet(服务端小程序),是特殊的 Java 类,遵循 Servlet 规范进行编写,没有 main 方法,运行于服务端,创建和销毁都是由 Servlet 容器来管理。
Tomcat,Jetty 都是 Servlet 容器,Tomcat 也是一个 web 服务器。
Servlet 程序处理流程:
1. 客户端发送 Http 请求,到达 Tomcat 内置服务器;
2.Tomcat 内置服务器然后将请求发送到 Servlet 容器 (Servlet Container);
3.Servlet 容器接受到请求后会加载 Servlet,产生 Servlet 实例后,会向其传送表示请求和响应的对象,即为:
HttpServletRequest 和 HttpServletRequest 对象,然后 Servlet 实例利用请求对象获得客户端的请求信息并处理;
4. 该 Servlet 处理完毕以后,有可能会将请求转发给其他 Servlet 继续进行处理;
5. 全部处理完毕以后,处理结果通过响应对象发送回客户端浏览器。
下面建立一个简单的 Servlet 实例,来说明这些功能,在浏览器页面输出 Hello Servlet 字符串:
- package com.nofaker.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class HelloServlet extends HttpServlet {
- /** * */
- private static final long serialVersionUID = 1L;@Overridepublic void init() throws ServletException {
- System.out.println("init without parameters");
- super.init();
- }@Overridepublic void init(ServletConfig config) throws ServletException {
- System.out.println("init with parameters");
- super.init(config);
- }
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
- IOException {
- System.out.println("Service");
- PrintWriter pw = resp.getWriter();
- pw.println("Hello World!");
- pw.close();
- }@Overridepublic void destroy() {
- System.out.println("Destroy");
- super.destroy();
- }
- }
通过这个程序,说明 Servlet 执行流程:
当 Servlet 并装载并实例化以后,容器会调用 init 方法,只有当 init 方法成功执行以后 Servlet 才会处于服务状态,接受客户端请求并进行处理,在整个 Servlet 生命周期中,init 方法只会执行一次,当 Servlet 执行完初始化操作以后,就会调用 service 方法对客户端的请求进行处理,当 servlet 不再使用,容器销毁 servlet 实例的时候,会调用 destroy 方法,这个方法在整个 servlet 的生命周期中也只被调用一次。
注意,init 方法有无参数和有参数两种,通过分析源代码可以知道,有参数的会调用无参数的 init 方法,
所以推荐重写无参数 init 方法,这样可以避免使用 super 构造函数。
下面补充 web.xml 文件的内容,使得这个类可以被使用:
- HelloServlet com.nofaker.servlet.HelloServlet HelloServlet /Hello
其中:servlet-mapping 用于映射 servlet 对外访问的路径,url-pattern 用来指定 servlet 对外访问的路径,注意着两个属性通过 servlet-name 配对。
启动 Tomcat,在 Tomcat 目录下访问 Hello 即可获得:
下面我们再介绍一下 Servlet 比较重要的接口和类:
javax.servlet 包:
servlet 接口声明了所有 servlet 必须实现的方法
ServletRequest 接口声明了一些用于获取客户端请求信息的方法
ServletResponse 接口声明了一些用于向客户端浏览器发送响应的方法
ServletConfig 接口声明了一些用于获取配置信息的方法
ServletContent 接口声明了一些用于获取 Servlet 容器信息的方法
GenericServlet 是一个抽象类,定义了一个通用的,独立于底层协议的一般性的 servlet
ServletInputStream 类用于从客户端读取二进制数据
ServletOutputStream 类用于向客户端发送二进制数据
javax.servlet.http 包:
HttpServletRequest 接口为 HttpServlet 提供请求信息
HttpServletResponse 接口为 Http 发送响应信息
HttpSeesion 接口用于标识客户端,并存储客户端有关信息
HttpServlet 继承自 GenericServlet 类,用于创建基于 Http 协议的 Servlet
Cookie 类用于存储 Servlet 发送给客户端的信息
javax.servlet.annotation:Servlet 的一些注解
javax.servlet.descriptor:只有三个接口主要用于获取 JSP 或者标签库的配置信息
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: