服务器接收客户端请求: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())的更多相关文章

  1. JSP内置九个对象Request请求对象

    jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...

  2. jsp内置对象之response、out、config、exception、pageContext。

    本文是对Jsp内置对象的response.out.config.exception.pageContext知识点的详细总结. response对象 Response内置对象和request内置对象是相 ...

  3. JSP内置对象——response对象

    看一个实例: 运行结果: 出现了一个很奇怪的现象,这个outer对象输出的字符串,跑到顶部去了.这个呢也就说明了response对象获得的writer对象的输出总是前于我们的内置对象.(respons ...

  4. JSP内置对象——response

    response对象response对象包含了响应客户端的有关信息,但在JSP中很少使用它.它是HttpServletResponse类的实例.response对象具有页面作用域,即访问一个页面时,该 ...

  5. JavaWeb——JSP内置对象request,response,重定向与转发 学习总结

    什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...

  6. jsp内置对象(三)-----response对象

    response对象  response对象包含了响应客户端请求的有关信息,但在JSP中很少直接用到它.他是HttpServletResponse类的实例,response对象具有页面作用域,即访问一 ...

  7. JSP内置对象1(request,response,session)

    request对象 response对象:请求重定向与请求转发的区别. session对象:表示客户端与服务器的一次会话,也就是用户浏览网站所花费的时间.在服务器的内存中保存着不同用户的session ...

  8. jsp内置对象浅谈

    jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...

  9. Java EE JSP内置对象及表达式语言

    一.JSP内置对象 JSP根据Servlet API规范提供了一些内置对象,开发者不用事先声明就可使用标准变量来访问这些对象. JSP提供了9种内置对象: (一).request 简述: JSP编程中 ...

  10. jsp 内置对象(一)

    一.jsp的九大内置对象 内置对象 所属类 pageContext javax.servlet.jsp.PageContext request javax.servlet.http.HttpServl ...

随机推荐

  1. 成都IT公司面经及公司评价

    从2015年年底到2016年初找了几个月工作,面了大大小小若干公司,有很不错的公司,也有很多坑公司,与君共勉. 1.科大讯飞 地址:成都分公司位于天府软件园E区,占一层楼.面积挺大.公司装修风格很舒服 ...

  2. event 实现观察者模式

    看了一些其他人写的,一下就晕了,还是自己写一个给自己看吧. 用event语法糖实现的观察者,与普通的实现,最大的区别在于,Subject的操作中不会直接触发Observer的Update,而是通过ev ...

  3. crontab格式使用方式

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  4. 网页弹出窗口工具推荐之jqmodal

    各种在jquery基础上实现的弹出窗口,有详细的开发说明文档.在项目中快速实现网页中弹出窗口的需求.基本能满足各种弹出窗口的需求 其官方网址如下http://jquery.iceburg.net/jq ...

  5. php基础(三)超全局变量

    超全局变量 在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量. PHP 全局变量 - 超全局变量 PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可 ...

  6. JavaEE JavaBean 反射、内省、BeanUtils

    JavaEE JavaBean 反射.内省.BeanUtils @author ixenos JavaBean是什么 一种规范,表达实体和信息的规范,便于封装重用. 1.所有属性为private2.提 ...

  7. C/C++的静态库与动态库

    C/C++编程中相关文件后缀(以Linux系统下为例): .a:           静态库(archive) .c/.cpp:  C/C++源程序 .h/.hpp: C/C++源程序的头文件 .i: ...

  8. AR9531的mac地址

    root@OpenWrt:/# ifconfigbr-lan    Link encap:Ethernet  HWaddr 00:11:22:34:56:78            inet addr ...

  9. .Net Core 读取appsettings.json的配置

    在.net core中是没有*.config 文件的 配置文件都是*.json 1.在project.json里下面这行代码 "Microsoft.Extensions.Options.Co ...

  10. 引用头文件顺序问题 error C2039

    建的WTL工程,用到CString和DataExchange 因为WTL和ATL都有对CString的定义 当先包含 atlstr.h 再包含 atlddx.h 时会出现以下错误 error C203 ...