response代表服务器对客户端的响应。大部分时候,程序无需使用response来响应客户端请求,因为有个更简单的响应对象——out,它代表页面输出流,直接使用out生成响应更简单。
但out是JspWriter的实例,JspWriter是Writer的子类,Writer是字符流,无法输出非字符内容。假如需要在JSP页面动态生成一副位图、或者一个PDF文档,使用out作为相应对象将无法完成,此时需要response作为响应输出。
除此之外,还可以使用response来重定向请求,以及用于客户端增加Cookie。
1,response响应生成非字符响应
对于需要生成非字符响应的情况,就应该使用response来响应客户端请求。response是HttpServletResponse接口的实例,该接口提供了一个getOutputStream()方法,该方法返回响应输出字节流。
先设置服务器响应数据是image/png,这表明服务器应 是一张PNG图片。接着创建一个BufferedImage对象(代表图像),并获取该BufferedImage的Graphics对象(代表画笔),然后通过Graphics向BufferedImage中绘制图像,最后一行代码直接将BufferedImage作为响应发送给客户端。?
也可以直接在其他页面使用img标签代替这个图片<img src="test.jsp"/>。
这种临时生成图片的方式就可以非常容易地实现网页上的图形验证码功能。不仅如此,使用response生成非字符响应还可以直接生成PDF文件、Excel文件。这些文件可直接作为报表使用。
2,重定向
重定向是response的另外一个用户,与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次请求不在同一个request范围内,所以发送一次请求的参数和request范围的属性全部丢失。
HttpServletResponse提供了一个sendRedirect(String path)方法,该方法用于重定向到path资源,即重新向path资源发送请求。
注意地址栏的变化,执行重定向动作时,地址栏的URL会变成重定向的目标URL。
重定向会丢失所有的请求参数,使用重定向的效果,与在地址栏里重新输入新地址再按回车键的效果完全一样,即发送了第二次请求。
从表面上看,forward动作和redirect动作有些相似:它们都可将请求传递到另一个页面。但实际上forward和redirect之间存在较大的差异。
3,增加Cookie
Coolie通常用于网站记录客户的某些信息,比如客户的用户名及客户的喜好等。一旦用户下次登录,网站可以获取到客户的相关信息,根据这些客户信息,网站可以对客户提供更好的服务。Cookie与session的不同之处在于:session会随浏览器的关闭而失效,但Cookie会一直存放在客户端机器上,除非超出Cookie的生命期限。
由于安全性的原因,使用Cookie客户端浏览器必须支持Cookie才行。客户端浏览器完全可以设置禁用Cookie。
增加Cookie也是使用response内置对象完成的,response对象提供了如下方法:
void addCookie(Cookie cookie):增加Cookie。
正如在上面的方法中见到的,在增加Cookie之前,必须先创建Cookie对象。然后按照下面步骤进行:
创建Cookie实例,Cookie的构造器Cookie(String name,String value)。
设置Cookie的生命周期,即该Cookie在多长时间内有效。
向客户端写Cookie。
使用Cookie对象必须设置其生存期限,否则Cookie将会随浏览器的关闭而自动结束。
如果浏览器没有组织Cookie,执行上面程序后,网站就会向客户端写入一个名为name的Cookie,该Cookie将在客户端硬盘一直存在,直到超出该Cookie的生命期限。
访问客户端的request对象,request提供了getCookie方法,该方法将返回客户端机器上所有Cookie组成的数组,遍历该数组的每个元素,找到需要的Cookie即可。
删除Cookie,只需要设置cookie的生命周期为0即可,不过为了更好的效果,我们按照如下设置:
原文链接:https://blog.csdn.net/qq_42192693/article/details/81168368
下一篇:没有了