JSP 的 response 和 session 内置对象

文章目录


前言

JSP 的 response 和 session 内置对像,分别有着响应客户端请求,输出信息和产生会话沟通直到浏览器关闭。该文将简单介绍两个内置对象的使用。


一、response 内置对象

response对象是在网络请求中用来存储服务器返回的结果的对象。它包含了服务器返回的状态码、响应头、响应体等信息。

response对象的作用是让开发者可以获取和处理服务器返回的数据。通过response对象,开发者可以获取到服务器返回的状态码,判断请求是否成功;可以获取到服务器返回的响应头信息,如Content-Type、Content-Length等;还可以获取到服务器返回的响应数据,如HTML、JSON、图片等。

除此之外,response对象还提供了一些方法,如 getHeader() 获取相应头信息、getContent() 获取相应体内容。

response对象可以方便地获取和处理服务器返回的数据。

1.重定向网页

response 对象的 sendRedirect() 方法可以将网页重定向到另一个网页。语法格式如下:

java 复制代码
response.sendRedirect(String path);

参数说明:

path:用于指定目标路径,可以是相对路径,也可以是不同主机的其他 URL 地址。

这里值得提一下,重定向和转发的区别:

(1)重定向是在客户端(浏览器)进行的,涉及两次请求和响应;转发是在服务器内部进行的,不需要浏览器再次发送请求。

(2)重定向会改变浏览器的URL,而转发不会改变URL。

(3)重定向对浏览器来说是完全透明的,转发对浏览器来说是不可见的。

(4)重定向可以跳转到外部URL,转发只能在服务器内部进行页面跳转。

实操展示:

java 复制代码
response.sendRedirect("test.jsp"); //重定向到test.jsp页面
java 复制代码
response.sendRedirect("www.baidu.com");    //重定向到百度网页

在 JSP 页面中使用过该 sendRedirect() 方法的后面,不建议再写 JSP 脚本代码(包括 return 语句),重定向后就跳转页面了,后续多余的代码反而可能致使运行错误。

**实例:**创建两个 JSP 文件,第一个 index.jsp文件使用 response 的 sendRedirect()方法,重定向到 test.jsp文件。

index.jsp 代码:

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Index Page</title>
</head>
<body>
  <%response.sendRedirect("test.jsp");%>
</body>
</html>

test.jsp 代码:

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Test Page</title>
</head>
<body>
    <form name="form1" method="post" action="">
    用户名:<input name="name" type="text" id="name" style="width:120px"><br>
    密&nbsp;&nbsp;码:<input name="pwd" type="password" id="pwd" style="width:120px"><br>
    <input type="submit" name="Submit" value="提交">
</body>
</html>

运行结果:

如上图所示,index.jsp文件直接重定向到了test.jsp文件,用户在这个过程中是可以看见网址的变换。

2.处理 HTTP 文件头

response 对象设置 HTTP 响应报头,最常用的有,禁用缓存、设置页面自动刷新和定时跳转页面。

(1)禁用缓存

一般情况下,浏览器会对显示的网页内容进行缓存。当用户再次访问页面时浏览器会判断界面是否有变化,没有就可以迅速加载出界面,提高网页显示速度。但是对于安全性要求较高的网站来说,要禁用缓存。

|-----------------|----------------------------------------------------------------------|
| 方法 | 功能描述 |
| setHeader() | 用于设置HTTP响应的头部信息,如响应的内容类型、编码方式、缓存控制。 |
| setDateHeader() | 用于设置响应报文的Date头字段。该方法接受一个时间戳参数,将其转换为GMT格式的日期字符串,并将其设置为响应报文的Date头字段的值。 |
[需要调用response对象的方法]

实操代码:

html 复制代码
<%
    response.setHeader("Cache-Control","no-store");
    response.setDateHeader("Expires",0);
%>

response.setHeader()这一行设置了 Cache-Control 响应头为 no-store,这意味着浏览器和其他缓存机制不应该存储任何关于客户端请求和服务器响应的信息。换句话说,每次请求时,浏览器都会向服务器请求最新的数据,而不是使用缓存的数据。

response.setDateHeader("Expires",0)这一行设置了Expires的响应头为0,表示该响应已经过期。Expires 头通常用于指定一个日期和时间,表示响应的有效期。设置为0意味着响应在任何时候都被视为过期,浏览器应当立即重新请求数据。

(2)设置页面自动刷新

通过设置 HTTP 头可以实现页面的自动刷新。

实操代码:

html 复制代码
<%
response.setHeader("refresh","10");
%>

参数说明:

refresh 表示头字段用于指定浏览器自动刷新页面的时间间隔。

第二个参数为"10",表示刷新页面的时间间隔为10秒。即每隔10秒浏览器会自动刷新页面一次。

3.设置输出缓存

服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区,作为一个传送带慢慢地装运到客户端上。满足三个情况之一就会写到客户端。

  1. JSP 页面的输出信息已经全部写入缓冲区。

  2. 缓冲区已满。

3.在 JSP 页面中,调用了 reponse 对象的 flushBuffer() 方法或 out 对象的 flush()方法。

|-----------------|----------------------------------|
| 方法 | 功能描述 |
| flushBuffer() | 强制将缓冲区的内容输出到客户端 |
| getBufferSize() | 获取响应所使用的缓冲区的实际大小,如果没有使用缓冲区,则返回 0 |
| setBufferSize() | 设置缓冲区的大小 |
| reset() | 清除缓冲区的内容,同时清除状态码和报头 |
| isCommitted() | 检测服务器端是否已经把数据写入客户端 |
[对缓冲区进行配置的方法]

**实操展示:**设置缓冲区的大小为64KB

html 复制代码
<%response.setBufferSize(64);%>

如果将缓冲区的大小设置为 0 KB,则表示不缓冲。

二、session 内置对象

session 会话对象用于保存用户会话,弥补了 HTTP 协议不保存相关信息的缺点。但是客户端长时间不向服务器发出请求,该 session 会话对象就会自动消失,该时间取决于服务器,例如 tomcat 服务器的默认事件为 30 分钟。这个时间可以通过代码更改。

1.创建及获取客户对话

通过 session 对象可以存储或读取客户相关的信息。可以通过 session 对象的 setAttribute()方法和 getAttribute() 方法实现。

setAttribute() 方法 用于将信息保存到 session 范围内,语法格式如下:

html 复制代码
session.setAttribute(String name,Object obj);

参数说明:

name:用于指定作用域在 session 范围内的变量名

obj:保存在 session 范围内的信息。

实操展示:

html 复制代码
session.getAttribute("name",小王);

将用户名"小王" ,保存到了 session 范围内的 name 变量。

getAttribute() 方法 用于获取保存在 session 范围内的信息,语法格式如下:

html 复制代码
getAttribute(String name);

参数说明:

name:指定保存在 session 范围内的关键字,获取对应保存的信息。

**实操展示:**获取到上方保存在session范围内的变量名所包含的值。

html 复制代码
session.getAttribute(name)

getAttribute() 方法的返回值是 Object 类型,如果将获取到的信息赋值给 String 类型的变量,则需要进行强制类型转换或是调用其 toString() 方法。示例代码如下:

java 复制代码
String user=(String)session.getAttribute("username");    //法1:强制类型转换
String use1=session.getAttribute("username").toString();    //法2:使用toString()方法

2.会话中移动指定的绑定对象

对于存储在session会话中的对象以及保存的内容,如果想将其从session对话中移除,可以使用 session 对象的 removeAttribute()方法,语法格式如下:

html 复制代码
removeAttribute(String name)

参数说明:

name:用于指定作用域在 session 范围内的变量名。保证移除的变量名是在session的范围之内,否则会抛出异常。

实操展示:

html 复制代码
<%
session.removeAttribute("username");
%>

将保存在 session 会话中的 username 对象移除(包含保存的信息)。

3.销毁 session 内置对象

session 对象长时间不被调用,会自动消失。但为了开发者可以随时手动销毁session对象,可以通过 session 对象中的 invalidate()方法进行销毁,语法格式如下:

html 复制代码
session.invalidate();

session 对象被销毁后,将不可以再使用该 session 对象,否则会报出 Session already invalidated 异常。

4.会话超时的管理

使用 session 对象时应注意 session 的生命周期,一般是30分钟。但是开发网站要注意 session 会话过期的各种情况,这时就需要调用session的几个方法了。

|--------------------------|------------------------|
| 方法 | 功能描述 |
| getLastAccessedTime() | 返回客户端最后一次与会话相关联的请求时间 |
| getMaxInactiveInterval() | 以秒为单位返回一个会话内两个请求最大时间间隔 |
| setMaxInactiveInterval() | 以秒为单位设置 session 的有效时间 |
[session 对象设置会话生命周期的方法]

实操展示:

html 复制代码
session.setMaxInactiveInterval(1000);

设置session会话有效期为 1000秒,超出则会失效。


总结

以上就是 JSP 内置对象的 response 和 session 对象的简单介绍,补充或指正的地方欢迎在评论区中留言

相关推荐
咸鱼鱼不翻身2 分钟前
Java面试题库——MySQL
java·mysql·面试
昨天今天明天好多天2 分钟前
【Mac】Python 环境管理工具
开发语言·python·macos
西瓜本瓜@10 分钟前
在Android开发中实现静默拍视频
android·java·开发语言·学习·音视频
_.Switch14 分钟前
高效网络自动化:Python在网络基础中的应用
运维·开发语言·网络·python·数据分析·自动化
小旺仔爱代码16 分钟前
AJAX和JSON
前端·ajax·json
2301_80220193关注我18 分钟前
Parameters参数、增删改标签、事务、typeAliases
java·数据库·windows
清灵xmf23 分钟前
JavaScript 中如何识别异步函数?
开发语言·javascript·async·异步函数
听潮阁38 分钟前
【SSM详细教程】-13-SpringMVC详解
java·spring boot·spring·java-ee·tomcat·maven·mybatis
七月巫山晴40 分钟前
QChart中柱形图的简单使用并实现【Qt】
开发语言·数据结构·c++·qt·算法·排序算法