赶紧收藏!2024 年最常见 100道 Java 基础面试题(三十三)

上一篇地址:赶紧收藏!2024 年最常见 100道 Java 基础面试题(三十二)-CSDN博客

六十五、说一下JSP的4种作用域?

在JSP(JavaServer Pages)中,作用域(Scope)是指页面中的变量可以在哪些地方被访问和修改。JSP定义了四种不同的作用域,它们分别是:

  1. 页面作用域(Page Scope)

    • 页面作用域的变量只在创建它们的JSP页面内有效。它们从页面初始化时创建,并在页面执行完毕后销毁。
    • 变量可以是脚本片段(scriptlet)中定义的变量,或者是JSP标签中定义的变量。
  2. 请求作用域(Request Scope)

    • 请求作用域的变量在整个HTTP请求过程中都是可见的,它们从请求开始时创建,并在请求结束时销毁。
    • 这些变量可以跨越多个页面,只要它们都属于同一个HTTP请求。可以使用request对象来存储和获取这些变量。
  3. 会话作用域(Session Scope)

    • 会话作用域的变量与特定的用户会话(Session)关联,它们在用户与服务器的整个会话期间都是可见的。
    • 从用户第一次访问某个页面开始创建,并在用户会话结束时销毁。可以使用session对象来存储和获取会话级别的变量。
  4. 应用作用域(Application Scope)

    • 应用作用域的变量与整个Web应用程序关联,它们在应用程序的生命周期内都是可见的。
    • 这些变量对所有用户和所有会话都是可见的,通常用于存储全局信息,如配置参数、计数器等。可以使用application对象来访问这些变量。

示例代码:

<%-- 页面作用域 --%>
<%String pageScopedVar = "This is page scoped";
%><%-- 请求作用域 --%>
<%request.setAttribute("requestScopedVar", "This is request scoped");
%><%-- 会话作用域 --%>
<%session.setAttribute("sessionScopedVar", "This is session scoped");
%><%-- 应用作用域 --%>
<%application.setAttribute("appScopedVar", "This is application scoped");
%>

在JSP页面中,可以通过内置对象来获取和操作这些作用域的变量:

<%-- 获取请求作用域的变量 --%>
<%String requestScopedVar = (String) request.getAttribute("requestScopedVar");
%><%-- 获取会话作用域的变量 --%>
<%String sessionScopedVar = (String) session.getAttribute("sessionScopedVar");
%><%-- 获取应用作用域的变量 --%>
<%String appScopedVar = (String) application.getAttribute("appScopedVar");
%>

注意事项:

  • 作用域的使用应根据变量的生命周期和可见性需求来确定。
  • 过度使用会话作用域或应用作用域可能导致内存泄漏,因为这些作用域的变量生命周期较长。
  • 在设计JSP页面时,应该尽量使用最小必要作用域的变量,以提高应用程序的性能和可维护性。

总结

  • JSP的四种作用域允许变量在不同的上下文中被访问和修改。
  • 页面作用域适用于单个页面,请求作用域适用于单个HTTP请求,会话作用域适用于用户会话,应用作用域适用于整个Web应用程序。
  • 每种作用域都有其特定的使用场景和生命周期,合理使用作用域可以提高Web应用程序的效率和安全性。

六十六、sessioncookie有什么区别?

sessioncookie都是客户端与服务器之间维持状态的机制,但它们在实现方式、存储位置、安全性和用途等方面存在显著差异:

1. 存储位置

  • Cookie

    • 存储在客户端浏览器中。服务器发送一个cookie给客户端浏览器,浏览器将其存储在cookie存储区。
  • Session

    • 存储在服务器端。服务器为每个会话创建一个唯一的session对象,并将其存储在服务器的内存或持久化存储中。

2. 存储容量

  • Cookie

    • 存储容量较小,一般不超过4KB。浏览器对单个cookie的大小和总的cookie数量都有限制。
  • Session

    • 存储容量较大,受限于服务器的存储能力。可以存储更多、更大的数据。

3. 安全性

  • Cookie

    • 由于存储在客户端,更容易受到恶意攻击,如cookie盗窃。敏感信息不宜存储在cookie中。
  • Session

    • 存储在服务器端,相对更安全。但session ID(用于识别session的标识)通常通过cookie存储,因此仍然需要保护好session ID。

4. 生命周期

  • Cookie

    • 生命周期可以设置为浏览器会话期间,也可以设置为特定的过期时间。一旦过期,cookie将被浏览器删除。
  • Session

    • 生命周期通常由服务器设置的超时时间决定。当用户一段时间内没有任何操作时,session可能会被服务器自动销毁。

5. 跨域问题

  • Cookie

    • 受同源策略限制,浏览器只能发送属于当前域的cookie。
  • Session

    • 不受同源策略影响,因为session存储在服务器端,与客户端的域无关。

6. 使用方式

  • Cookie

    • 主要用于存储一些不太敏感的数据,如用户偏好设置、会话标识(session ID)等。
  • Session

    • 用于存储用户的状态信息,如用户登录信息、购物车内容等。

7. 服务器压力

  • Cookie

    • 由于存储在客户端,不会增加服务器的存储压力。
  • Session

    • 存储在服务器端,如果大量用户使用session,会增加服务器的存储压力。

示例代码:

使用Cookie

// 设置cookie
Cookie cookie = new Cookie("username", "Kimi");
cookie.setMaxAge(60 * 60); // 设置cookie存活时间
cookie.setPath("/"); // 设置cookie的路径
response.addCookie(cookie);// 读取cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {for (Cookie cookie : cookies) {if ("username".equals(cookie.getName())) {String username = cookie.getValue();// 使用username}}
}

使用Session

// 设置session
HttpSession session = request.getSession();
session.setAttribute("username", "Kimi");// 读取session
String username = (String) session.getAttribute("username");

总结

  • Cookie和Session都是为了解决HTTP协议无状态的问题而设计的。
  • Cookie更适合存储非敏感、少量的数据,而Session更适合存储用户状态信息。
  • 使用Session时,需要注意保护好session ID,避免session被盗用。

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

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

相关文章

Vulnhub项目:NAPPING: 1.0.1

1、靶机介绍 靶机地址&#xff1a;Napping: 1.0.1 ~ VulnHub 2、渗透过程 老规矩&#xff0c;先探测&#xff0c;靶机ip&#xff1a;192.168.56.152 本机ip&#xff1a;192.168.56.146 来看一看靶机开放哪些端口&#xff0c;nmap一下 nmap -sS -sV -A -T5 192.168.56.152 开…

k8s ReplicaSet

ReplicaSet 是替代 ReplicationController 的&#xff0c;ReplicaSet 的行为与 ReplicationController 完全相同&#xff0c; 但pod 选择器的表达能力更强。 ReplicaSet 和 ReplicationController 的区别&#xff1a; ReplicationController 的标签选择器只允许包含某个标签的…

jsx基本语法

JSX语法规则 1、定义虚拟DOM&#xff0c;不要写引号&#xff0c;因为不是字符串&#xff1b; 2、标签中混入js表达式要使用 { } const myId aTgUiGu const myData HeLlo,rEact //1.创建虚拟DOM const VDOM ( <h2 id{myId.toLowerCase()}><span>{myData.toLowerCa…

redisson 使用脚本实现判断元素不在队列中则插入的原子操作

脚本逻辑&#xff1a; 取出队列所有元素遍历元素查找值是否存在不存在则推入 final String scriptText """local valuesInTarget redis.call(lrange, KEYS[1], 0, -1);local index 0;for i, v in ipairs(valuesInTarget) doif v value thenindex ibreake…

基于SpringBoot的大学生心理咨询系统

项目介绍 基于Spring Boot技术栈构建的大学生心理咨询系统&#xff0c;旨在提供一个全方位、定制化的心理健康管理平台。系统采用前后端分离架构&#xff0c;后端利用Spring Boot框架进行深度二次开发&#xff0c;以实现高效稳定的服务端逻辑处理和数据交互&#xff1b;前端界…

Dynamics 365: 从0到1了解如何创建Custom API(3) - Custom API的调试之插件调试

对于Custom API的调试&#xff0c;主要有三种方式&#xff1a; 插件代码中添加log插件调试单元测试 对于这三种方式&#xff0c;说白了也就相当于两种&#xff0c;第一种打log&#xff0c;这种方式很多时候我们是在插件调试突然不好使的时候&#xff0c;或者在不调试时还想看…

7-zip下载、安装

7-Zip 官方中文网站 (sparanoid.com) 7-Zip - 程序下载 (sparanoid.com)

【Linux】文件内容相关的命令,补充:管道符

1、查看文件内容 &#xff08;1-1&#xff09;查看文件内容&#xff1a;cat&#xff0c;tac&#xff0c;head&#xff0c;tail 查看文件内容cat 文件名查看文件内容并显示行号cat -n 文件名倒着查看文件内容&#xff08;从最后一行开始&#xff09;tac 文件名查看文件前10行…

latex参考文献引用网址,不显示网址问题

以引用UCI数据集为例 1、加入宏包 \usepackage{url} 2、在参考文献bib文件中加入网址文献 misc{UCI, author {{D. Dua, E. Karra Taniskidou}}, year {2024}, title {UCI Machine Learning Repository}, howpublished {\url{http://archive.ics.uci.edu/ml}} } 完成&#x…

【机器学习系统的构建】从模型开发的过程讲清楚K-Fold 交叉验证 (Cross-Validation)的原理和应用

0、前言 最近在学习集成学习的时候了解到了k折交叉验证&#xff0c;其实在之前学习吴恩达老师的课程中也学过交叉验证&#xff0c;但是当时也不是很明白。这次借着自己的疑问以及网上搜找资料&#xff0c;终于把交叉验证给弄明白了。 在弄清楚前&#xff0c;我有这样几个疑问…

【运维】MySQL清理二进制文件的常见方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、二进制文件介绍二、二进制文件清理方法三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人能够上手操作执行一些简单命令&…

【typescript 小秘籍 - 类型自动推导】

今天发现个typescript的小技巧&#xff0c;原来在vscode里面 typescript是可以根据数据&#xff0c;自动推导其类型的&#xff0c;这样就不用自己去手敲定义了。比如 鼠标移动到person上&#xff0c;可以看到 其自动推导了person的类型 然后直接复制下来 直接使用即可。

Python运维-日志记录、FTP、邮件提醒

本章目录如下&#xff1a; 五、日志记录 5.1、日志模块简介 5.2、logging模块的配置与使用 六、搭建FTP服务器与客户端 6.1、FTP服务器模式 6.2、搭建服务器 6.3、编写FTP客户端程序 七、邮件提醒 7.1、发送邮件 7.2、接收邮件 7.3、实例&#xff1a;将报警信息实时…

基于Flask的岗位就业可视化系统(一)

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 前言 本项目综合了基本数据分析的流程&#xff0c;包括数据采集&#xff08;爬虫&#xff09;、数据清洗、数据存储、数据前后端可视化等 推荐…

ChatGPT-Next-Web漏洞利用分析(CVE-2023-49785)

1. 漏洞介绍 ​ 日常网上冲浪&#xff0c;突然粗看以为是有关Chat-GPT的CVE披露出来了&#xff0c;但是仔细一看原来是ChatGPT-Next-Web的漏洞。漏洞描述大致如下&#xff1a;&#xff08;如果有自己搭建了还没更新的速速修复升级防止被人利用&#xff0c;2.11.3已经出来了&am…

面向对象 01:Java 面向对象相关内容

前言 记录时间 [2024-05-07] 基础篇文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 02&#xff1a;Java 开发环境的搭建&#xff0c;IDEA / Notepad / JDK 安装及环境配置&#xff0c;编写第一个 Java 程序 Java 笔记 11…

个人IP打造孵化运营产业链商业计划书

【干货资料持续更新&#xff0c;以防走丢】 个人IP打造孵化运营产业链商业计划书 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT共90页&#xff08;完整资料包含以下内容&#xff09; 目录 个人IP运营方案&#xff1a; 1. 个人IP定位与构建 1.1 人格画像构…

Terraform输入变量

使用输入变量可以在创建基础设施资源时动态传入值&#xff0c;如果把Terraform代码看作是一个函数&#xff0c;那么输入变量都是函数参数。 Terraform输入变量使用variable块进行定义&#xff0c;如下示例&#xff1a; variable "image_id" {type string # 变量类…

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构&#xff1a;方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…

基于FPGA的累加器及数码管显示VHDL代码Quartus仿真

名称&#xff1a;基于FPGA的累加器及数码管显示VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; 累加器及数码管显示 1、可以通过按键输入1~9 2、数字输入后进行累加&#xff0c;将累加结果显示…