Java中Servlet技术

Servlet 是什么?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

    1、性能明显更好。
    2、Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
    3、Servlet 是独立于平台的,因为它们是用 Java 编写的。
    4、服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
    5、Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

Servlet 执行以下主要任务

    1、读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
    2、读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
    3、处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
    4、发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
    5、发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
    1、Servlet 通过调用 init () 方法进行初始化。
    2、Servlet 调用 service() 方法来处理客户端的请求。
    3、Servlet 通过调用 destroy() 方法终止(结束)。
    4、最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

Hello World 示例代码

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class HelloWorld extends HttpServlet {
 
  private String message;

  public void init() throws ServletException
  {
      // 执行必需的初始化
      message = "Hello World";
  }

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");

      // 实际的逻辑是在这里
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
 
  public void destroy()
  {
      // 什么也不做
  }
}

Servlet常用对象

Request

1    Cookie[] getCookies()
返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。
2    Enumeration getAttributeNames()
返回一个枚举,包含提供给该请求可用的属性名称。
3    Enumeration getHeaderNames()
返回一个枚举,包含在该请求中包含的所有的头名。
4    Enumeration getParameterNames()
返回一个 String 对象的枚举,包含在该请求中包含的参数的名称。
5    HttpSession getSession()
返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。
6    HttpSession getSession(boolean create)
返回与该请求关联的当前 HttpSession,或者如果没有当前会话,且创建是真的,则返回一个新的 session 会话。
7    Locale getLocale()
基于 Accept-Language 头,返回客户端接受内容的首选的区域设置。
8    Object getAttribute(String name)
以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。
9    ServletInputStream getInputStream()
使用 ServletInputStream,以二进制数据形式检索请求的主体。
10    String getAuthType()
返回用于保护 Servlet 的身份验证方案的名称,例如,"BASIC" 或 "SSL",如果JSP没有受到保护则返回 null。
11    String getCharacterEncoding()
返回请求主体中使用的字符编码的名称。
12    String getContentType()
返回请求主体的 MIME 类型,如果不知道类型则返回 null。
13    String getContextPath()
返回指示请求上下文的请求 URI 部分。
14    String getHeader(String name)
以字符串形式返回指定的请求头的值。
15    String getMethod()
返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。
16    String getParameter(String name)
以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。
17    String getPathInfo()
当请求发出时,返回与客户端发送的 URL 相关的任何额外的路径信息。
18    String getProtocol()
返回请求协议的名称和版本。
19    String getQueryString()
返回包含在路径后的请求 URL 中的查询字符串。
20    String getRemoteAddr()
返回发送请求的客户端的互联网协议(IP)地址。
21    String getRemoteHost()
返回发送请求的客户端的完全限定名称。
22    String getRemoteUser()
如果用户已通过身份验证,则返回发出请求的登录用户,或者如果用户未通过身份验证,则返回 null。
23    String getRequestURI()
从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该请求的 URL 的一部分。
24    String getRequestedSessionId()
返回由客户端指定的 session 会话 ID。
25    String getServletPath()
返回调用 JSP 的请求的 URL 的一部分。
26    String[] getParameterValues(String name)
返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。
27    boolean isSecure()
返回一个布尔值,指示请求是否使用安全通道,如 HTTPS。
28    int getContentLength()
以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。
29    int getIntHeader(String name)
返回指定的请求头的值为一个 int 值。
30    int getServerPort()
返回接收到这个请求的端口号。
31    int getParameterMap()
将参数封装成 Map 类型。

Response

1    String encodeRedirectURL(String url)
为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
2    String encodeURL(String url)
对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
3    boolean containsHeader(String name)
返回一个布尔值,指示是否已经设置已命名的响应报头。
4    boolean isCommitted()
返回一个布尔值,指示响应是否已经提交。
5    void addCookie(Cookie cookie)
把指定的 cookie 添加到响应。
6    void addDateHeader(String name, long date)
添加一个带有给定的名称和日期值的响应报头。
7    void addHeader(String name, String value)
添加一个带有给定的名称和值的响应报头。
8    void addIntHeader(String name, int value)
添加一个带有给定的名称和整数值的响应报头。
9    void flushBuffer()
强制任何在缓冲区中的内容被写入到客户端。
10    void reset()
清除缓冲区中存在的任何数据,包括状态码和头。
11    void resetBuffer()
清除响应中基础缓冲区的内容,不清除状态码和头。
12    void sendError(int sc)
使用指定的状态码发送错误响应到客户端,并清除缓冲区。
13    void sendError(int sc, String msg)
使用指定的状态发送错误响应到客户端。
14    void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。
15    void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。
16    void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
17    void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。
18    void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。
19    void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。
20    void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。
21    void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。
22    void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。
23    void setStatus(int sc)
为该响应设置状态码。

Cookie

Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。Java Servlet 显然支持 HTTP Cookie。
识别返回用户包括三个步骤:
    1、服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。
    2、浏览器将这些信息存储在本地计算机上,以备将来使用。
    3、当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。


创建一个 Cookie 对象:您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数,cookie 名称和 cookie 值都是字符串。
Cookie cookie = new Cookie("key","value");

1    public void setDomain(String pattern)
该方法设置 cookie 适用的域,例如 runoob.com。
2    public String getDomain()
该方法获取 cookie 适用的域,例如 runoob.com。
3    public void setMaxAge(int expiry)
该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
4    public int getMaxAge()
该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
5    public String getName()
该方法返回 cookie 的名称。名称在创建后不能改变。
6    public void setValue(String newValue)
该方法设置与 cookie 关联的值。
7    public String getValue()
该方法获取与 cookie 关联的值。
8    public void setPath(String uri)
该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
9    public String getPath()
该方法获取 cookie 适用的路径。
10    public void setSecure(boolean flag)
该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
11    public void setComment(String purpose)
设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
12    public String getComment()
获取 cookie 的注释,如果 cookie 没有注释则返回 null。

Session

HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录。
1    public Object getAttribute(String name)
该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
2    public Enumeration getAttributeNames()
该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。
3    public long getCreationTime()
该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
4    public String getId()
该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。
5    public long getLastAccessedTime()
该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
6    public int getMaxInactiveInterval()
该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。
7    public void invalidate()
该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
8    public boolean isNew()
如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。
9    public void removeAttribute(String name)
该方法将从该 session 会话移除指定名称的对象。
10    public void setAttribute(String name, Object value)
该方法使用指定的名称绑定一个对象到该 session 会话。
11    public void setMaxInactiveInterval(int interval)
该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

ServletContext

ServletContext即Servlet上下文对象,该对象表示当前的web应用环境信息,一个Web应用只会创建一个ServletContext对象。
1.如何得到ServletContext实例
    this.getServletContext();
2.你可以把它想象成一张表,这个和session非常相似,每一行就是一个属性:
    添加属性setAttribute(String name, Object ob);
    得到值getAttribute(String name); 返回Object
    删除属性removeAttribute(String name);
3.生命周期
ServletContext中的生命周期从创建开始,到服务器关闭而结束。

猜你喜欢

转载自blog.csdn.net/scbiaosdo/article/details/81173098
今日推荐