response:传递http响应内容
response类型为HttpServletResponse
ServletResponse:与协议无关的类型
HttpServletResponse:与协议有关的内容
1、http响应内容:
状态码:
200(2开头表示成功)
302(3开头表示中转)
404(4开头表示客户端出错)
500(5开头表示服务器出错)
方法: sendError(int sc); 发送错误状态码
sendError(int sc, String name); 发送错误状态码,及错误信息
setStatus(int sc); 成功码或中转码
响应头:键值对 Content-Type、Refresh、Location等
***:setHeader(String name,String value);设置单值响应头
addHeader(String name,String value);用来添加响应值。
setIntHeader(String name,int value);设置int类型单值响应头
addHeader(String name,int value);添加int类型响应头
setDateHeader(String name,int value);设置long类型单值响应头,用来表示时间
addDateHeader(String name,int value);添加long类型响应头
响应体:通常为html 也可以是图片。
response流:
ServletOutputStream:向客户端发送字节数据
response.getOutputStream().write("数据");
PrintWrite:向客户端发送字符数据,需要设置编码
response.getWriter().print("数据");
注:两个流不能同时用
响应状态码实例:
//发送404
response.sendError(404, "你访问的资源存在,就不给你看");
响应头案例:
location头
重定向案例: 由Bservlet转到目标url
//1.设置Location url为 /项目名/路径
response.setHeader("Location", "/day10_1/CServlet");
//2.发送302码
response.setStatus(302);
快捷重定向:
response.sendRedirect("url");
Refresh头
定时刷新案例:设置Refresh头 (可理解为定时的重定向)
// 发送相应体
response.getWriter().print("5秒种后跳转");
//拿到PrintWriter字符流,然后对流进行操作,用response调用,返回到response中
// 设置定时响应
response.setHeader("Refresh", "5;/day10_1/CServlet");
//参数为 "refresh响应头","时间;url"
Cache-Control、pragma、expires头
禁用浏览器缓存
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.setHeader("expires", "-1");
注:<mate>标签可以代替响应头。
eg: <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
2、doGet和doPost && get与post
doGet和doPost
其实都是用来接收前端传过来的数据,本质上都是请求方法。
服务器创建servlet对象后,servlet对象调用init方法初始化自己。
以后每当服务器接收到一个servlet请求时,都会调用产生一个新线程,
在这个新线程中,servlet对象调用service对象对HTTP请求类型进行检查,
判断出请求类型是get还是post,
在service方法中,根据请求类型对应的调用doGet、doPost方法。
get与post
3、编码
常见编码:uthf-8、 ios-8859-1、 gb2312、 gbk、
响应编码:服务器到客户端
请求编码:客户端到服务器
URL编码
作用: 传递中文时,在客户端和服务器之间把中文转换成适合网络的方式
此编码不是字符编码!