1.HttpServletRequest
2.HttpServletResponse
1.Response的API
1.1 通过response设置响应报文中的响应码
1.2 通过response对象设置响应头
1.3 通过response对象设置响应正文
可以通过字节流,将响应内容写入响应报文
也可以通过字符流,将响应内容写入响应报文
2 输出中文遇到的乱码问题
对于乱码问题,其核心只有一个:就是编解码不一致,要解决乱码问题,必须使得编解码一致。
对于向客户端输出响应这个过程而言:
编码过程是指,将要发送给客户端的字符串,放入http响应报文的过程。
解码过程指,浏览器接收到响应报文,并将响应报文中的字符,在客户端显示的过程
注意,我们输出到客户端,要在客户端浏览器中显示的的内容,都是放在响应报文的正文中的
2.1 当使用字节流向客户端输出中文
对于使用字节流向客户端输出,中文字符的情况,解码是通过字符串.getBytes(指定编码字符集)的方式来完成的。(注意此时交给tomcat服务器的是字节数据,而不是字符数据,即这个编码过程,是我们的程序完成的)
所以要想,编解码一致,就必须,让浏览器在解码的时候,使用我们编码时的字符集,保证编解码一致,有三种方式,指定浏览器的编码。
1. 手动改变,浏览器所使用的字符集
2. 通过这个 api设置响应报文的响应头字段
为,来设置浏览器解码所使用的字符集
3. 在响应正文中,模拟html的<meta charset=”字符集”>的方式
2.2 当使用字符流向客户端输入中文字符
此时,编码过程是由tomcat服务器来完成的,但是我们可以通过,api来制定,在响应报文中所使用的字符集。
对于解码过程,同使用字节流的3中情况。
在这里要说明的一点是:
这个api非常的好用,因为,使用这个api相当于,既设置了tomcat编码所使用的字符集,又同时告诉了浏览器解码所用的字符集。
3 Response的常见应用
3.1 Refresh响应头的应用
ServletRefresh :
response.sendHeader("Refresh","2") (表示2秒刷新一次)
response.sendHeader("Refresh","2;http://www.xxxx.com") (表示2秒后刷新跳转)
3.2 缓存的控制
ServletCache:
response.setDataHeader("Expires" , System.currentTimeMillis()+1000*60*60)
表示缓存的销毁时间为1个小时,一般只有IE浏览器会生效。
4 Response的重定向
4.1 重定向的概念
请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。
重定向机制的运作流程
1、用户在浏览器端输入特定URL,请求访问服务器端的某个组件
2、服务器端的组件返回一个状态码为302的响应结果。
3、当浏览器端接收到这种响应结果后,再立即自动请求访问另一个web组件
4、浏览器端接收到来自另一个web组件的响应结果。
4.2 重定向的实现
4.2.1
关于这个api,中的参数location是设置,重定向的目标组件的url,也分为相对路径和绝对路径,这里相对路径和绝对路径的设置方式,和html的form表单中的设置方式相同。
4.2.2
实现原理:自己模拟sendRedirect的响应报文
302/307状态码和location头即可实现重定向
4.3 重定向的特点
1. Servlet源组件生成的响应结果不会被发送到客户端。
2. response.sendRedirect(String location)方法一律返回状态码为302的响应结果。
3. 如果源组件在进行重定向之前,已经提交了响应结果,会抛出IllegalStateException。为了避免异常,不应该在源组件中提交响应结果。
//Cannot call sendRedirect() after the response has been committed
4. 在Servlet源组件重定向语句后面的代码也会执行。
5. 源组件和目标组件不共享同一个ServletRequest对象。
6. 对于sendRedirect(String location)方法的参数,如果以“/”开头,表示相对于当前服务器根路径的URL (WEBAPP)。以“http"//”开头,表示一个完整路径。
目标组件不必是同一服务器上的同一个web应用的组件,它可以是任意一个有效网页