JSP内置对象--response对象 (addCookie(),setHeader(),sendRedirect())
服务器接收客户端请求:request
服务器对客户端的回应:response
javax.servlet.http的接口HttpServletResponse extends ServletResponse
重要方法:
void addCookie(Cookie cookie):向客户端增加cookie
void setHeader(java.lang.String name,java.lang.String value):设置回应的头信息
void sendRedirect(java.lang.String location) throws java.io.IOException:页面跳转
- 设置头信息 response.setHeader("refresh","2")
所有头信息都是随着请求和回应自动发送到服务器端或者客户端上去,在response中比较常用的头信息就是刷新的指令,可以完成定时刷新的功能。
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <%! // 定义全局变量
- int count = 0 ;
- %>
- <%
- response.setHeader("refresh","2") ; // 页面2秒一刷新
- %>
- <h3>已经访问了<%=count++%>次!</h3>
- </body>
- </html>
除了定时,还有定时跳转的功能:
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <h3>3秒后跳转到hello.htm页面</h3>
- <%
- response.setHeader("refresh","3;URL=hello.htm") ; // 3秒后跳转到hello.htm页面
- %>
- </body>
- </html>
这种跳转不是万能的,有时候就根本无法跳转,此时需要加上 如果没有跳转请按<a href="hello.htm">:
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <h3>3秒后跳转到hello.htm页面,如果没有跳转请按<a href="hello.htm">这里</a>!</h3>
- <%
- response.setHeader("refresh","3;URL=hello.htm") ; // 3秒后跳转到hello.htm页面
- %>
- </body>
- </html>
对于这种跳转的头信息也可以通过HTML方式进行设置,HTML本身也可以设置头信息:
- <META HTTP-EQUIV="refresh" CONTENT="3;URL=hello.htm">
response_demo03.htm:
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <META HTTP-EQUIV="refresh" CONTENT="3;URL=hello.htm">
- <body>
- <h3>3秒后跳转到hello.htm页面,如果没有跳转请按<a href="hello.htm">这里</a>!</h3>
- </body>
- </html>
以上地址栏都发生了改变,所以都是客户端跳转。
现在到底是使用response设置还是META设置?
在web中,只要包含了动态页的,都需要web容器的支持,而所有的静态页直接使用即可。
- 页面跳转 response.sendRedirect()
在response对象中提供了一个sendRedirect()方法完成跳转:
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <%
- response.sendRedirect("hello.htm") ;
- %>
- </body>
- </html>
此时跳转成功,而且地址栏改变,这种跳转就称为客户端跳转,客户端跳转是无法传递request属性内容的。
现在已经学习了jsp:forward, response.sendRedirect()两种跳转语句,那么区别是什么?
1. jsp:forward
特点:
1. 服务器端跳转,跳转后地址栏不改变,可以传递request属性
2. 属于无条件跳转,执行到之后立即跳转,跳转之前语句会执行,之后不执行。
那么如果JSP中使用JDBC后,必须在跳转之前进行数据库的关闭,否则数据库再也无法关闭
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <% System.out.println("============ forward跳转之前 =========") ;%>
- <jsp:forward page="hello.htm"/>
- <% System.out.println("============ forward跳转之后=========") ;%>
- </body>
- </html>
2. response.sendRedirect()
特点:
1. 客户端跳转,地址栏改变,不传递request属性
2. 在所有语句都执行完后再执行跳转,所以数据库哪里关闭就无所谓了
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <% System.out.println("============ forward跳转之前 =========") ;%>
- <% response.sendRedirect("hello.htm") ; %>
- <% System.out.println("============ forward跳转之后=========") ;%>
- </body>
- </html>
要想深入了解两种跳转,必须结合后面的MVC设计模式来看,现在掌握基本语法即可。
- 操作Cookie response.addCookie(Cookie c)
Cookie 是服务器端保存在客户端的信息,安全性差,javax.servlet.http.Cookie
在一般站点都存在记住用户名这样一个操作,换个电脑无效,这就是cookie技术。
设置cookie:
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <%
- Cookie c1 = new Cookie("lxh","LiXingHua") ;
- Cookie c2 = new Cookie("mldn","www.MLDNJAVA.cn") ;
- response.addCookie(c1) ;
- response.addCookie(c2) ;
- %>
- </body>
- </html>
取得cookie:
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <%
- Cookie c[] = request.getCookies() ; // 取得客户端的全部Cookie
- System.out.println(c) ;
- for(int x=0;x<c.length;x++){
- %>
- <h3><%=c[x].getName()%> --> <%=c[x].getValue()%></h3>
- <%
- }
- %>
- </body>
- </html>
现在看来,所有的cookie都应该保存在客户端,那么关闭浏览器,开启新的浏览器应该也保存。可是并不是这样。
因为没设置保存的时间,所以默认是在一个浏览器上保存的,如果浏览器关闭,则cookie消失。如果想在客户端保留一段时间,要使用setMaxAge()完成,将第一个文件改成:
- <%@ page contentType="text/html" pageEncoding="GBK"%>
- <html>
- <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
- <body>
- <%
- Cookie c1 = new Cookie("lxh","LiXingHua") ;
- Cookie c2 = new Cookie("mldn","www.MLDNJAVA.cn") ;
- c1.setMaxAge(100) ;
- c2.setMaxAge(100) ;
- response.addCookie(c1) ;
- response.addCookie(c2) ;
- %>
- </body>
- </html>
response对象主要就是服务器对客户端的回应,对于cookie操作本身有安全隐患。
如果要存放客户端信息的时候,都使用cookie保存即可。
总结:
1. response对象主要就是服务器对客户端的回应
2. 可以通过setHeader()设置一个响应的头信息
3. 通过response可以向客户端设置cookie,可以通过request取得客户端设置的全部cookie
4. response对象的sendRedirect属于客户端跳转,而<jsp:forward>属于服务器端跳转
JSP内置对象--response对象 (addCookie(),setHeader(),sendRedirect())的更多相关文章
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- jsp内置对象之response、out、config、exception、pageContext。
本文是对Jsp内置对象的response.out.config.exception.pageContext知识点的详细总结. response对象 Response内置对象和request内置对象是相 ...
- JSP内置对象——response对象
看一个实例: 运行结果: 出现了一个很奇怪的现象,这个outer对象输出的字符串,跑到顶部去了.这个呢也就说明了response对象获得的writer对象的输出总是前于我们的内置对象.(respons ...
- JSP内置对象——response
response对象response对象包含了响应客户端的有关信息,但在JSP中很少使用它.它是HttpServletResponse类的实例.response对象具有页面作用域,即访问一个页面时,该 ...
- JavaWeb——JSP内置对象request,response,重定向与转发 学习总结
什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...
- jsp内置对象(三)-----response对象
response对象 response对象包含了响应客户端请求的有关信息,但在JSP中很少直接用到它.他是HttpServletResponse类的实例,response对象具有页面作用域,即访问一 ...
- JSP内置对象1(request,response,session)
request对象 response对象:请求重定向与请求转发的区别. session对象:表示客户端与服务器的一次会话,也就是用户浏览网站所花费的时间.在服务器的内存中保存着不同用户的session ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- Java EE JSP内置对象及表达式语言
一.JSP内置对象 JSP根据Servlet API规范提供了一些内置对象,开发者不用事先声明就可使用标准变量来访问这些对象. JSP提供了9种内置对象: (一).request 简述: JSP编程中 ...
- jsp 内置对象(一)
一.jsp的九大内置对象 内置对象 所属类 pageContext javax.servlet.jsp.PageContext request javax.servlet.http.HttpServl ...
随机推荐
- java 垃圾回收总结(可达性分析 引用分类
java 垃圾回收总结(1) 以前看过很多次关于垃圾回收相关的文章,都只是看过就忘记了,没有好好的整理一下,发现写文章可以强化自己的记忆. java与C,c++有很大的不同就是java语言开发者不 ...
- javaWEB总结(12):JSP页面的九个隐含对象
前言 jsp本质上是一个servlet,而在jsp中有九个不用声明就可以使用的对象,我们叫他隐含对象.本文基于上文所写,如有需要可查看上一篇文章javaWEB总结(11):JSP简介及原理. 打开上次 ...
- 淘淘商城_day03_课堂笔记
今日大纲 实现商品的编辑 实现商品的规格参数功能 搭建前台系统 实现首页商品类目的显示 商品的编辑 数据的编辑核心是:数据回显. 编辑按钮事件 判断选中的行数 弹出window 加载编辑页面,在页面加 ...
- Linux权限解释
从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限. 而具体的权限是由数字来表示的,读取的权限等于4,用r表示:写入的权限等于2,用w表示:执行的权限 ...
- 两种为wangEditor添加拖拽调整高度的方式:CSS3和jQuery UI
wangEditor是一款优秀的Web富文本编辑器,但如果能像KindEditor那样支持拖拽调整高度就更好了.有两种方式可以为wangEditor添加这一功能,这里使用的wangEditor版本为2 ...
- 第六十四节,html文档布局元素
html文档布局元素 学习要点: 1.文档元素总汇 2.文档元素解析 本章主要探讨HTML5中文档元素,文档元素的主要作用是划分各个不同的内容,让整个布局清晰明快.让整个布局元 ...
- 大数据时代之hadoop(三):hadoop数据流(生命周期)
了解hadoop,首先就需要先了解hadoop的数据流,就像了解servlet的生命周期似的.hadoop是一个分布式存储(hdfs)和分布式计算框架(mapreduce),但是hadoop也有一个很 ...
- 点击其他地方隐藏div
document.onclick = function(e){ var ele = e?e.target:window.event.srcElement; if(ele.id !== 'valueSh ...
- HDU 2514 Another Eight Puzzle(DFS)
题目链接 Problem Description Fill the following 8 circles with digits 1~8,with each number exactly once ...
- css遗漏
对于float浮动 子级元素浮动之后,因为元素脱离了文档流所以父级元素的高度不会auto而是变成0的解决方案 父级元素增加伪类 父级:after{ content:""; disp ...