JSP复习(二)

九大内置对象

在 JSP(JavaServer Pages)中,有九大内置对象,这些对象为开发者提供了常用的功能,帮助简化 JSP 页面中的处理。以下是这九大内置对象:

  1. request:表示客户端请求的对象,可以通过它获取请求参数、请求头等信息。

  2. response:表示服务器响应的对象,可以用来设置响应头、内容类型等。

  3. out:用于向客户端输出内容的对象,可以使用 out.println() 方法输出文本或 HTML。

  4. session:表示当前用户会话的对象,用于存储用户相关的数据,能够在多个页面之间共享。

  5. application:表示整个 Web 应用的上下文对象,用于存储全局共享的数据,所有用户都可以访问。

  6. config:表示 JSP 页面配置的对象,包含了 JSP 的初始化参数和 Servlet 配置。

  7. page:表示当前 JSP 页面自身的对象,通常用于获取当前 JSP 的属性和方法。

  8. pageContext:提供了对其他所有内置对象的访问,并且还可以存储页面范围内的属性,方便使用。

  9. exception:在错误发生时可用的对象,通常在 error-page 指定的处理页面中使用,用于获取异常信息。

这些内置对象使得 JSP 开发更加高效,减少了编写代码的复杂度。

request

代表客户端向服务器发送的请求。它提供了多种方法和属性,使得开发者能够轻松访问 HTTP 请求中的信息。以下是 request 对象的一些常用功能和属性:

常用方法

  1. 获取请求参数

    • getParameter(String name):根据参数名称获取参数值。如 request.getParameter("username")
  2. 获取请求头

    • getHeader(String name):获取指定请求头的值。如 request.getHeader("User-Agent")
  3. 获取请求方法

    • getMethod():返回请求的方法类型(如 GET、POST)。
  4. 获取请求 URI

    • getRequestURI():返回请求的 URI。
  5. 获取请求 URL

    • getRequestURL():返回请求的完整 URL。
  6. 获取查询字符串

    • getQueryString():返回请求的查询字符串部分。

常用属性

  • 请求参数:所有通过 URL 或表单提交的参数都可以通过 request.getParameter() 方法获取。

  • 客户端信息:如 IP 地址可以通过 request.getRemoteAddr() 获取。

  • 上下文路径:可以通过 request.getContextPath() 获取应用的上下文路径。

response

代表服务器向客户端发送的响应。它提供了一些方法和属性,帮助开发者设置响应的状态、内容类型和其他相关信息。以下是 response 对象的一些常用功能和方法:

常用方法

  1. 设置内容类型

    • setContentType(String type):设置响应的 MIME 类型。例如,可以设置为 text/html 或 application/json

    jspCopy Code

    response.setContentType("text/html;charset=UTF-8");
  2. 设置响应头

    • setHeader(String name, String value):添加或修改响应头。

    jspCopy Code

    response.setHeader("Cache-Control", "no-cache");
  3. 设置状态码

    • setStatus(int sc):设置 HTTP 响应状态码,如 200、404、500 等。

    jspCopy Code

    response.setStatus(HttpServletResponse.SC_OK);
  4. 重定向

    • sendRedirect(String location):将客户端重定向到另一个 URL。

    jspCopy Code

    response.sendRedirect("login.jsp");
  5. 获取输出流

    • getWriter():用于获取 PrintWriter 对象,用于向客户端输出数据。

    jspCopy Code

    PrintWriter out = response.getWriter(); out.println("<h1>Hello, World!</h1>");

session

是 JSP 中的一个内置对象,用于管理用户会话的数据。它允许开发者在多个请求之间存储和检索与特定用户相关的信息,这对于实现用户认证、购物车功能等非常有用。

常用方法

  1. 获取会话 ID

    • getId():返回当前会话的唯一标识符。

    jspCopy Code

    String sessionId = session.getId();
  2. 设置会话属性

    • setAttribute(String name, Object value):将对象存储到会话中,以便在后续请求中访问。

    jspCopy Code

    session.setAttribute("username", "JohnDoe");
  3. 获取会话属性

    • getAttribute(String name):根据属性名获取会话中的对象。
    String username = (String) session.getAttribute("username");
  4. 移除会话属性

    • removeAttribute(String name):从会话中移除指定的属性。

    jspCopy Code

    session.removeAttribute("username");
  5. 无效化会话

    • invalidate():使会话失效,清除所有属性。
    session.invalidate();
  6. 检查会话是否新建

    • isNew():判断当前会话是否是新创建的。
    if (session.isNew()) { // 处理新会话的逻辑 }

application

用于访问 Web 应用程序的全局范围内的数据。它允许开发者在不同用户的请求之间共享数据,这对于存储一些全局信息(如应用配置、统计信息等)非常有用。

常用方法

  1. 设置应用程序属性

    • setAttribute(String name, Object value):将对象存储在应用范围内。
    application.setAttribute("appName", "My Web Application");
  2. 获取应用程序属性

    • getAttribute(String name):根据属性名获取应用程序中的对象。
    String appName = (String) application.getAttribute("appName");
  3. 移除应用程序属性

    • removeAttribute(String name):从应用程序中移除指定的属性。
    application.removeAttribute("appName");

区别

session和Application

session创建的对象随着浏览器结束而结束,Application创建的对象随着服务器结束而结束

1. Session 对象

  • 生命周期session 对象的生命周期与用户的会话相关。它在用户打开浏览器并访问 Web 应用程序时创建,通常在以下情况下结束:

    • 用户关闭浏览器。
    • 用户在一段时间内没有与应用程序交互(超时)。
    • 手动使会话失效(使用 session.invalidate() 方法)。
  • 作用范围session 对象用于存储特定用户的状态和数据,如用户登录信息、购物车内容等。这些数据在用户会话期间是可用的,但是一旦会话结束,这些数据也会被清除。

2. Application 对象

  • 生命周期application 对象的生命周期与 Web 应用程序的运行周期相关。它在 Web 应用程序启动时创建,并在应用程序被关闭或重新部署时结束。

  • 作用范围application 对象用于存储全局范围内的数据,这些数据对于所有用户都是共享的。例如,应用程序的配置信息、统计信息、资源池等。在整个应用程序运行期间,这些数据会持续存在,直到应用程序被停止或重启。

总结

  • Session

    • 生命周期:与用户会话相关,浏览器关闭或超时结束。
    • 作用范围:特定于单个用户。
  • Application

    • 生命周期:与整个 Web 应用程序相关,服务器关闭或应用重启时结束。
    • 作用范围:全局共享,适用于所有用户。

这种设计使得 Web 应用能够根据需求有效地管理用户数据和共享数据。

重定向和请求转发

是 Web 开发中常用的两种处理请求的方法。它们在功能和使用场景上有一些重要的区别。以下是对这两者的详细说明:

1. 请求转发(Request Forwarding)

  • 定义:请求转发是将请求从一个资源(如 JSP 或 Servlet)转发到另一个资源的过程。转发是在服务器内部完成的,客户端并不知道发生了转发。

  • 实现方式:通过 RequestDispatcher 接口的 forward() 方法实现。

     

    javaCopy Code

    RequestDispatcher dispatcher = request.getRequestDispatcher("targetPage.jsp"); dispatcher.forward(request, response);
  • 特性

    • 同一请求:请求和响应对象会被共享,原始请求参数和属性仍然可用。
    • 服务器内部处理:URL 不会改变,用户看不到新的 URL。
    • 性能更好:因为没有额外的 HTTP 请求和响应开销。
  • 使用场景:适用于需要在服务器内部处理请求的场景,如在 JSP 页面之间传递数据或控制流。

2. 重定向(Redirecting)

  • 定义:重定向是服务器向客户端发送一个指示浏览器访问另一个 URL 的响应。这意味着客户端会发起一个新的请求。

  • 实现方式:通过 response.sendRedirect() 方法实现。

     

    javaCopy Code

    response.sendRedirect("targetPage.jsp");
  • 特性

    • 新请求:每次重定向都会创建一个新的请求,因此请求参数和属性不会被共享。
    • URL 改变:浏览器地址栏中的 URL 会更新为目标 URL。
    • 额外开销:因为浏览器需要发起新的请求,所以比请求转发稍慢。
  • 使用场景:适用于需要将用户引导到不同页面,或者在处理完表单后避免重复提交(如 POST/Redirect/GET 模式)。

总结

特性请求转发重定向
请求/响应同一请求新请求
URL不改变改变
数据共享可以共享请求参数和属性不能共享
性能更高相对较低
使用场景服务器内部跳转,数据传递用户导航,避免表单重复提交

通过合理选择重定向和请求转发,可以更好地管理 Web 应用的流量和用户体验。

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

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

相关文章

CTF-PWN方向 栈溢出等基础知识笔记(2)

C语言基本函数补充 write函数 ret2syscall 要求有0x80这种系统调用存在 &#xff08;0x0A是回车的意思&#xff09; 案例 通过file查看这个文件 发现是静态编译的文件 所以很多库函数都被编译进去了 但是不存在bin/sh字符串 不存在system和backdoor函数 修改&#xff0c;rea…

纯手柄控制电脑(且不用插鼠标而使用虚拟鼠标)

前言 因电脑升级后&#xff0c;旧主机就作为客厅游戏机使用了&#xff0c;于是想尽量减少设备的插入&#xff0c;单纯的每次只拔插手柄这一项外设就行&#xff0c;于是需要两大步骤即可到位。 安装JoyXoff 一、官网下载并直接安装&#xff1a;JoyXoff 二、默认开机自启&…

【环境搭建】远程服务器搭建ElasticSearch

参考&#xff1a; 非常详细的阿里云服务器安装ElasticSearch过程..._阿里云服务器使用elasticsearch-CSDN博客 服务器平台&#xff1a;AutoDL 注意&#xff1a; 1、切换为非root用户&#xff0c;su 新用户名&#xff0c;否则ES无法启动 2、安装过程中没有出现设置账号密码…

AD9361 在低至 1MHz 的频率下运行

AD9361 在低至 1MHz 的频率下运行 AD -FREQCVT1-EBZ是包含AD9361的FMCOMMS3/4/5板的附加板。虽然完整的芯片级设计包可在此 RF 收发器的ADI产品页面上找到&#xff0c;但有关此卡的信息及其使用方法、围绕它的设计包以及可使其工作的软件可在此处找到。 AD-FREQCVT1-EBZ 模块…

山西农业大学20241015

02-VUE 一. Vue中常用的指令1. Vue指令概述2 Vue中指令的分类3 Vue中指令3.1 内容渲染指令3.2 条件渲染指令3.2.1 v-show3.2.2 v-if3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 v-on--重要3.3.1 内联语句3.3.2 methods中的函数名 一. Vue中常用的指令 1. Vue指令概述 概念: 指…

安装Node.js环境,安装vue工具

一、安装Node.js 去官方网站自行安装自己所需求的安装包 这是下载的官方网站 下载 | Node.js 中文网 给I accept the terms in the License Agreement打上勾然后点击Next 把安装包放到自己所知道的位置,后面一直点Next即可 等待它安装好 然后winr打开命令提示符cmd 二、安装…

MySQL中表的约束

1&#xff0c;概念 表中一定要有各种约束&#xff0c;通过约束&#xff0c;让我们来插入数据库中的数据是符合预期的。 约束本质是通过技术手段&#xff0c;倒逼程序员插入正确的数据&#xff1b;反过来&#xff0c;站在MySQL的角度来单&#xff0c;内部已经插进来的数据&…

YOLOv11改进策略【卷积层】| ParNet 即插即用模块 二次创新C3k2

一、本文介绍 本文记录的是利用ParNet中的基础模块优化YOLOv11的目标检测网络模型。 ParNet block是一个即插即用模块,能够在不增加深度的情况下增加感受野,更好地处理图像中的不同尺度特征,有助于网络对输入数据更全面地理解和学习,从而提升网络的特征提取能力和分类性能…

Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)

文章目录 OWASP 2023 TOP 10CSRF 导图CSRF的基本概念CSRF的工作原理常见CSRF攻击模式CSRF防御策略补充建议应用场景实战防御策略选择1. CSRF Token&#xff08;首选&#xff09;2. SameSite Cookie属性3. 验证Referer和Origin4. 多因素认证 实现方案CSRF Token实现SameSite Coo…

(39)MATLAB生成高斯脉冲及其频谱

文章目录 前言一、MATLAB仿真代码二、仿真结果画图 前言 高斯脉冲在通信中是很重要的调制符号波形&#xff0c;本文使用MATLAB生成高斯脉冲&#xff0c;并使用FFT变换给出其频谱。 一、MATLAB仿真代码 代码如下&#xff1a; % 信号参数 fs 100; % 采样…

自注意力机制self-attention中的KV 缓存

在自注意力机制中&#xff0c;KV 缓存&#xff08;Key-Value Caching&#xff09;主要用于加速模型在推理阶段的计算&#xff0c;尤其是在处理长序列或者生成任务&#xff08;如文本生成&#xff09;时&#xff0c;这种缓存机制可以显著提高效率。 1. KV 缓存的背景 在 Trans…

【Vercel】Vercel部署项目遇到的问题

部署问题1&#xff1a; 问题详情 部署提示报错&#xff0c;vite的命令找不到 13:18:21.159 13:18:21.160npm error This is an error with npm itself. Please report this error at: 13:18:21.160npm error 13:18:221.16 npm error A complete l <https://github.com/np…

【自动驾驶汽车通讯协议】I2C(IIC)总线通讯技术详解

文章目录 0. 前言1. I2C简介2.I2C的工作原理2.1 硬件要求&#xff1a;2.2 半双工通信&#xff1a; 3. 通信时序4. 其他特性4.1 通信速率4.2 抗干扰措施4.3 注意事项 5. 在自动驾驶汽车中的应用5.1 I2C操作模式5.2 I2C的用途 6. 总结 0. 前言 按照国际惯例&#xff0c;首先声明&…

Java—类和对象习题讲解

如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 目录 习题一&#xff1a; 习题二&#xff1a; 习题三&#xff1a;.import static 能够导入一些静态方法 习题四&#xff1a; 习题五&#xff1a; 习题六&#xff1…

【刷题册】2024.10.13 - 2024.10.15

目录 一、2024.10.131.1 BC153 [NOIP2010]数字统计1.2 NC313 两个数组的交集1.2.1 思路一&#xff1a;暴力O(N^2)1.2.2 思路二&#xff1a;hash 1.3 AB5 点击消除 二、2024.10.142.1 BC64⽜⽜的快递2.2 DP4 最⼩花费爬楼梯2.3 数组中两个字符串的最⼩距离 三、2024.10.153.1 BC…

Visual Studio Code基础:使用debugpy调试python程序

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 一、安装调试器插件 在VS code中可以很轻松地调试Python程序&#xff0c;首先需要安装Python调试器插件&#xff0c;如图1所示。 图1 安装调试器插件 Python Debugge…

Redis --- 第四讲 --- 常用数据结构 --- Hash、List

一、Hash哈希类型的基本介绍。 哈希表&#xff1a;之前学过的所有数据结构中&#xff0c;最最重要的。 1、日常开发中&#xff0c;出场频率非常高。 2、面试中&#xff0c;非常重要的考点。 Redis自身已经是键值对结构了。Redis自身的键值对就是通过哈希的方式来组织的。把…

导致动态代理无法使用的原因有哪些?

在动态代理的应用过程中&#xff0c;有时会遇到其无法正常使用的情况。这种现象可能源于多种原因&#xff0c;从网络配置到软件设置&#xff0c;了解和解决这些问题对保持代理的高效运行至关重要。本文将详细探讨导致动态代理无法使用的主要原因及对策&#xff0c;以帮助用户及…

16年408计算机网络

第一题&#xff1a; 解析&#xff1a; 首先我们要清楚R1,R2,R3是路由器&#xff08;网络层&#xff09;&#xff0c;Switch是以太网交换机&#xff08;数据链路层&#xff09;&#xff0c;Hub是集线器&#xff08;物理层&#xff09;。 由此可见路由器实现的最高功能层是3层&am…

如何利用phpstudy创建mysql数据库

phpStudy诞生于2007年&#xff0c;是一款老牌知名的PHP开发集成环境工具&#xff0c;产品历经多次迭代升级&#xff0c;目前有phpStudy经典版、phpStudy V8&#xff08;2019版&#xff09;等等&#xff0c;利用phpstudy可以快速搭建一个mysql环境&#xff0c;接下来我们就开始吧…