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页面,将会得到以下结果:

  • 相关阅读:
    【贪心+前缀】C. Fountains
    优雅降级和渐进增强
    px和em
    src与href
    css 浮动
    CSS权重及样式优先级问题
    css样式初始化
    品字布局设计
    CSS3新特性
    inline-block的简单理解
  • 原文地址:https://www.cnblogs.com/huaxingtianxia/p/6244786.html
Copyright © 2011-2022 走看看