jsp内置对象【03】中学完了request对象,现在学习response对象,request是客户端对服务器端的请求,而response是服务器端对客户端的回应。
response对象简介
response对象主要作用是用于对客户端的请求进行回应,将WEB服务器处理后的结果发回给客户端。
response对象属于javax.servlet.http.HttpServletResponse接口的实例
HttpServletResponse接口的定义格式与HttpServletRequest接口的定义格式非常的类似,都只有一个父接口,都只有一个子接口
我们还是来看一下这几种方法的具体应用:
设置头信息: 页面刷新、自动跳转功能
所有的信息都是随着请求和回应自动发送到服务器端或者是客户端的,在response中比较常用的头信息就是自动刷新。
- Response_01.jsp 自动刷新功能
- <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <%! //定义全局变量,否则下面的count++将一直是0。
- int count=0;
- %>
- <%
- response.setHeader("refresh","2");//每两秒刷新一次
- %>
- <h5>您访问了<%=count++ %></>次了</h5>
- </body>
- </html>
运行一下可以发现,页面是每2秒刷新一次的。除了定时刷新以外,还有定时跳转,代码如下:
- response_02.jsp 自动跳转
- <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <h3>这个页面3秒后跳转到51cto.html页面,如果没有跳转的话,
- 请点击<a href="51cto.html">这里</a></h3> //一个超链接
- <%
- response.setHeader("refresh","3;URL=51cto.html");
- //3秒后跳转到hello.html中去
- %>
- </body>
- </html>
- 51cto.html
- <html>
- <head>
- <title>web</title>
- </head>
- <body>
- <h1>我的技术博客:http://zhaoyuqinag.blog.51cto.com</h1>
- </body>
- </html>
运行一下,可以发现response_02.jsp页面在3秒后会自动跳转到51cto.html页面中去。细心的同学可以发现在response_02.jsp页面中有一个连接到51cto.html页面的超链接,有的同学就问了,既然能自动跳转过去,问什么要有个超链接呢?这不是多此一举吗? 关于这个问题,并不是不此一举,大家运行一下,等跳转到51cto.hmtl页面后再后退到response_02,jsp页面上,然后刷新一下浏览器(必须要刷新),然后等待,这个时候就发现问题了,3秒后页面并没有跳转。从这个地方也可以看出这个跳转并不是万能的。所以才加上了一个超链接,这个时候就可以点击超链接访问51cto.html页面了。
页面跳转(正式的一个跳转)(重点)
在response对象中提供了一个比较正式的跳转方法,sendRedirect().
我们将上述的response_02.jsp页面改成如下:
- <html>
- <head>
- <title>web</title>
- </head>
- <body>
- <%
- response.sendRedirect("51cto.html"); //跳转到51cto.html
- %>
- </body>
- </html>
运行一下可以发现此时能够跳转到51cto.html页面上。而且看一下浏览器地址,地址栏改变了,这种跳转属于客户端跳转,客户端跳转是无法传递request属性范围内容的,它只是一种很单纯的跳转,不传递任何的参数。
操作Cookie
response的一个特点就是能够操作Cookie。
Cookie是浏览器所提供的一种技术支持,这种技术让服务器端的程序能够将一些只须保存在客户端,或者在客户端进行处理的数据,放在使用中本身的计算机,不须要通过网络的传输,因而提高网页处理的效率,而且也能减少服务器端的负载。但是由于Cookie是服务器端保存在客户端的信息,所以其安全性很差。
在jsp中专门提供了javax.servlet.http.Cookie的操作类
大家应该知道浏览器自己有一定的记住用户名和密码的事情吧,比如:在浏览器上登陆一个邮箱的页面,发现用户名上已经填写好了自己的用户名,自己只需要写上密码就可以了。为什么用户名会自动的存在呢?再如:打开QQ登陆框的时候,发现自己的QQ号已经在上面了,自己只需要写上密码登陆就可以了。这些其实都是Cookie的原因,Cookie可以在客户端上保存数据。仅仅是在客户端上,如果此时换了一台计算机,那肯定就没有了Cookie了,也就没有了所谓的QQ号已经写在上面了的事情。这就是Cookie。
一个实例程序看一下Cookie的操作,代码如下:
设置Cookie
- Cookie_01.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web</title>
- </head>
- <body>
- <%
- Cookie c1=new Cookie("xingming","zhaoyuqinag"); //设置Cookie属性
- Cookie c2=new Cookie("51cto","zhaoyuqinag.blog.51cto.com");
- c1.setMaxAge(100); // 设置保存在浏览器上的时间为100秒 是按照秒来定义的时间
c2.setMaxAge(100);
- response.addCookie(c1); //向浏览器添加Cookie属性
- response.addCookie(c2);
- %>
- </body>
- </html>
这个程序表示在客户端上设置两个Cookie对象,设置添加后就要取出来,Cookie属于头信息,取出Cookie就用到了request对象。取出Cookie属性代码如下:
- Cookie_02.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web</title>
- </head>
- <body>
- <%
- Cookie c[]=request.getCookies(); //取得客户端的全部Cookie
- for(int x=0;x<c.length;x++){
- %>
- <h3><%=c[x].getName()%> --> <%=c[x].getValue()%></h3> //Cookie是一个数组
- <%
- }
- %>
- </body>
- </html>
大家先运行一下Cookie_01.jsp,这个时候什么反应都看不到,但是Cookie的两个属性的确保存了,然后关闭浏览器,重新打开浏览器,运行Cookie_02.jsp,可以发现我们之前设置的两个属性出现了。
注意:
response和request有很多的相似之处。
response中的sendRedirect()方法是一个比较常用的方法。
Cookie是不安全的。