JSP九大内置对象之response对象

response对象表示服务器端对客户端的回应,response本身是HttpServletResponse的对象,HttpServletResponse对象本身也是ServletResponse对象的子接口,这点与reqeust是一样的。

response对象表示服务器端对客户端的回应,response本身是HttpServletResponse的对象,HttpServletResponse对象本身也是ServletResponse对象的子接口,这点与reqeust是一样的。通过下面来验证response是HttpServletResponse的实例:

<%
if ( response instanceof HttpServletResponse) {
    out.println("是HttpServletResponse的实例");
} else {
    out.println("不是HttpServletResponse的实例");
}
%>

response中也有很多用法,最长用的有设置头信息、跳转、Cookie,其主要方法有:

// 设置头信息的名字和内容
public void setHeader(java.lang.String  name, java.lang.String  value);

// 跳转,由一个页面跳往另外一个页面
public void sendRedirect(java.lang.String location) throws java.io.IOException;

// 向客户端加入cookie
public void addCookie(Cookie  cookie);

// 设置内容的返回类型
public void setContentType(java.lang.String type);

HTTP头信息

头信息是随着内容一起提交到服务器端,或者从服务器端随内容一起发到客户端,在jsp中可以使用request对象的方法获取头信息。如:

// 取出全部头信息内容
public java.util.Enumeration getHeaderNames();

// 取得每一个头信息内容
public java.lang.String getHeader( java.lang.String name);

查看更多requset介绍

通过上面的方法获取的头信息属于http自己提交过的,但是用户也可以手工进行头信息的设置,回应给客户端,但是头信息的内容还是比较多的,用得较多的就是定时刷新:

// 每隔两秒自动刷新页面一次
response.setHeader("refresh","2");

经常看见网站上页面过了几秒后就会跳转到其他页面的现象,这种跳转成为服务器端的跳转,页面的地址会发生变化

// 三秒后自动刷新并跳转到新的页面上去
response.setHeader("refresh","3;URL=../emp.jsp");

在HTTP里面也可以实现这样的跳转,也是在头部信息完成的:

<head>  
   <title>复杂表单的提交</title>  
   <meta http-equiv="refresh" CONTENT="2; URL=../emp.jsp">  
</head>

客户端的跳转

以上都是服务器端的跳转。如:response.setHeader("refresh","5;URL=demo.jsp")。在客户端的跳转中我们使用response.sendRedirect()就可以完成。如下:

response.sendRedirect("demo01.jsp");

此种跳转依然可以使用重写地址的方式向跳转页传递参数,如下:

response.sendRedirect("demo01.jsp?ref=helloword");

接收也面依然使用request.getParameter()方法接收

两种跳转的区别

服务器端的跳转

<jsp:forward page="" />

无条件跳转,只要语句执行到此处就会跳转,而且可以传递ruquest参数

客户端的跳转

response.setHeader("")
reseponse.sendRedirect("")

所有页面执行完成之后在进行跳转,不能传递request范围的参数

Cookie

cookie是服务器端保存在客户端的一组数据,安全性较差,在JSP中,cookie属于单独的一个类,定义在javax.servlet.http.*

Cookie类的定义

public class Cookie extends  java.lang.Ojbect  implemnets java.lang.Cloneable

Cookie类的主要方法

// Cookie的构造方法,实例化Cookie对象,传入名称和内容
public Cookie (String name,String value)

// 取得Cookie的名字
public java.lang.String   getName()

// 修改内容
public void setValue(java.lang.String newValue)

// Cookie的最大保存时间
pubilc void setMaxAge(int expiry)

【实例】设置定时刷新的头信息--response_demo_01.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.jxau.edu.cn</title></head>  
<body>
<%!
    // 定义全局变量
    int count = 0;
%>
<%
    // 设置两秒刷新一次
    response.setHeader("refresh", "2");
%>
    <h1>已经访问了<%=count++%>次!</h1>
</body>
</html>

【实例】定时跳转(属于客户端跳转):3秒后跳转到其它网页response_demo_02.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head>
    <title>www.hxstrive.com</title>
</head>
<body>
    <h1>3秒后跳转到response_demo_01.jsp页面,如果没有跳转请按
    <a href="response_demo_01.jsp">这里</a>!</h1>
<%
    // 3秒后跳转到response_demo01.jsp
    response.setHeader("refresh", "3;URL=response_demo_01.jsp");
%>  
</body>
</html>

提示HTML中的跳转指令:

<META HTTP-EQUIV="refresh" CONTENT="3" "3;URL=response_demo_01.jsp">

比较:

动态页请求:要经过Web Container进行代码的拼凑操作

静态页请求:直接读取文件系统

使用HTML进行定时跳转的情况:页面中没有JSP代码

【实例】<jsp:forward>服务器跳转response_demo_041.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>  
<html>
<head>
    <title>服务器跳转</title>
</head>
<body>
<%
    System.out.println("============forward跳转前============");
%>
    <jsp:forward page="response_demo_01.jsp"/>
<%
    System.out.println("============forward跳转后============");
%>
</body>
</html>

执行结果:

============forward跳转前============

...........每隔两秒输出一句..........

============forward跳转前============

【实例】response.sendRedirect()服务器跳转response_demo_042.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>  
<html>
<head>
    <title>服务器跳转</title>
</head>
<body>
<%   System.out.println("============forward跳转前============");%>  
<%   response.sendRedirect("response_demo_01.jsp");%>  
<%   System.out.println("============forward跳转后============");%>  
</body>
</html>

执行结果:

============forward跳转前============

============forward跳转后============

提示:

在代码开发中,尤其是JDBC操作中,一定要在<jsp:forward>语句之前关闭数据库连接,否则再也无法关闭该数据库连接。而如果数据库连接始终没有关闭,达到一定程度是将出现“数据库连接已经达到最大的异常”,此时只有重启服务器了

少壮不努力,老大徒悲伤。——汉乐府古辞《长歌行》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号