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 vs Session 核心区别
| 维度 | 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 中的
application是ServletContext的直接别名,在 Servlet 中需要通过getServletContext()方法获取,二者完全等价; - 由容器统一创建,全局单例,所有用户共享,比如 A 用户设置的
application数据,B、C 用户都能获取到; - 生命周期与 Web 应用绑定,只要容器不停止、应用不重启,
application中的数据就一直存在。
- JSP 中的
-
存储全局共享数据
这是最核心的用法,用于存储整个应用都需要的公共数据,比如网站在线人数统计、应用全局配置、公共常量等。
-
拥有两个map:一是attributeMap,二是initMap<String,String>--->web.xml的配置文件
四、Servlet三大作用域
1.三大作用域核心对比(先理清核心差异)
| 作用域对象 | 对应类型 | 作用范围 | 生命周期 | 核心使用场景 | 数据共享范围 |
|---|---|---|---|---|---|
| Request 作用域 | HttpServletRequest | 单次 HTTP 请求 | 请求开始 → 响应结束 | 同一次请求内的数据传递(如转发) | 仅当前请求 |
| Session 作用域 | HttpSession | 单个用户的整个会话 | 用户首次请求 → 会话失效 | 单个用户的状态保持(如登录信息) | 仅当前用户 |
| Application 作用域 | ServletContext | 整个 Web 应用 | 应用启动 → 应用关闭 | 所有用户共享的全局数据(如在线人数) | 所有用户、所有请求 |
2.总结
- Servlet 三大作用域按范围从小到大:
Request(请求级)→Session(用户级)→Application(应用级); - Request 用于单次请求内的数据传递(转发有效),Session 用于单个用户的状态保持,Application 用于所有用户的全局数据共享;
- 核心使用原则:最小作用域 + 匹配生命周期 + Application 注意线程安全。
浙公网安备 33010602011771号