Servlet(1.22)

一、Jsp的八个内置对象:

1. request(HttpServletRequest)

  • 作用:封装客户端的 HTTP 请求信息,用来获取请求参数、请求头、Cookie 等。
  • 你图片里的 request.getParameter("username") 就是典型用法,用来获取 URL 或表单中名为 username 的参数值。

2. response(HttpServletResponse)

  • 作用:封装对客户端的 HTTP 响应信息,用来设置响应头、发送响应内容、重定向页面等。
  • 示例:response.sendRedirect("index.jsp") 可以让页面跳转到 index.jsp

3. out(JspWriter)

  • 作用:向客户端输出内容,类似 Java 里的 System.out,但专门用于 Web 页面输出。
  • 示例:out.println("Hello JSP") 会直接在页面上打印文本。

4. session(HttpSession)

  • 作用:存储用户会话期间的信息,用来跟踪用户状态(比如登录后的用户信息)。
  • 示例:session.setAttribute("user", userInfo) 可以把用户对象存入会话,在多个页面间共享
  • 每个用户都有一个唯一jsessionid = 使用UUID生成的 32位随机数。
  • 用户第一次访问网站时,由服务器创建session并配备唯一jsessionid ,当用户离开网站就销毁--->当点击x时不会立刻销毁,会等30min后自动销毁,也可以点登出选择手动销毁。当选择换其他浏览器访问时,是不同的session。
  • sessionAttributeMap<String,Object>

5. application(ServletContext)

  • 作用:代表整个 Web 应用的上下文,用来在整个应用中共享数据,生命周期和应用一致。
  • 示例:application.setAttribute("onlineCount", 100) 可以统计在线人数,所有用户都能访问这个值。

6. pageContext(PageContext)

  • 作用:页面上下文对象,提供对所有内置对象的统一访问,还可以设置页面级别的属性。
  • 示例:pageContext.setAttribute("msg", "success") 可以在当前页面存储一个属性。

7. page(Object)

  • 作用:代表当前 JSP 页面本身,类似 Java 中的 this,实际开发中很少使用。

8. exception(Throwable)

  • 作用:处理页面抛出的异常,但只有在 JSP 页面设置 isErrorPage="true" 时才可用。
  • 示例:exception.getMessage() 可以获取异常的详细信息。

二、Cookie

  • Cookie 是服务器发送给浏览器的一小段文本数据它会被浏览器保存在本地,核心作用是解决 HTTP 协议 “无状态” 的问题,让服务器能记住客户端的状态(比如登录信息、偏好设置)。也是一个Map<String,String>

  • 为什么需要 Cookie?

    HTTP 协议本身是 “无状态” 的 —— 服务器每次收到请求时,都无法直接判断这个请求来自哪个用户,就像每次打电话都要重新自我介绍一样。

    Cookie 就是用来 “记住” 用户身份的 “小纸条”,让服务器能识别重复请求的客户端,实现会话跟踪、个性化体验等功能。

维度 Cookie Session
存储位置 客户端(浏览器) 服务器端(内存 / Redis / 数据库)
大小限制 约 4KB,单域名数量有限 无严格大小限制,可存储更多数据
安全性 存在客户端,易被篡改 / 窃取 存在服务器,相对更安全
依赖关系 Session 通常依赖 Cookie 传递 JSESSIONID 不依赖 Cookie(可通过 URL 重写兜底)
  • Cookie和localStorage区别

    核心定位差异

    • Cookie:本质是「客户端与服务器的会话跟踪工具」,设计目的是让服务器能记住客户端状态,存储的数据会主动参与 HTTP 请求的传输。服务端往客户端存数据,保存在浏览器本地,也可以跨请求使用
    • localStorage:纯「前端本地存储工具」,仅用于在浏览器端保存数据,不会主动与服务器交互。前端放前端取,纯前端,不同页面之间数据共享

    • 关键特性对比表

    维度 Cookie localStorage
    存储大小 约 4KB(单域名下数量通常不超过 20 个) 约 5MB(单域名下)
    生命周期 可设置过期时间(Expires/Max-Age),默认关闭浏览器即失效(会话 Cookie) 永久存储,除非主动通过 JS 删除或清除浏览器缓存
    与服务器交互 每次 HTTP 请求都会自动携带到服务器(可通过 Path/Domain 限制范围) 不会自动发送给服务器,需手动通过 JS 把数据传给后端
    安全性 支持 HttpOnly(防止前端 JS 读取,防 XSS 攻击)、Secure(仅 HTTPS 传输)等安全属性 可被前端 JS 直接读取,易被 XSS 攻击窃取数据
    作用域 受域名、路径(Path)限制,子域名可共享父域名的 Cookie(需配置 Domain 按域名隔离,不同协议(HTTP/HTTPS)、不同端口的同域名也会隔离
    API 易用性 原生 API 简陋,需自己封装读写、删除方法 提供 getItem()/setItem()/removeItem()/clear() 等易用 API

三、Application

  • application全局应用级的上下文对象,本质是 Servlet 规范中的 ServletContext 接口实例,由 Web 容器(如 Tomcat)在应用启动时创建应用关闭时销毁整个 Web 应用只有一个实例,所有用户、所有请求、所有页面都共享这个对象的资源,是作用域最广的内置对象。

  • application 核心本质

    • JSP 中的 applicationServletContext直接别名,在 Servlet 中需要通过 getServletContext() 方法获取,二者完全等价;
    • 由容器统一创建,全局单例,所有用户共享,比如 A 用户设置的 application 数据,B、C 用户都能获取到;
    • 生命周期与 Web 应用绑定,只要容器不停止、应用不重启,application 中的数据就一直存在。
  • 存储全局共享数据

    这是最核心的用法,用于存储整个应用都需要的公共数据,比如网站在线人数统计、应用全局配置、公共常量等。

  • 拥有两个map:一是attributeMap,二是initMap<String,String>--->web.xml的配置文件

四、Servlet三大作用域

1.三大作用域核心对比(先理清核心差异)

作用域对象 对应类型 作用范围 生命周期 核心使用场景 数据共享范围
Request 作用域 HttpServletRequest 单次 HTTP 请求 请求开始 → 响应结束 同一次请求内的数据传递(如转发) 仅当前请求
Session 作用域 HttpSession 单个用户的整个会话 用户首次请求 → 会话失效 单个用户的状态保持(如登录信息) 仅当前用户
Application 作用域 ServletContext 整个 Web 应用 应用启动 → 应用关闭 所有用户共享的全局数据(如在线人数) 所有用户、所有请求

2.总结

  1. Servlet 三大作用域按范围从小到大:Request(请求级)→ Session(用户级)→ Application(应用级);
  2. Request 用于单次请求内的数据传递(转发有效),Session 用于单个用户的状态保持,Application 用于所有用户的全局数据共享;
  3. 核心使用原则:最小作用域 + 匹配生命周期 + Application 注意线程安全。
posted on 2026-01-27 23:12  冬冬咚  阅读(5)  评论(0)    收藏  举报