JSP 的 response 和 session 内置对象

news2024/11/25 16:44:49

文章目录

  • 前言
  • 一、response 内置对象
    • 1.重定向网页
    • 2.处理 HTTP 文件头
    • 3.设置输出缓存
  • 二、session 内置对象
    • 1.创建及获取客户会话
    • 2.会话中移动指定的绑定对象
    • 3.销毁 session 内置对象
    • 4.会话超时的管理
    • 5. session 对象的应用
  • 总结

前言

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


一、response 内置对象

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

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

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

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

1.重定向网页

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

response.sendRedirect(String path);

参数说明:

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

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

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

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

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

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

         实操展示:

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

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

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

        index.jsp 代码:

<%@ 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 代码:

<%@ 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>

        运行结果:

61f2c69078c3437c801e310ffb47c684.gif

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

2.处理 HTTP 文件头

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

        (1)禁用缓存

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

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

        实操代码:

<%
    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 头可以实现页面的自动刷新。

        实操代码:

<%
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

<%response.setBufferSize(64);%>

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

二、session 内置对象

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

1.创建及获取客户对话

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

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

session.setAttribute(String name,Object obj);

参数说明:

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

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

        实操展示:

session.getAttribute("name",小王);

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

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

getAttribute(String name);

参数说明:

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

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

session.getAttribute(name)

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

        

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

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

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

removeAttribute(String name)

 参数说明:

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

        实操展示: 

<%
session.removeAttribute("username");
%>

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

3.销毁 session 内置对象

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

session.invalidate();

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

4.会话超时的管理

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

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

         实操展示:

session.setMaxInactiveInterval(1000);

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


总结

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux tar 打包文件去掉文件所在路径

一、准备目录 /root/tmp/images /root/tmp/images2 执行命令打包目录/root/tmp/images 到 /root/tmp/images.tar.gz 再解压到/root/tmp/images2 cd /root/tmp/images && tar -cvzf images.tar.gz * && mv images.tar.gz /root/tmp/ tar -C /root/tmp/image…

ctf.bugku-baby lfi 2

题目来源&#xff1a;baby lfi 2 - Bugku CTF平台 访问页面 翻译解析&#xff1a;百度翻译-您的超级翻译伙伴&#xff08;文本、文档翻译&#xff09; (baidu.com) LFI Warmups- level 2 -本地文件包含&#xff08;Local File Inclusion&#xff0c;简称LFI&#xff09; Hello…

力扣面试150 交错字符串 二维DP

Problem: 97. 交错字符串 &#x1f468;‍&#x1f3eb; 参考题解 class Solution {public boolean isInterleave(String s1, String s2, String s3) {int m s1.length();int n s2.length();if(s3.length() ! m n) return false;boolean[][] dp new boolean[m1][n1];dp[0]…

ZYNQ使用XGPIO驱动外设模块(后半部分)

目录 注意重点&#xff1a; 一、SDK代码开发部分&#xff1a; 显示所需的字符编码&#xff1a; 1.用于显示8x16的字符函数&#xff1a; 2.绘制图片: 3.清楚给定两个坐标之间的显示&#xff1a; 4.显示16*32的阿拉伯数字字符&#xff1a; 5.显示16*32的整型数字&#xff…

Excel:vlookup函数实现查找

1.要查找宋江的英语&#xff0c;把鼠标放在对应单元格然后开始编辑 2.选中所选区域&#xff0c;点击F4锁定区域&#xff0c;不然下拉填充的时候会变VLOOKUP 在查找时有严格要求&#xff0c;查找值必须在所选区域的第一列&#xff0c;因此如果你的查找值不在第一列&#xff0c;可…

TGRS 2024 面向雾天遥感图像的定向目标检测算法

TGRS 2024 | 面向雾天遥感图像的定向目标检测算法 论文信息 摘要 目前&#xff0c;大量工作集中在航空目标检测上&#xff0c;并取得了良好的结果。尽管这些方法在传统数据集上取得了有希望的结果&#xff0c;但在恶劣天气条件下捕获的低质量图像中定位对象仍然具有挑战性。目…

RabbitMQ 入门(四)SpringAMQP五种消息类型

一、WorkQueue(工作消息队列) Work queues&#xff0c;也被称为&#xff08;Task queues&#xff09;&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于…

【亲测可行】ubuntu下载安装c++版opencv4.7.0和4.5.0 安装opencv4.5.0报错及解决方法

文章目录 &#x1f315;系统配置&#x1f315;打开终端&#xff0c;退出anacoda激活环境(如果有的话)&#x1f315;安装依赖&#x1f319;安装g, cmake, make, wget, unzip&#xff0c;若已安装&#xff0c;此步跳过&#x1f319;安装opencv依赖的库&#x1f319;安装可选依赖 …

关于md5强比较和弱比较绕过的实验

在ctf比赛题中我们的md5强弱比较的绕过题型很多&#xff0c;大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。 MD5弱比较 比较的步骤 在进行弱比较时&#xff0c;PHP会按照以下步骤执行&#xff1a; 确定数据类型&#xff1a;检查参与比较的两…

要笑死了java

有一天&#xff0c;Java开发者Jack对他的朋友说&#xff1a;“最近我总感觉自己被逼得喘不过气。” 朋友问&#xff1a;“为什么啊&#xff1f;” Jack叹了口气道&#xff1a;“因为我一直在try里&#xff0c;但从来没有catch到过break&#xff01;” 为什么程序员总是分不清圣…

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化 零、前言 最近换了Linux系统&#xff0c;但是写教程做PPT的时候还是得用到绘图软件&#xff0c;上网一查&#xff0c;总结对比之后发现Krita比较好用&#xff0c;故此讲解一下如何安装和汉化Krita。 壹、安装 安装很简…

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系 MutipartFile是spring的一部分&#xff0c;File则是java的标准类MutipartFile用于接收web传递的文件&#xff0c;File操作本地系统的文件 MutipartFile 转换File的三种方式 使用MutipartFile 自带的transferTo方法使用java自带的FileOutPutStream流使用java自…

AirServer v7.2.7 破解版 – iPhone屏幕镜像工具

AirServer v7.2.7 破解版 – iPhone屏幕镜像工具可以将你的Mac转变为一个通用的镜像接收器&#xff0c;除了无法接收Miracast外&#xff0c;你可以使用内置的AirPlay或Google Cast基于屏幕投影功能来镜像你的设备屏幕&#xff1b;一次一个或同时投影到AirServer。用户可以从任何…

基于stm32的HAL库的串口实现不定长中断(空闲中断)(四)

串口实现不定长中断&#xff08;空闲中断&#xff09; 目录 串口实现不定长中断&#xff08;空闲中断&#xff09; 1、串口头文件 2、串口初始化配置 3、msp公用的一个函数这里有三个串口&#xff0c;都会调用msp先进行一个判断 4、对接收数组进行清空 5、中断服务函数--…

HDLBits中文版,标准参考答案 | 3.2.5 Finite State Machines | 有限状态机(5)

关注 望森FPGA 查看更多FPGA资讯 这是望森的第 20 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 Q6b: FSM next-state logic | Q6b&#xff1a;FSM 下一状态逻辑 2 Q6c: FSM one-hot next-state logic | Q6c&#xff1a;FSM 独热下一状态逻辑 3 Q6: FSM 4 Q2a: FSM 5 Q2b…

R编程环境的搭建

【图书推荐】《R语言医学数据分析实践》-CSDN博客 R语言对编程环境的要求不高&#xff0c;可以在多种操作系统平台上运行&#xff0c;包括Windows、macOS和Linux。要运行R语言&#xff0c;需要安装R解释器。可以从R语言的官方网站下载和安装最新版本。R语言还需要一个集成开发…

【可答疑】基于51单片机的水位检测系统(含仿真、代码、报告、演示视频等)

✨哈喽大家好&#xff0c;这里是每天一杯冰美式oh&#xff0c;985电子本硕&#xff0c;大厂嵌入式在职0.3年&#xff0c;业余时间做做单片机小项目&#xff0c;有需要也可以提供就业指导&#xff08;免费&#xff09;~ &#x1f431;‍&#x1f409;这是51单片机毕业设计100篇…

postman变量,断言,参数化

环境变量 1.创建环境变量 正式环境是错误的&#xff0c;方便验证环境变化 2.在请求中添加变量 3.运行前选择环境变量 全局变量 能够在任何接口访问的变量 console中打印日志 console.log(responseBody);//将数据解析为json格式 var data JSON.parse(responseBody); conso…

HTML(七)表格

在HTML中&#xff0c;表格的标准形式如下&#xff1a; <table></table> 使用上面的语言&#xff0c;就已经生成了一个表格&#xff0c;只不过这个表格什么都没有 那么&#xff0c;该如何让表格存在东西呢&#xff1f; 首先&#xff0c;我们需要使用到<tr> …

sqli-labs less-26 空格绕过

空格绕过 过滤空格 用Tab代替空格%20 %09 %0a %0b %0c %0d %a0 //() 绕过空格注释符绕过//–%20//#–- -;%00; 空白字符绕过SQLite3 —— 0A,0D,0c,09,20 MYSQL 09,0A,0B,0B,0D,A0,20 PosgressSQL 0A,0D,0C,09,20 Oracle_11g 00,0A,0D,0C,09,20 MSSQL 01,02,03,04,05,06,07,…