开发者社区> 无信不立> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 一JSP客户端请求        当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信 息头的一部分来传送的。我们可以查阅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>\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秒显示一下系统当前时间。      

 

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

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Web Server 设置缓存响应字段的一些推荐方案
Web Server 设置缓存响应字段的一些推荐方案
0 0
【Python】简单Web框架从零开始(三):Http响应格式
从上图可以看到响应客户端请求的协议格式与客户端请求的格式很类似,除了首行稍微不一样外。首行称为状态行,其格式为:[HTTP协议版本][空格][状态码][空格][消息][\r\n]。其中状态码是一组三位数组成的数字代码,具体介绍可以百度百科,常见的有200,400,404等等。跟在状态码后面的响应消息是与状态码对应的文本描述。 实体头部数据格式完全与请求的头部格式一致,里面包含了服务器相关的信息,以及支持哪些功能和特殊的内容。
0 0
使用Sanic开发快速异步响应的Web程序
Sanic是一个类似Flask、仅仅支持Python 3.5+ 版本的web 服务器,旨在运行速度更快。在类似Flask的基础上,Sanic支持异步请求处理,也就是说,你可以使用Python 3.5 中全新而又亮眼的 async/await 语法,使你的代码非阻塞且快速。
1267 0
python的Web框架,Django框架中的请求与响应
python的Web框架,Django框架中的请求与响应 请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程  视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API,下面我们来列出这个对象的方法。
1038 0
ASP.NET Web API 记录请求响应数据到日志的一个方法
原文:ASP.NET Web API 记录请求响应数据到日志的一个方法 原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个方法 REST风格的服务架构已经成为越来越多人的选择,之前我用过WCF来实现REST服务,WCF是一个很强大的框架,干这点小事有点太沉重的感觉。
1069 0
[网络基础] Web请求与响应
Web请求过程 浏览器得到主机域名,举例:www.baidu.com 浏览器将域名解析成IP地址 浏览器缓存→系统缓存→路由器缓存→ISP DNS缓存→从根域名服务器递归搜索 浏览器用ip和随机端口号(默认80)连接服务器 浏览器与服务器建立TCP连接(IP:80) 发起 GET 请求 服务器收到请求,发送响应 浏览器获取服务器返回的数据(HTML代码),进行解析和显示 释放TCP连接(不一定) HTTP报文 HTTP报文分为请求报文和响应报文两类。
1066 0
+关注
无信不立
人无信不立,业不勤不精
文章
问答
文章排行榜
最热
最新
相关电子书
更多
边缘安全,让Web加速有保障
立即下载
使用CNFS搭建弹性Web服务
立即下载
WEB框架0day漏洞的发掘及分析经验分享
立即下载