第一章 HTTP响应报文详解
HTTP协议:
HTTP请求报文及HttpServletRequest对象。
HTTP响应报文及HttpServletResponse对象。
1. HTTP响应报文
HTTP是基于请求和响应的协议,一次请求对应一次响应。请求和响应的数据格式都遵从HTTP的超文本传输协议。
与HTTP的请求一样,HTTP响应的数据也分为3部分:响应行 ,响应头 ,响应体 这3部分组成。所以,请求是通过浏览器将数据传送到服务器,而响应是将服务器处理的结果响应到浏览器。
2. 抓包查看响应数据
创建一个web项目,将下面的代码复制到hello.html文件中,启动项目,通过:url:http://localhost:8080/hello.html访问这个页面。使用chrome工具抓包(F12)。
【素材】hello.html静态页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF‐8">
<title>Insert title here</title>
</head>
<body>
<h2>hehe world 你好</h2>
<form action="" method="get">
用户名:<input type="text" name="username" value="jack" /> <br/>
密码:<input type="text" name="password" value="1234" /> <br/>
<input type="submit" value="get提交" />
</form>
<form action="" method="post">
用户名:<input type="text" name="username" value="jack" /> <br/>
密码:<input type="text" name="password" value="1234" /> <br/>
<input type="submit" value="post提交" />
</form>
</body>
</html>
抓取的响应报文如下图所示:
【响应行】
响应行格式:协议/版本 状态码
常见状态码 :
【响应头】
响应头也是用的键值对key:value,服务器基于响应头通知浏览器的行为。
常见响应头 :
【响应体】
响应体,就是服务器发送给浏览器的数据。当前请求的资源是hello.html,所以浏览器响应的数据是一个html页面。
总结 :
响应行:200 404 500 302 304
响应头:
refresh:定时刷新
content-type:告诉浏览器文件类型 解决中文乱码问题
location:和状态码302一起使用实现重定向功能
content-disposition: 告诉浏览器以附件形式解析 通常用于下载
第二章 HttpServletResponse对象
一切皆对象,Servlet程序接受客户端请求之后,通过HttpServletResponse对象来完成客户端的响应。
通过该对象,将数据(可以是文本数据,也可以是二进制数据) 返回给客户端。
1. HttpServletResponse对象作用
HttpServletResponse对象代表服务器响应,tomcat创建HttpServletResponse对象,并将该对象作为参数传递给servlet的service方法。
HttpServletResponse对象作用 :
通过HttpServletResponse对象提供的API,设置响应行,头,体。
2. HttpServletResponse对象常用API
2.1 响应行
setStatus(int code); 向浏览器发送状态码
常用状态码 :
2.2 响应头
setHeader(String name,String value); 设置响应头信息
// Content-Disposition 告诉浏览器以附件的形式打开这个文件
respon.setHeader("Content-Disposition","attachment;filename="+filename);
常见响应头
2.2.1处理响应乱码 :
乱码产生原因 :
服务器如果需要响应给浏览器中文数据,tomcat使用getWriter()输出字符时,对于中文需要进行编码处理,而tomcat8 默认编码是ISO-8859-1,该码表是不支持中文编码的。所以响应给浏览器,出现乱码。
乱码解决方案 :
通过response.setContentType(“text/html;charset=utf-8”);
1.设置响应的数据类型(mime-type);
2.设置响应的数据编码(utf-8);
2.2.2 重定向
重定向可以去一个servlet,也可以去一个html静态资源
注 : 开发中使用 response.sendRedirect(“otherServlet”);来实现重定向。
2.3 转发的重定向的区别
转发和重定向怎么选择
- 如果需要共享request域,必须使用转发;
- 如果需要将浏览器地址栏地址变为第二次请求的地址,必须使用重定向;
2.4 响应体