HTTP响应消息
HTTP协议分为两部分
1.请求消息:客户端发送给服务器端的数据(前面的博客已经学习过)
—数据格式:
——请求头
——请求行
——请求空行
——请求体
2.响应消息:服务器端发送给客户端的数据
—数据格式:
——响应头
——响应行
——响应空行
——响应体
1.响应行
—(1)组成:协议/ 版本 响应状态码 状态码描述
—如:HTTP/1.1 200 OK
—(2)响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
—状态码都是3位数字
—分类:
——1XX:服务器接收客户端消息,但是没有接受完成,等待一段时间,发送1XX多状态码
——2XX:成功。代表200
——3XX:重定向。代表302,304代表访问缓存
——4XX:客户端错误
————404代表请求路径没有对应的资源
————405代表请求方式没有对应的doXxx方法
——5XX:服务器端错误
————500代表服务器内部出现异常
2.请求头
—(1)格式:头名称:值
—(2)常见的响应头:
——Content-Type:服务器告诉客户端本次响应体数据格式及编码格式
——Content-disposition:服务器告诉客户端以什么样的格式打开响应数据
———Content-disposition值:
————in-line:默认值,在当前页面打开
————attachment;filename=xxx:以附件形式打开响应体。文件下载
3.响应空行:分隔作用
4.响应体:
真实的传输的数据
Response对象
response对象
功能:设置响应消息
—1.设置响应行
——设置状态码:setStatus(int sc);
—2.设置响应头
——setHeader(String name,String value);
—3.设置响应体
——使用步骤:
——(1)获取输出流
——*字符输出流:PrintWriter getWriter()
——*字节输出流:ServletOutputStream getOutputStream()
——(2)使用输出流,将数据输出到客户端浏览器
案例:
1.完成重定向
2.服务器输出字符数据到浏览器
3.服务器输出字节数据到浏览器
4.验证码
重定向特点:
—重定向地址栏发生变化
—重定向可以访问其他站点(服务器)的资源
—重定向是两次请求,所以不能使用request对象来共享数据
转发特点
—转发地址栏路径不变
—转发只能访问当前服务器下的资源
—转发是一次请求
路径的写法
路径的写法:
1.路径的分类:
—相对路径:通过相对路径不可以确定唯一资源
——如:. /index.html
——不以“/”开头,以“.”开头
——规则:找到当前资源和目标资源之间的相对位置关系
——— ./:当前目录
——— …/:后退一级目录
—绝对路径:通过绝对路径可以确定唯一资源
——如:http://localhost:8080/day04/responseDemo2——/day04/responseDemo2
——以“/”开头的路径
——规则:判断定义的路径是给谁用的?
——判断请求从哪里发出
———给客户端浏览器使用:需要加虚拟目录
————虚拟目录建议动态获取:request.getContextPath();
———给服务器用的:不需要加虚拟目录
1.完成重定向(复杂方式)
package cn.itcast.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/responseDemo1")
public class ResponseDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo1.........");
response.setStatus(302);
response.setHeader("location","/day04/responseDemo2");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
package cn.itcast.web.servlet;