各类servlet

来源:互联网 发布:手机淘宝怎么分类宝贝 编辑:程序博客网 时间:2024/04/28 13:29

(1)servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

要实现此接口,可以编写一个扩展 javax.servlet.GenericServlet 的一般 servlet,或者编写一个扩展 javax.servlet.http.HttpServlet 的 HTTP servlet。
此接口还提供了 getServletConfig 方法和 getServletInfo 方法,servlet 可使用前一种方法获得任何启动信息,而后一种方法允许 servlet 返回有关其自身的基本信息,比如作者、版本和版权
(2)ServletConfig servlet 容器使用的 servlet 配置对象,该对象在初始化期间将信息传递给 servlet。

(3)GenericServlet 实现 Servlet 和 ServletConfig 接口。servlet 可以直接扩展 GenericServlet,尽管扩展特定于协议的子类(比如 HttpServlet)更为常见。

GenericServlet 使编写 servlet 变得更容易。它提供生命周期方法 init 和 destroy 的简单版本,以及 ServletConfig 接口中的方法的简单版本。GenericServlet 还实现 log 方法,在 ServletContext 接口中对此进行了声明。
getInitParameter(String name)
返回包含指定初始化参数的值的 String,如果参数不存在,则返回 null。

(4)HttpServlet
提供将要被子类化以创建适用于 Web 站点的 HTTP servlet 的抽象类。HttpServlet 的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
doGet,如果 servlet 支持 HTTP GET 请求
doPost,用于 HTTP POST 请求
getLastModified(HttpServletRequest req)
zh_cn
返回上次修改 HttpServletRequest 对象的时间,该时间是自格林威治标准时间 1970 年 1 月 1 日午夜起经过的毫秒数。如果该时间是未知的,则此方法返回一个负数(默认值)。
(5)ServletRequest
定义将客户端请求信息提供给某个 servlet 的对象。servlet 容器创建 ServletRequest 对象,并将该对象作为参数传递给该 servlet 的 service 方法。
ServletRequest 对象提供包括参数名称、参数值、属性和输入流的数据。扩展 ServletRequest 的接口可提供其他特定于协议的数据,例如 javax.servlet.http.HttpServletRequest 提供的 HTTP 数据。
(6)ServletResponse
要发送 MIME 正文响应中的二进制数据,请使用 #getOutputStream 返回的 ServletOutputStream。要发送字符数据,请使用 #getWriter 返回的 PrintWriter 对象。要混合二进制数据和文本数据,例如要创建 multipart 响应,请使用 ServletOutputStream 并手动管理字符部分。
可使用 #setCharacterEncoding 和 #setContentType 显式指定 MIME 正文响应的 charset,或使用 #setLocale 方法隐式指定它。显式指定优先于隐式指定。如果未指定 charset,则将使用 ISO-8859-1。setCharacterEncoding、setContentType 或 setLocale 方法必须在调用 getWriter 之前,并且必须在提交采用要使用的字符编码的响应之前调用。
(7)HttpServletResponse
扩展 ServletResponse 接口以提供特定于 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。
servlet 容器创建 HttpServletResponse 对象,并将该对象作为参数传递给 servlet 的 service 方法(doGet、doPost,等等)
addCookie(Cookie cookie)
将指定 cookie 添加到响应。可多次调用此方法设置一个以上的 cookie。 cookie zh_cn
要返回给客户端的 Cookie
(8)HttpServletRequest
扩展 javax.servlet.ServletRequest 接口,为 HTTP servlet 提供请求信息。
servlet 容器创建 HttpServletRequest 对象,并将该对象作为参数传递给 servlet 的 service 方法(doGet、doPost,等等)。
getSession(boolean create)
返回与此请求关联的当前 HttpSession,如果没有当前会话并且 create 为 true,则返回一个新会话。
要确保会话得到适当维护,必须在提交响应之前调用此方法。如果容器正使用 cookie 维护会话完整性,并被要求在提交响应时创建新会话,则抛出 IllegalStateException。
(9)HttpSessions
提供一种方式,跨多个页面请求或对 Web 站点的多次访问标识用户并存储有关该用户的信息。
servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。服务器能够以多种方式维护会话,比如使用 cookie 或重写 URL
查看和操作有关某个会话的信息,比如会话标识符、创建时间和最后一次访问时间
将对象绑定到会话,允许跨多个用户连接保留用户信息
当应用程序将对象存储到会话中或从会话中移除对象时,该会话将检查对象是否实现了 HttpSessionBindingListener。如果实现了,则 servlet 将通知该对象它已经被绑定到会话,或者已从会话中取消对它的绑定。通知是在绑定方法完成后发送的。对于无效或过期的会话,通知是在会话已经无效或过期之后发送的。
servlet 应该能够处理客户端选择不加入会话的情况,比如故意关闭 cookie 时。在客户端加入会话前,isNew 一直返回 true。如果客户端选择不加入会话,则 getSession 将对每个请求返回一个不同的会话,并且 isNew 将总是返回 true。
(10)HttpSessionBindingListener
Implements: java.util.EventListener
使对象在被绑定到会话或从会话中取消对它的绑定时得到通知。该对象通过 HttpSessionBindingEvent 对象得到通知。这可能是 servlet 编程人员显式从会话中取消绑定某个属性的结果(由于会话无效,或者由于会话超时)。
HttpSessionBindingEvent Extends: java.util.EventObject > HttpSessionEvent
这种类型的事件将发送到绑定到会话或从会话中取消绑定时实现 HttpSessionBindingListener 的对象,或者发送到绑定、取消绑定或替换会话中的任何属性时已在部署描述符中配置好的 HttpSessionAttributeListener
HttpSessionAttributeListener 为了获取此 Web 应用程序内会话属性列表更改的通知,可实现此侦听器接口
并实现了属性的添加删除和替换功能。
(11)HttpSessionContext
可以获得Session id 和getSession 方法。
(12)Cookie
创建一个 cookie,cookie 是 servlet 发送到 Web 浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。
一个 cookie 拥有一个名称、一个值和一些可选属性,比如注释、路径和域限定符、最大生存时间和版本号。一些 Web 浏览器在处理可选属性方面存在 bug,因此有节制地使用这些属性可提高 servlet 的互操作性。
Cookie(String name, String value)
构造带指定名称和值的 cookie
public Cookie(String name, String value)
 {
  maxAge = -1;
  version = 0;
  if (!isToken(name) || name.equalsIgnoreCase("Comment") || name.equalsIgnoreCase("Discard") || name.equalsIgnoreCase("Domain") || name.equalsIgnoreCase("Expires") || name.equalsIgnoreCase("Max-Age") || name.equalsIgnoreCase("Path") || name.equalsIgnoreCase("Secure") || name.equalsIgnoreCase("Version") || name.startsWith("$"))
  {
   String errMsg = lStrings.getString("err.cookie_name_is_token");
   Object errArgs[] = new Object[1];
   errArgs[0] = name;
   errMsg = MessageFormat.format(errMsg, errArgs);
   throw new IllegalArgumentException(errMsg);
  } else
  {
   this.name = name;
   this.value = value;
   return;
  }
 }
 private boolean isToken(String value)
 {
  int len = value.length();
  for (int i = 0; i < len; i++)
  {
   char c = value.charAt(i);
   if (c < ' ' || c >= '/177' || ",; ".indexOf(c) != -1)
    return false;
  }

  return true;
 }
 (13)HttpUtils
 parsePostData(int len, ServletInputStream in)
解析来自 HTML 表单的客户端使用 HTTP POST 方法和 application/x-www-form-urlencoded MIME 类型发送到服务器的数据。
通过 POST 方法发送的数据包含键-值对。在具有不同值的 POST 数据中键可以出现多次。但是,在哈希表中键只能出现一次,其值是包含 POST 方法发送的多个值的字符串数组。
parseQueryString(String s)
解析从客户端传递到服务器的查询字符串,并使用键-值对构建一个 HashTable 对象。查询字符串应该采用 GET 或 POST 方法打包的字符串形式,也就是说,应该是键=值 形式的键-值对,每个对与下一个对之间用 & 字符隔开。
getRequestURL(HttpServletRequest req)
使用 HttpServletRequest 对象中的信息重新构造客户端用于发出请求的 URL。返回的 URL 包含一个协议、服务器名称、端口号、服务器路径,但是不包含查询字符串参数。
ServletInputStream
提供用于读取客户端请求中的二进制数据的输入流,包括一个高效的 readLine 方法用于一次读取一行数据。使用一些协议(比如 HTTP POST 和 PUT),ServletInputStream 对象可用于读取从客户端发送的数据。
ServletInputStream 对象通常是通过 ServletRequest#getInputStream 方法获取的。
readLine(byte[] b, int off, int len) throws java.io.IOException
zh_cn
以一次一行的形式读取输入流。从某个偏移量开始将字节读入数组,直到读取特定数量的字节,或者到达换行符为止,该字符也将读入数组。
(14)HttpServlet()中的doGet(), doPost();
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException
 {
  String protocol = req.getProtocol();
  String msg = lStrings.getString("http.method_post_not_supported");
  if (protocol.endsWith("1.1"))
   resp.sendError(405, msg);
  else
   resp.sendError(400, msg);
 }
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException
 {
  String protocol = req.getProtocol();
  String msg = lStrings.getString("http.method_post_not_supported");
  if (protocol.endsWith("1.1"))
   resp.sendError(405, msg);
  else
   resp.sendError(400, msg);
 }
(15)ServletRequestWrapper
提供 ServletRequest 接口的便捷实现,希望将请求适配到 Servlet 的开发人员可以子类化该接口。此类实现 Wrapper 或 Decorator 模式。默认情况下,方法通过包装的请求对象调用。
(16)HttpSessionEvent
public class HttpSessionEvent extends EventObject
{

 public HttpSessionEvent(HttpSession source)
 {
  super(source);
 }

 public HttpSession getSession()
 {
  return (HttpSession)super.getSource();
 }
}
public class EventObject extends Objectimplements Serializable
所有事件状态对象都将从其派生的根类。 包含了Object getSource() 最初发生 Event 的对象。
 String toString() 返回此 EventObject 的 String 表示形式。这两个方法。
(17)HttpSessionBindingEvent
这种类型的事件将发送到绑定到会话或从会话中取消绑定时实现 HttpSessionBindingListener 的对象,或者发送到绑定、取消绑定或替换会话中的任何属性时已在部署描述符中配置好的 HttpSessionAttributeListener。
会话通过调用 HttpSession.setAttribute 绑定对象,通过调用 HttpSession.removeAttribute 取消绑定

(18)Filter
过滤器是执行过滤任务的对象,这些任务是针对对某一资源(servlet 或静态内容)的请求或来自某一资源的响应执行的,抑或同时针对这
Filter 用 doFilter 方法执行过滤。每个 Filter 都有对 FilterConfig 对象的访问权,可从该对象获得其初始化参数以及对它可以使用的 ServletContext 的引用,以便为过滤任务加载所需的资源。
doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException
每次由于对链末尾的某个资源的客户端请求而通过链传递请求/响应对时,容器都会调用 Filter 的 doFilter 方法。传入此方法的 FilterChain 允许 Filter 将请求和响应传递到链中的下一个实体。
FilterConfig 
servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器。
getInitParameter(String name)
返回包含指定初始化参数的值的 String,如果参数不存在,则返回 null。
(19)RequestDispatcher
定义接收来自客户端的请求并将它们发送到服务器上的任何资源(比如 servlet、HTML 文件或 JSP 文件)的对象。servlet 容器可创建 RequestDispatcher 对象,该对象被用作包装位于特定路径上的服务器资源或通过特定名称给定的服务器资源的包装器。
对于通过 getRequestDispatcher() 获得的 RequestDispatcher,ServletRequest 对象使其路径元素和参数进行调整以匹配目标资源的路径。
在将响应提交到客户端之前(在刷新响应正文输出之前),应该调用 forward。如果已经提交了响应,则此方法抛出 IllegalStateException。在转发之前,自动清除响应缓冲区中未提交的输出。

 

 

 

原创粉丝点击