JSP内置对象----response

        response代表服务器对客户端的响应。大部分时候,程序无需使用response来响应客户端请求,因为有个更简单的响应对象------out,它代表页面输出流,直接使用out生成响应更简单。

       但是out是JspWriter的实例,JspWriter是Writer的子类,Writer是字符流,无法输出非字符内容。假如需要在JSP页面中动态生成一副位图,PDF文档,使用out作为响应对象将无法完成,此时必须使用response作为响应输出。   

       除此之外,还可以使用response来重定向请求,以及用于向客户端增加Cookie。

1.response响应生成非字符响应。

  对于需要生成非字符响应的情况,就应该使用response来响应客户端请求。下面来在客户端生成一张图片。response是HttpServletResponse接口的实例,该接口提供了一个getOutputStream()方法,返回响应输出自己流。

<%@ page contentType="image/jpeg" language="java" import="java.util.*,java.awt.image.*,javax.imageio.*,java.awt.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'request1.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  <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());
      
  %>
  </body>

注:也可以在其他页面中使用img标签来显示这个图片页面  如图:<img src="img.jsp">使用这种临时生成图片的方式就可以非常容易地实现网页上的图形验证码功能。不仅如此,使用response生成非字符响应还可以直接PDF文件和Excel文件,这些文件可直接作为表达使用。


2.重定向

重定向是response的另外一个用处,与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次请求不在同一个request范围内,所以发送一次请求参数和request范围的属性全部丢失。

HttpServletResponse提供了一个sendRedirect(String path)方法,该方法用于重定向到path资源,及重新向path资源发送请求。

response.sendRedirect("xxx.jsp")


3.增加Cookie功能

Cookie通常用于网站记录客户的某些信息,比如客户的用户名及客户的喜好。Cookie与Session的不同之处在于:session会随浏览器的关闭而失效,但是Cookie会一直存放在客户端机器上,除非超出Cookie的生命期限。

增加Cookie也是使用response内置对象完成的,response对象提供了如下方法

曾加Cookie的步骤

(1)创建Cookie实例,Cookie的构造器为Cookie(String name,String value)

(2)设置Cookie的生命期限,即该Cookie在多长时间内有效

(3)向客户端写Cookie---response.addCookie(Cookie cookie);

访问客户端Cookie使用request对象,request对象提供了getCookies()方法,该方法返回客户端机器上所有Cookie组成的数组,遍历数组的每个元素,找到希望访问的Cookie即可。

Cookie[] cookies=request.getCookies();

for(Cookie c:cookies){

   c.getName()

  c.getValue()

}

注:1.使用Cookie对象必须设置其生存期限,否则Cookie将会随浏览器的关闭而自动消失。

         2.默认情况下,Cookie值不允许出现中文字符,如果我们需要值为中文内容的Cookie,可以借助于java.net.URLEncoder先对中文字符串进行编码,将编码后的结果设为Cookie值。先读取,然后使用java.net.URLEncoder进行解码。存入之前先解码,读取输出后对cookie.getValue()进行解码即可。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值