第四章、request请求对象、response响应对象
1.请求和响应的概述 [1].什么是请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一 个请求过程。 [2].什么是响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示, 这个过程称之为响应。
2.HttpServletResponse对象 HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使 用HttpServletResponse. 响应信息分为三部分:相应行、响应头、响应正文(响应体) [1]发送状态码的相关方法: <1>设置状态码 void setStatus(int sc):参数就是状态码。 setStatus(int sc,String sm):(参数1:状态码,参数2:对状态码的描述) 常见的状态码:200 响应成功 302 重定向 404 请求资源找不到 500 服务器端代码出异常 <2>错误信息方法
代码语言:javascript复制 sendError(int sc):参数状态码
setdError(int sc,String sm):(参数1:状态码,参数2:对状态码的描述)
比如:
response.sendError(404, “chapter04项目内的请求资源不存在”);
[2]发送响应消息头的相关方法 响应消息头的数据格式:key-value的形式,有的是一个key,一个value 有的是一个key,多个value <1>设置响应消息头 一个key,一个value setHeader(String key,String value); 比如:setHeader(“aa”,“AA”); 比如:setHeader(“aa”,“AA”); 比如:setHeader(“aa”,“BB”); 最终的结果:aa这个头对应的值就是BB 一个key,对应多个value addHeader(String key,String value) 比如:addHeader(“aa”,“AA”); addHeader(“aa”,“BB”); 最终的结果:aa这个头对应的值是AA和BB 比如:
代码语言:javascript复制 //[2]与响应消息头相关的方法
//在用户名和密码输入错误的情况下,重新回到登陆页让用户重新输入数据
//1.设置状态码
response.setStatus(302);
//2.设置响应头,完成重定向到登陆界面的操作
response.setHeader("location","/chapter04/login.html");
<2>设置响应数据的长度:setContentLength(int src)方法 <3>设置处理乱码的方法: setCharacterEncoding(String a);//参数就是一个码表格式,比如"utf-8" setContentType(String a);//参数代表响应数据的类型和码表格式 比如:"text/html;charset=utf-8"
[3]发送响应体相关的方法: 第一个方法:getOutputStream(),通过response向浏览器返回图片、视频等二进制 数据的文件,当然也可以像浏览器返回文本数据。 第二个方法:getWriter(),通常response向浏览器返回文本数据,不能向浏览器 返回图片、视频等二进制文件。 比如:
代码语言:javascript复制 //响应体相关的方法
//字符流向浏览器输出数据
PrintWriter pw=response.getWriter();
String value="itcast---";
//pw.print(value);
pw.write(value);
//字节流对象向浏览器返回数据
ServletOutputStream out=response.getOutputStream();
String value="itcast";
out.write(value.getBytes());//等价于out.write()
[4]解决中文输出的乱码问题 第一种方式:字节流向浏览器输出中文,会不会乱码:可能会出现乱码 出现乱码的原因:服务器端的编码格式和浏览器的编码 格式不一致引起的。 比如:
代码语言:javascript复制 //[1]处理字节流的中文乱码问题
String data="中国";
ServletOutputStream out=response.getOutputStream();
//[2]处理乱码:让服务器端的编码和浏览器端保持一致
//[3]让浏览器端的编码也是utf-8
response.setHeader("Content-Type","text/html;charset=utf-8");
//让服务器端的编码格式为utf-8
out.write(data.getBytes("utf-8"));
处理字节流中文乱码问题的两种方式: (1)第一种:response.setHeader(“Content-Type”,“text/html;charset=utf-8”); (2)第二种:response.setContentType(“text/html;charset=utf-8”);//上一行的简写方式 第二种方式:字符流向浏览器输出中文,会不会乱码:肯定乱码 乱码的形式:?? ,这个问号就表示中文的编码格式是采用iso-8859-1编码的 这种编码格式不支持中文。 处理原则:让浏览器和服务器端的编码保持一致 比如:
代码语言:javascript复制//[1]处理字符流的中文乱码问题
//[2]处理服务器端的编码,让这个编码支持中文
response.setCharacterEncoding("utf-8");
//[3]处理浏览器端的编码
response.setHeader("Content-Type","text/html;charset=utf-8");
String data="中国";
//[4]获取字符流
PrintWriter pw=response.getWriter();
pw.print(data);
处理字符流的中文乱码问题: (1)第一种方式: response.setCharacterEncoding(“utf-8”); //[3]处理浏览器端的编码 response.setHeader(“Content-Type”,“text/html;charset=utf-8”); (2)第二种方式: response.setContentType(“text/html;charset=utf-8”); 结论:在处理字符流和字节流输出中文乱码时,都采用response.setContentType(“text/html;charset=utf-8”);
常见的编码格式: (1)GBK GB18030 GB2312 都是支持中文的编码格式,当然支持其他一些字符。 (2)UTF-8:支持所有的字符(万能码表格式) (3)ISO-8859-1:不支持中文。
还没学完,稍后发布后面的