package com.demo.c_response;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
HTTP 响应:
HTTP/1.1 200 OK -- 响应行
Server: Apache-Coyote/1.1 -- 响应头(key-vaule)
Content-Length: 24
Date: Fri, 30 Jan 2015 01:54:57 GMT
-- 一个空行
this is hello servlet!!! -- 实体内容
响应行:协议/版本 状态码 状态描述
协议版本:
http1.0:当前客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭;
http1.1:当前客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(现在基本上都是用 1.1)
状态码:服务器处理请求的结果(状态)
常见的状态:
200:表示请求处理完成,并完美返回;
302:表示请求需要进一步细化;
404:表示客户访问的资源找不到;
500:表示服务器的资源发送错误;(服务器内部错误)
常见的响应头:
Location: http://www.it315.org/index.jsp -- 表示重定向的地址,该头和302的状态码一起使用。
Server:apache tomcat -- 表示服务器的类型
Content-Encoding: gzip -- 表示服务器发送给浏览器的数据压缩类型
Content-Length: 80 -- 表示服务器发送给浏览器的数据长度
Content-Language: zh-cn -- 表示服务器支持的语言
Content-Type: text/html; charset=GB2312 -- 表示服务器发送给浏览器的数据类型及内容编码
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT -- 表示服务器资源的最后修改时间
Refresh: 1;url=http://www.it315.org -- 表示定时刷新
Content-Disposition: attachment; filename=aaa.zip -- 表示告诉浏览器以下载方式打开资源(下载文件时用到)
Transfer-Encoding: chunked -- 传输编码(chunked:表示分块编码)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search -- 表示服务器发送给浏览器的cookie信息(会话管理用到)
Connection: close/Keep-Alive -- 表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接
Expires: -1 -- (此行和下面两行)表示通知浏览器不进行缓存
Cache-Control: no-cache
Pragma: no-cache
HttpServletResponse 对象修改响应信息:
响应行:
response.setStatus():设置状态码;
response.sendError():
响应头:
response.setHeader("name", "value"):设置响应头
实体内容:
response.getWriter().write():发送字符实体内容
response.getOutputStream().write():发送字节实体内容
*/
@SuppressWarnings("serial")
@WebServlet("/ResponseDemo1")
public class ResponseDemo1 extends HttpServlet {
/*
* 服务器响应过程,我们能操作的只有第三步,设置响应信息:
* 1、tomcat 服务器把请求信息封装到 HttpServletRequest 对象,把响应信息封装到 HttpServletResponse 对象;
* 2、tomcat 服务器调用 doGet() 方法,传入 request 和 response 对象;
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 3、通过 response 对象改变响应信息
*/
/*
* 3、1 响应行
*/
// response.setStatus(404); // 修改状态码
// response.sendError(404); // 发送404状态码 + 404的错误页面芫
/*
* 3、2 响应头
*/
response.setHeader("server", "JBoss"); // 修改响应头
/*
* 3、3 实体内容(就是浏览器页面看得到的内容)
*/
// response.getWriter().write("hello char"); // 发送字符实体内容
response.getOutputStream().write("hello byte".getBytes()); // 发送字节实体内容
/*
* 4、tomcat 服务器把 response 对象的内容转换成响应格式内容,在发送给浏览器解析
*/
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}