HttpServletRequest & Response

本文详细介绍了如何使用HttpServletResponse处理客户端请求,包括设置响应码、响应头和响应正文的方法。此外,还探讨了解决中文乱码问题的策略,以及Response在刷新、缓存控制和重定向中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.HttpServletRequest






2.HttpServletResponse

1.Response的API

1.1 通过response设置响应报文中的响应码

 

1.2 通过response对象设置响应头

 

1.3 通过response对象设置响应正文

可以通过字节流,将响应内容写入响应报文

 

也可以通过字符流,将响应内容写入响应报文

 

输出中文遇到的乱码问题

对于乱码问题,其核心只有一个:就是编解码不一致,要解决乱码问题,必须使得编解码一致。

对于向客户端输出响应这个过程而言:

编码过程是指,将要发送给客户端的字符串,放入http响应报文的过程。

解码过程指,浏览器接收到响应报文,并将响应报文中的字符,在客户端显示的过程

 

注意,我们输出到客户端,要在客户端浏览器中显示的的内容,都是放在响应报文的正文中的

2.1 当使用字节流向客户端输出中文

对于使用字节流向客户端输出中文字符的情况解码是通过字符串.getBytes(指定编码字符集)的方式来完成的。(注意此时交给tomcat服务器的是字节数据,而不是字符数据,即这个编码过程,是我们的程序完成的

 

所以要想,编解码一致,就必须,让浏览器在解码的时候,使用我们编码时的字符集,保证编解码一致,有三种方式,指定浏览器的编码。

1. 手动改变,浏览器所使用的字符集

2. 通过这个  api设置响应报文的响应头字段

    为来设置浏览器解码所使用的字符集

3. 在响应正文中,模拟html<meta charset=字符集>的方式

 

 

2.2 当使用字符流向客户端输入中文字符

此时,编码过程是由tomcat服务器来完成的,但是我们可以通过,api来制定,在响应报文中所使用的字符集。

 

对于解码过程,同使用字节流的3中情况。

在这里要说明的一点是:

 

这个api非常的好用,因为,使用这个api相当于,既设置了tomcat编码所使用的字符集,又同时告诉了浏览器解码所用的字符集。

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浏览器会生效。

Response的重定向

4.1 重定向的概念

请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。

 

重定向机制的运作流程

1、用户在浏览器端输入特定URL,请求访问服务器端的某个组件

2、服务器端的组件返回一个状态码为302的响应结果。

3、当浏览器端接收到这种响应结果后,再立即自动请求访问另一个web组件

4、浏览器端接收到来自另一个web组件的响应结果。

4.2 重定向的实现

4.2.1  

 

关于这个api,中的参数location是设置,重定向的目标组件的url,也分为相对路径和绝对路径,这里相对路径和绝对路径的设置方式,和htmlform表单中的设置方式相同。

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应用的组件,它可以是任意一个有效网页



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值