第四章、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>错误信息方法

   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
比如:

   //[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向浏览器返回文本数据,不能向浏览器
返回图片、视频等二进制文件。

比如:

	  //响应体相关的方法


 //字符流向浏览器输出数据
		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]解决中文输出的乱码问题
第一种方式:字节流向浏览器输出中文,会不会乱码:可能会出现乱码
出现乱码的原因:服务器端的编码格式和浏览器的编码
格式不一致引起的。

比如:

 //[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编码的
这种编码格式不支持中文。
处理原则:让浏览器和服务器端的编码保持一致
比如:

//[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:不支持中文。

还没学完,稍后发布后面的