一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>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</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 + "\n");
%>
</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页面,将会得到以下结果:

客户端请求、服务器响应及其HTTP状态码的更多相关文章

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

    一JSP客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信 息头的一部分来传送的.我们可以查阅HTTP协议来获得更多的信息. 下表列出了浏 ...

  2. 19. HTTP协议二:HTTP请求与响应、常见状态码

    HTTP请求与响应 HTTP请求 HTTP请求是指从客户端到服务器端的请求消息.HTTP请求主要由三部分构成,请求行.请求头(headers).body(请求数据). 上图是笔者用Charles抓包工 ...

  3. HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结

    HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ...

  4. php笔记06:http响应中的状态码

    首先我们看一个360浏览器中使用开发截图如下: 上面的Status Code:  OK (这个就是状态码) 1.状态码主要用于服务器对请求的处理结果,它是一个三位的十进制数.响应状态码分为5类,如下所 ...

  5. Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码

    请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ...

  6. 【转载】HTTP 响应头与状态码

    原文地址:https://segmentfault.com/a/1190000006689786 HTTP Response Header 响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描 ...

  7. 接口测试——HttpClient工具的https请求、代理设置、请求头设置、获取状态码和响应头

    目录 https请求 代理设置 请求头设置 获取状态码 接收响应头 https请求 https协议(Secure Hypertext Transfer Protocol) : 安全超文本传输协议, H ...

  8. HTTP请求响应报文 - 相关状态码 - GET_POST请求方法

    HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET ...

  9. 服务器返回的http状态码

    状态码 响应类别 原因短语 1XX 信息性状态码(Informational) 服务器正在处理请求 2XX 成功状态码(Success) 请求已正常处理完毕 3XX 重定向状态码(Redirectio ...

随机推荐

  1. Android图片处理-相机、相处简单调用

    安卓开发中,常常需要使用到手机相机拍照.或者相册上传头像等等.通过使用Intent,我们很方便地获得相机.相册里面的图片: 1.相机调用,通过设置File文件路径和文件名,可以将拍照得到的图片保存下来 ...

  2. RTL8710 ROM 符号表 函数,常量,变量

    函数 Name Address Ordinal ---- ------- ------- __vectors_table Reset_Handler NMI_Handler HardFault_Han ...

  3. Cracking Story - How I Cracked Over 122 Million SHA1 and MD5 Hashed Passwords

    This is the story about how I cracked 122 million* password hashes with John the Ripper and oclHashc ...

  4. eclipse,myeclipse开发环境下,maven远程部署到tomcat7服务器(图文)

    有的人想在eclipse写java web 项目,通过maven也是一种实现的方法,可以实现java web 项目打包成war,发布到tomcat. 在pom.xml文件的build增加下面的代码,相 ...

  5. [SRS流媒体]RTMP/HLS 直播服务器simple-rtmp-server安装

    一个采用MIT协议授权的国产的简单的RTMP/HLS 直播服务器,其核心的价值理念在于简单高效. 使用方法: tep 1: build srs tar xf simple-rtmp-server-*. ...

  6. 使用LS2J技术在LotusScript中使用Java

    我们可以使用LS2J技术在LotusScript中来调用Java类,下面举例说明: 1.       首先需要在代理的 (Options)部分,添加如下: Uselsx "*javacon& ...

  7. 2014中国软件开发者调查(一):Java最受欢迎 第二语言JS使用比例最高

    2014 年 3 月 20 日到 4 月 25 日期间,CSDN 通过在线问卷渠道进行了中国软件开发者调查,本次调查问卷得到了近万名开发者踊跃支持.日前这份调查报告已经出炉,CSDN 将就调查结果连续 ...

  8. SVO实时全局光照优化(里程碑MK0):Sparse Voxel Octree based Global Illumination (SVO GI)

    完全自主实现,bloat-free.再次声明,这不是UE.U3D.CE.KlayGE! 老规矩,先贴图.后面有时间再补充描述. 1. 支持多跳间接全局光照2. 支持vxao/so.vxdiff/spe ...

  9. iOS中的webView加载HTML

    在日常开发中,我们为了效率会用到很多很多的WebView,比如在做某个明细页面的时候我们返回给你的可能是一个html字符串,我们就需要将当前字符串展示到webView上面,所以我们对HTML标签需要有 ...

  10. 解决部份机型toast不显示问题

    问题:部份机型不显示toast 解决方案: 1.自己在设置里面去允许通知,但是显然客户会说别的app都可以,so 2.自定义解决.查看toast的源码发现其附着在window上 源码下载地址:http ...