zoukankan      html  css  js  c++  java
  • 客户端请求、服务器响应及其HTTP状态码

    一JSP客户端请求

           当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信

    息头的一部分来传送的。我们可以查阅HTTP协议来获得更多的信息。

           下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息:

           

           (1)HttpServletRequest类

           request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个页面时,JSP引擎就会产

    生一个新的对象来代表这个请求。

           request对象提供了一系列方法来获取HTTP信息头,包括表单数据,cookies,HTTP方法等等。

           接下来将会介绍一些在JSP编程中常用的获取HTTP信息头的方法。详细内容请见下表:

           

           

           

           (2)HTTP信息头示例

           在下面的这个例子中,我们会使用HttpServletRequest类的getHeaderNames()方法来读取HTTP信息头。这个

    方法以枚举的形式返回当前HTTP请求的头信息。

           获取Enumeration对象后,用标准的方式来遍历Enumeration对象,用hasMoreElements()方法来确定什么时候

    停止,用nextElement()方法来获得每个参数的名字。

           main.jsp源代码为:

    <%@page import="java.util.Enumeration"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>HTTP</title>
    </head>
    <body>
        <h1>HTTP头部请求实例</h1>
        <hr>
        <table width="100%" border="1" align="center">
    	<tr bgcolor="#949494">
    		<th>Header Name</th>
    		<th>Header Value(s)</th>
    	</tr>
    	<%
    		Enumeration headerNames = request.getHeaderNames();
    		while (headerNames.hasMoreElements()) {
    			String paramName = (String) headerNames.nextElement();
    			out.print("<tr><td>" + paramName + "</td>
    ");
    			String paramValue = request.getHeader(paramName);
    			out.println("<td> " + paramValue + "</td></tr>
    ");
    		}
    	%>
        </table>
    </body>
    </html>

           访问main.jsp,将会得到以下结果:

       

           二JSP服务器响应

           response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客

    户端发送数据,如Cookie、HTTP文件头信息等。

           一个典型的响应看起来就像下面这样:

    HTTP/1.1 200 OK
    Content-Type: text/html
    Header2: ...
    ...
    HeaderN: ...
      (空行)
    <!doctype ...>
    <html>
    <head>...</head>
    <body>
    ...
    </body>
    </html>

           状态行包含HTTP版本信息,比如HTTP/1.1,一个状态码,比如200,还有一个非常短的信息对应着状态码,比

    如OK。

           下表摘要出了HTTP1.1响应头中最有用的部分,在网络编程中您将会经常见到它们:

           

           (1)HttpServletResponse类

           response对象是 javax.servlet.http.HttpServletResponse类的一个实例。就像服务器会创建request对象一样,

    它也会创建一个客户端响应。

           response对象定义了处理创建HTTP信息头的接口。通过使用这个对象,开发者们可以添加新的cookie或时间

    戳,还有HTTP状态码等等。

          下表列出了用来设置HTTP响应头的方法,这些方法由HttpServletResponse类提供: 

          

          

           (2)HTTP响应头程序示例

           接下来的例子使用setIntHeader()方法和setRefreshHeader()方法来模拟一个数字时钟:

           main1.jsp源代码:

    <%@page import="java.util.GregorianCalendar"%>
    <%@page import="java.util.Calendar"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>HTTP</title>
    </head>
    <body>
        <h1>自动刷新实例</h1>
        <%
    	//设置每隔5秒自动刷新
    	response.setIntHeader("Refresh", 5);
    	//获取当前时间
    	Calendar calendar = new GregorianCalendar();
    	String am_pm;
    	int hour = calendar.get(Calendar.HOUR);
    	int minute = calendar.get(Calendar.MINUTE);
    	int second = calendar.get(Calendar.SECOND);
    	if (calendar.get(Calendar.AM_PM) == 0){}
    		am_pm = "AM";
    	else
    		am_pm = "PM";
    	String CT = hour + ":" + minute + ":" + second + " " + am_pm;
    	out.println("当前时间: " + CT + "
    ");
    	%>
    </body>
    </html>

           将以上代码保存为main1.jsp,然后通过浏览器访问它。它将会每隔5秒显示一下系统当前时间。      

           我们可以看下以下Gif演示图:

           

           三HTTP状态码

           HTTP请求与HTTP响应的格式相近,都有着如下结构:

           1)以状态行+CRLF(回车换行)开始

           2)零行或多行头模块+CRLF

           3)一个空行,比如CRLF

           4)可选的消息体比如文件,查询数据,查询输出

           举例来说,一个服务器响应头看起来就像下面这样:

    HTTP/1.1 200 OK
    Content-Type: text/html
    Header2: ...
    ...
    HeaderN: ...
      (Blank Line)
    <!doctype ...>
    <html>
    <head>...</head>
    <body>
    ...
    </body>
    </html>

           状态行包含HTTP版本,一个状态码,和状态码相对应的短消息。

           下表列出了可能会从服务器返回的HTTP状态码和与之关联的消息:

           

           

           

           (1)设置HTTP状态码的方法

          下表列出了HttpServletResponse类中用来设置状态码的方法:

          

           (2)HTTP状态码程序示例

           接下来的例子将会发送407错误码给浏览器,然后浏览器将会告诉您"Need authentication!!!"。

           main2.jsp源代码:

       

           访问以上JSP页面,将会得到以下结果:

  • 相关阅读:
    codeforces C. Fixing Typos 解题报告
    codeforces B. The Fibonacci Segment 解题报告
    codeforces B. Color the Fence 解题报告
    codeforces B. Petya and Staircases 解题报告
    codeforces A. Sereja and Bottles 解题报告
    codeforces B. Levko and Permutation 解题报告
    codeforces B.Fence 解题报告
    tmp
    API 设计 POSIX File API
    分布式跟踪的一个流行标准是OpenTracing API,该标准的一个流行实现是Jaeger项目。
  • 原文地址:https://www.cnblogs.com/huaxingtianxia/p/6244786.html
Copyright © 2011-2022 走看看