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

ops/2024/9/23 14:35:24/

上一篇地址:赶紧收藏!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

java">// 设置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

java">// 设置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.ppmy.cn/ops/36692.html

相关文章

纯血鸿蒙APP实战开发——手写绘制及保存图片

介绍 本示例使用drawing库的Pen和Path结合NodeContainer组件实现手写绘制功能。手写板上完成绘制后&#xff0c;通过调用image库的packToFile和packing接口将手写板的绘制内容保存为图片&#xff0c;并将图片文件保存在应用沙箱路径中。 效果图预览 使用说明 在虚线区域手写…

node.js中的断言

assert.ok(value, [message])&#xff1a;如果value不为真&#xff0c;则抛出一个AssertionError&#xff0c;可选地包含message。 const assert require(assert); assert.ok(true); // 没有错误 assert.ok(false, 这里应该是true); // 抛出 AssertionError: 这里应该是tru…

UE5 UMG

锚点 参考链接&#xff1a;虚幻5UI系统&#xff08;UMG&#xff09;基础&#xff08;已完结&#xff09;_哔哩哔哩_bilibili

Java毕业设计 基于SSM 健身中心管理系统

Java毕业设计 基于SSM 健身中心管理系统 SSM 健身中心管理系统 功能介绍 首页 图片轮播 登录注册 场地展示 场地详情 立即租赁 课程展示 课程详情 课程预约 器材展示 器材详情 立即租赁 优惠信息展示 优惠详情 健身资讯 资讯详情 个人中心 收藏 我的预约 我的租赁 后台管理 …

pxe远程安装

PXE 规模化&#xff1a;可以同时装配多台服务器 自动化&#xff1a;自动安装操作系统和各种配置 不需要光盘U盘 前置需要一台PXE服务器 pxe是预启动执行环境&#xff0c;再操作系统之前运行 实验&#xff1a; 首先先关闭防火墙等操作 [rootlocalhost ~]# systemc…

深拷贝和浅拷贝的区别,如何实现一个深拷贝

在JavaScript中&#xff0c;数据类型分为基本数据类型和引用数据类型。 基本数据类型是保存在栈内存中的&#xff0c;引用数据类型的变量是一个指向堆内存中实际对象的引用&#xff0c;这个引用是保存在栈内存中。 浅拷贝 浅拷贝&#xff0c;指的是创建新的数据。 如果原始…

技术周总结 2024.04.29-05.05

文章目录 一、python的数据表处理二、05.05 周日2.1&#xff09;python的一些语法2.2&#xff09;Dubbo2.3) Golang 一、python的数据表处理 1&#xff09;代码作用 下边的代码主要是涉及 python链接数据库&#xff0c;并从数据库中获取到 元祖的返回结果&#xff0c;继续对返…

软件开发者如何保护自己的知识产权?

最近一个关于开源软件的知识产权纠纷的案例&#xff0c;非常有代表性&#xff0c; 其中涉及到的平台openwrt&#xff0c;一口君十几年前曾玩过&#xff0c; 通过这个案例&#xff0c;我们可以学习如何在今后工作中保护自己的知识产权&#xff0c; 以及如何合理直接或者间接利…