Servlet的客户端请求

以下内容引用自http://wiki.jikexueyuan.com/project/servlet/client-request.html

当浏览器请求网页时,它会向Web服务器发送大量信息,这些信息不能被直接读取,因为这些信息是作为HTTP请求头的一部分行进的。

以下是来自浏览器端的重要的头信息,会在Web编程中频繁的使用:

头信息 描述
Accept 这个头信息指定浏览器或其他客户端可以处理的MIME类型。值image/png或image/jpeg是最常见的两种可能值。
Accept-Charset 这个头信息指定浏览器可以用来显示信息的字符集。例如ISO-8859-1。
Accept-Encoding 这个头信息指定浏览器知道如何处理的编码类型。值gzip或compress是最常见的两种可能值。
Accept-Language 这个头信息指定客户端的首选语言,在这种情况下,Servlet会产生多种语言的结果。例如,en、en-us、ru 等。
Authorization 这个头信息用于客户端在访问受密码保护的网页时识别自己的身份。
Connection 这个头信息指示客户端是否可以处理持久HTTP连接。持久连接允许客户端或其他浏览器通过单个请求来检索多个文件。值Keep-Alive意味着使用了持续连接。
Content-Length 这个头信息只适用于POST请求,并给出POST数据的大小(以字节为单位)。
Cookie 这个头信息把之前发送到浏览器的Cookies返回到服务器。
Host 这个头信息指定原始的URL中的主机和端口。
If-Modified-Since 这个头信息表示只有当页面在指定的日期后已更改时,客户端想要的页面。如果没有新的结果可以使用,服务器会发送一个304代码,表示Not Modified头信息。
If-Unmodified-Since 这个头信息是If-Modified-Since的对立面,它指定只有当文档早于指定日期时,操作才会成功。
Referer 这个头信息指示所指向的Web页的URL。例如,如果您在网页1,点击一个链接到网页2,当浏览器请求网页2时,网页1的URL就会包含在Referer头信息中。
User-Agent 这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

一、读取HTTP头信息的方法

下述方法可以用于读取Servlet程序中的HTTP头信息。通过HttpServletRequest对象这些方法是可用的。

方法  描述

Cookie[] getCookies()


返回一个数组,包含客户端发送该请求的所有的Cookie 对象。


Enumeration getAttributeNames()


返回一个枚举,包含提供给该请求可用的属性名称。


Enumeration getHeaderNames()


返回一个枚举,包含在该请求中包含的所有的头名。


Enumeration getParameterNames()


返回一个String对象的枚举,包含在该请求中包含的参数的名称。


HttpSession getSession()


返回与该请求关联的当前Session会话,或者如果请求没有Session会话,则创建一个。


HttpSession getSession(boolean create)


返回与该请求关联的当前HttpSession,或者如果没有当前会话,且创建是真的,则返回一个新的Session会话。


Locale getLocale()


基于Accept-Language头,返回客户端接受内容的首选的区域设置。


Object getAttribute(String name)


以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回null。


ServletInputStream getInputStream()


使用ServletInputStream,以二进制数据形式检索请求的主体。


String getAuthType()


返回用于保护Servlet的身份验证方案的名称,例如,“BASIC”或“SSL”,如果JSP没有受到保护则返回null。


String getCharacterEncoding()


返回请求主体中使用的字符编码的名称。


String getContentType()


返回请求主体的MIME类型,如果不知道类型则返回null。


String getContextPath()


返回指示请求上下文的请求URI部分。


String getHeader(String name)


以字符串形式返回指定的请求头的值。


String getMethod()


返回请求的HTTP方法的名称,例如,GET、POST或PUT。


String getParameter(String name)


以字符串形式返回请求参数的值,或者如果参数不存在则返回null。


String getPathInfo()


当请求发出时,返回与客户端发送的URL相关的任何额外的路径信息。


String getProtocol()


返回请求协议的名称和版本。


String getQueryString()


返回包含在路径后的请求URL中的查询字符串。


String getRemoteAddr()


返回发送请求的客户端的互联网协议(IP)地址。


String getRemoteHost()


返回发送请求的客户端的完全限定名称。


String getRemoteUser()


如果用户已通过身份验证,则返回发出请求的登录用户,或者如果用户未通过身份验证,则返回null。


String getRequestURI()


从协议名称直到HTTP请求的第一行的查询字符串中,返回该请求的URL的一部分。


String getRequestedSessionId()


返回由客户端指定的Session会话ID。


String getServletPath()


返回调用JSP的请求的URL的一部分。


String[] getParameterValues(String name)


返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回null。


boolean isSecure()


返回一个布尔值,指示请求是否使用安全通道,如HTTPS。


int getContentLength()


以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回-1。


int getIntHeader(String name)


返回指定的请求头的值为一个int值。


int getServerPort()


返回接收到这个请求的端口号。

二、HTTP头信息请求实例:

下述例子使用了HttpServletRequest的getHeaderNames()方法来读取HTTP头信息。该方法返回了一个枚举,包含与当前的HTTP请求相关的头信息。

一旦得到一个枚举,可以以标准方式循环这个枚举,使用hasMoreElements()方法来确定何时停止循环,使用nextElement()方法来获取每个参数的名称。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
  // Method to handle GET method request.
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      String title = "HTTP Header Request Example";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
      out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n"+
        "<body bgcolor=\"#f0f0f0\">\n" +
        "<h1 align=\"center\">" + title + "</h1>\n" +
        "<table width=\"100%\" border=\"1\" align=\"center\">\n" +
        "<tr bgcolor=\"#949494\">\n" +
        "<th>Header Name</th><th>Header Value(s)</th>\n"+
        "</tr>\n");
      Enumeration headerNames = request.getHeaderNames();
      while(headerNames.hasMoreElements()) {
         String paramName = (String)headerNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n");
         String paramValue = request.getHeader(paramName);
         out.println("<td> " + paramValue + "</td></tr>\n");
      }
      out.println("</table>\n</body></html>");
  }
  // Method to handle POST method request.
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     doGet(request, response);
  }
}

配置web.xml:

      <servlet>
        <servlet-name>DisplayHeader</servlet-name>
        <servlet-class>com.jsoft.testservletbasics.DisplayHeader</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DisplayHeader</servlet-name>
        <url-pattern>/DisplayHeader</url-pattern>
    </servlet-mapping>

现在,调用上述Servlet会产生如下所示的结果:

测试工程:https://github.com/easonjim/5_java_example/tree/master/servletbasics/test3

时间: 2024-10-14 13:33:35

Servlet的客户端请求的相关文章

JSP基础知识?客户端请求与服务端响应(三)

JSP客户端请求 浏览器请求服务器端,信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: Accept:指定浏览器或其他客户端可以处理的MIME类型.它的值通常为 image/png 或 image/jpeg Accept-Charset:指定浏览器要使用的字符集.比如 ISO-8859-1 Accept-Encoding:指定编码类型.它的值通常为 gzip 或compress Accept-Language:指定客户端首选语言,servlet会优先返回以当前语言构成的结果集,如果

Servlet获得Http请求,GET/POST

Servlet获得Http请求 Http请求信息格式 请求行(方法提交方式,URI,Http协议版本) GET方式提交:URI会包含查询字符串 POST方式提交:URI不会包含查询字符串 请求头 Host:IP地址:端口号 User-Agent:用户网页浏览器类型 Accept:请求提交的文件包含类型 Keep-Alive:保持连接时间 空行(空格) 消息体 POST提交方式特有,包含查询字符串 get与post的区别 提交数据类型 get:文本信息 post:文本信息,二进制文件 提交数据长度

JSP 客户端请求

当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的.您可以查阅HTTP协议来获得更多的信息. 下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: 信息 描述 Accept 指定浏览器或其他客户端可以处理的MIME类型.它的值通常为 image/png 或 image/jpeg Accept-Charset 指定浏览器要使用的字符集.比如 ISO-8859-1 Accept-Encoding 指定编

客户端请求、服务器响应及其HTTP状态码

一JSP客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信 息头的一部分来传送的.我们可以查阅HTTP协议来获得更多的信息. 下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: (1)HttpServletRequest类 request对象是javax.servlet.http.HttpServletRequest类的实例.每当客户端请求一个页面时,JSP引擎就会产 生一个新的对象来代表这个请求. re

Servlet中的请求转发和重定向

跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外一个Servlet处理,是内部之间的转发.而重定向是告诉客户端去别的地方请求资源.举个例子,某人需要去找人事部门打印收入证明,而收入证明需要去财务部盖章.跳转的处理方式是:人事部门的人告诉你,你等一下,我去把收入证明打印出来,然后我再去找财务部盖章,所有资料准备好后,我再全部交给你.重定向的处理方式

Java Web学习(1): 客户端请求、服务器响应及其HTTP状态码

一JSP客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信 息头的一部分来传送的.我们可以查阅HTTP协议来获得更多的信息. 下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: (1)HttpServletRequest类 request对象是javax.servlet.http.HttpServletRequest类的实例.每当客户端请求一个页面时,JSP引擎就会产 生一个新的对象来代表这个请求. re

Java Web学习(15): 客户端请求、服务器响应及其HTTP状态码

一JSP客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信 息头的一部分来传送的.我们可以查阅HTTP协议来获得更多的信息. 下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: (1)HttpServletRequest类 request对象是javax.servlet.http.HttpServletRequest类的实例.每当客户端请求一个页面时,JSP引擎就会产 生一个新的对象来代表这个请求. re

Android中客户端请求服务器端的方式讲解(一)附源码

Android中客户端请求服务器端的两种方式:Post方式和Get方式 在这里不直接赘述了,直接上源码如下: (1).Post的方式: /** * Post的请求方式 * * @param model * 请求序号 * @param paramList * 客户端请求的数据参数列表 * @return */ public JSONObject doPost(int model, List<NameValuePair> paramList) { try { // 客户端向服务器发送请求的数据 L

ajax客户端请求与服务端响应浅谈

AJAX,即Asynchronous Javascript And XML,AJAX本质是在HTTP协议的基础上以异步的方式与服务器进行通信. 所谓的异步,是指某段程序执行不会阻塞其他程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序.从而提升整体执行效率. 1:客户端请求js内置http请求对象 XMLHttpRequest; a.请求行 xhr.open() 发起请求,可以是get.post方式 get和post请求方式的差异 1.GET没有请求主体,使用xhr.send(null