JSP的9个内置对象之response

来源:互联网 发布:问卷数据分析怎么写 编辑:程序博客网 时间:2024/06/03 13:25

response代表服务器对客户端的响应。大部分时候,程序无须使用response来响应客户端请求,因为有个更简单的响应对象—–out,它代表页面输出流,直接用out生成响应更简单。
一,什么时候必须用到response?
虽说可以大部分用out代替response来响应,但out是JspWriter的实例,JspWriter是Writer的子类,Writer是字符流,无法输出非字符的内容,假如需要在JSP页面中动态生成一幅位图,或者输出PDF文档,使用out对象将无法生成,此时必须使用response作为响应输出。
还可以用response来重定向请求,以及用于向客户端增加Cookie。

举个例子代码如下:
这里写图片描述
运行后的效果如下图:
这里写图片描述
以上的代码先设置了服务器响应数据是image/png,这表面服务器响应是一张PNG图片。接着创建了一个BufferedImage对象(代表图像),并获取该BufferedImage的Graphics对象(代表画笔),然后通过Graphics向BufferedImage中绘制图形,最后一行代码将直接把BufferedImage作为响应发送给客户端。
这里写图片描述
在其他的页面中使用img标签来显示这个图片页面。
使用这种临时生成图片的方式就可以非常容易地实现网页上的图形验证码功能,不仅如此,使用response生成非字符响应还可以直接生成PDF文档,Excel文件,这些文件可直接作为报表使用。

二,重定向
重定向是response的另外一个用处,与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次请求不在同一个request范围内,所以发送一次请求的请求参数和request范围的属性全部丢失。
HttpServletResponse提供了一个sendRedirect(String path)方法 redirect转发,该方法用于重定向到path资源,即重新向path发送请求。

1.转发和重定向之间的区别?
(1)执行forward后依然是上一次请求,执行redirect后生成第二次请求
(2)forward的目标页面可以访问原请求的请求参数,因为依然是同一次请求,所有原请求的请求参数,request范围的属性全部存在。redirect的目标页面不能访问原请求的请求参数,因为是第二次请求了,所有原请求的请求参数,request范围的属性全部丢失。
(3)执行forward后地址栏里的URL不会改变,执行redirect后地址栏改为重定向的目标URL,相当于在浏览器地址栏里输入新的URL后按回车键。

三,增加cookie
1.什么是cookie?
cookie通常用于网站记录客户的某些信息,比如客户的用户名及客户的喜好等,一旦用户下次登录,网站可以获取到客户的相关信息,根据这些客户信息,网站可以对客户提供更好的服务。Cookie与session的不同之处在于:session会随着浏览器的关闭而失效,但Cookie会一直存放在客户端机器上,除非超出了C ookie的生命期限。
由于安全性的原因,使用Cookie客户端浏览器必须支持Cookie才行。客户端浏览器完全可以设置禁用Cookie。

2.用什么方法增加Cookie?
response对象的void addCookie(Cookie cookie):增加Cookie。
正如在上面的方法中见到的,在增加Cookie之前,必须先创建Cookie对象。增加Cookie对象的步骤:
(1)创建Cookie实例,Cookie的构造器为Cookie(String name,String value)。
(2)设置Cookie的生命期限,即该Cookie在多长时间内有效。
(3)向客户端写Cookie

下面的代码如下:
这里写图片描述
这里写图片描述
运行程序后,在地址栏输入http:localhost:8888/addCokie.jsp?name=litao,执行该页面后,网站就会向客户端机器写入一个username的Cookie,该Cookie将在客户端硬盘上一直存在,直到超过该Cookie的生存期限(本Cookie设置为24小时)。
如果想要找到希望访问的Cookie,request对象提供了getCookies()方法,该方法将返回客户端机器上所有Cookie组成的数组,遍历该数组的每个元素,找到希望访问的Cookie即可。

3.如果值为中文内容的Cookie怎么办?
可以借助java.net.URLEncoder先对中文字符串进行编码,将编码后的结果设为Cookie值。当程序要读取Cookie时,则应该先读取,然后使用java.net.URLDecoder对其进行解码。
如下代码演示了如何存入值为中文的Cookie。
这里写图片描述

0 0