Response代表服务器对客户端的响应。除此之外还可以使用response来重定向请求,以及用于向客户端增加Cookie。
1. response响应生成非字符响应
对于需要生成非字符响应的情况,就应该使用response来响应客户端请求。下面来在客户端生成一张图片。response是HttpServletResponse接口的实例,该接口提供了一个getOutputStream()方法,返回响应输出自己流。
下面一段代码用来在客户端生成一张图片
<body> <% //创建BufferedImage对象 BufferedImage image=new BufferedImage(340,160,BufferedImage.TYPE_INT_RGB); //以image为对象获取Graphics对象 Graphics g=image.getGraphics(); //使用Graphics画图,所画的图像将会出现在image对象中 g.fillRect(0,0,400,400); //设置颜色为红 g.setColor(new Color(255,0,0)); //画出一段弧 g.fillArc(20,20,100,100,30,120); //设置颜色为绿 g.setColor(new Color(0,255,0)); //画出一段弧 g.fillArc(20,20,100,100,150,120); //设置颜色为蓝 g.setColor(new Color(0,0,255)); //画出一段弧 g.fillArc(20,20,100,100,270,120); //设置颜色为黑 g.setColor(new Color(0,0,0)); //画出一段弧 g.setFont(new Font("Arial Black",Font.PLAIN,16)); //画三个字符串 g.drawString("red:climb",200,60); g.drawString("green:swim",200,100); g.drawString("blue:jump",200,140); g.dispose(); //将图像输出到页面的响应 ImageIO.write(image,"jpg",response.getOutputStream()); %>
2. 重定向
重定向是Response的另一个用处,与forward不同的是,重定向会丢失所有的请求参数和request范围的属性。因为重定向将生成第二次请求,与前一次请求不在同一个request范围内,所以发送一次请求的请求参数和request范围的属性会丢失。
HttpServletResponse提供了一个sendRedirect(Stringpath)方法,该方法用于重定向到path资源,即重新向path资源发送请求。
使用重定向的效果与在地址栏里重新输入新地址再按回车键的效果完全一样。即发送了第二次请求。
3. 增加cookie
Cookie通常用于网站记录客户的某些信息,比如客户的用户名以及客户的喜好。一旦用户下次登录,网站可以获取到客户的相关信息,根据这些客户信息,网站可以对客户提供更友好的服务。Cookie会一直存放在客户端机器上,除非超出Cookie的生命周期。
增加Cookie也是使用Response内置对象完成的。Response对象提供了下面方法。
Void addCookie(Cookiecookie):增加Cookie。
正如上面的方法中见到的,在增加Cookie之前,必须先创建Cookie对象,增加Cookie对象请按如下步骤进行。
(1) 创建Cookie实例,Cookie的构造器为Cookie(String name,String value).
(2) 设置Cookie的生命周期,即该Cookie在多长时间内有效。
(3) 向客户端写Cookie。