当前位置: 首页 > news >正文

Servlet进阶

文章目录

    • Cookie 对象
      • 简介
      • 创建、发送与获取
      • 到期时间设置
      • 路径设置
      • 注意点
    • HttpSession 对象
      • 介绍与 JSESSIONID
      • Session 域对象
      • Session 对象的销毁
    • ServletContext 对象
      • 对象获取与常用方法
      • 三大域对象对比
    • 文件上传与下载
      • 文件上传
      • 文件下载
    • 过滤器(Filter)
      • 核心定义
      • 核心特性
      • 实现步骤
      • 经典实例
        • 请求乱码处理
        • 用户非法访问拦截
    • 监听器(Listener)
      • 核心定义
      • 分类
      • 实现步骤
      • 经典实例:在线人数统计

Cookie 对象

简介

  • 浏览器端存储技术, Cookie 是服务器端保存在客户端的信息,下次请求时带回服务器,用于记住密码、跟踪会话等
  • 格式:键值对用 “=” 连接,多个键值对用 “;” 分隔,存储在客户端,安全性较差

创建、发送与获取

  • 创建与发送:Cookie cookie = new Cookie("key", "value"); response.addCookie(cookie);
  • 获取:Cookie[] cookies = request.getCookies();,遍历数组通过getName()getValue()获取键值(需判断数组非空)
// 获取Cookie数组Cookie[] cookies = request.getCookies();
// 判断数组是否为空if (cookies != null && cookies.length > 0) {
// 遍历Cookie数组for (Cookie cookie : cookies){System.out.println(cookie.getName());System.out.println(cookie.getValue());}}

到期时间设置

  • 负整数:默认值(-1),仅存于浏览器内存,关闭浏览器失效
  • 正整数:存储指定秒数,保存到硬盘,重启电脑仍有效(如cookie.setMaxAge(3*24*60*60)设置 3 天失效)
  • 0:删除 Cookie(浏览器内存和硬盘中均删除)

路径设置

  • 路径决定服务器请求是否加载该 Cookie,默认路径为当前项目路径(/项目名
  • 常见场景:cookie.setPath("/")(当前服务器下所有项目可访问)、cookie.setPath("/项目名/目录")(仅指定目录下资源可访问)

注意点

  • 不支持中文:需通过URLEncoder.encode()编码,URLDecoder.decode()解码
  • 同名 Cookie:服务器发送重复 Cookie 会覆盖原有 Cookie
  • 存储限制:不同浏览器对 Cookie 的存储数量和大小有上限(一般为4kb),且不能跨浏览器、跨电脑共享

总结:当访问的路径包含了cookie的路径时,则该请求将带上该cookie;如果访问路径不包含cookie路径,则该请求不会携带该cookie

HttpSession 对象

介绍与 JSESSIONID

  • 服务器端会话技术,用于标识一次会话,在用户多次请求间共享数据,依赖 Cookie 实现
  • JSESSIONID:服务器创建 Session 时生成的唯一标识,通过 Cookie 发送给客户端(默认关闭浏览器失效),客户端下次请求携带该 Cookie,服务器通过它找到对应 Session

Session 域对象

  • 作用:在一次会话中共享数据,请求转发和重定向均有效。
  • 核心方法:
  • session.setAttribute("key", "value")(设置数据)

    session.getAttribute("key")(获取数据)session.removeAttribute("key")(删除数据)

Session 对象的销毁

  • 默认时间到期:Tomcat 默认 30 分钟不活动失效,可通过 conf/web.xml 的<session-timeout>修改(不建议)
  • 手动设置:session.setMaxInactiveInterval(秒)(设置最大不活动时间)、session.invalidate()(立刻销毁)
  • 其他情况:关闭浏览器(JSESSIONID 失效)、关闭服务器,Session 均会销毁

ServletContext 对象

对象获取与常用方法

  • 每个 Web 应用仅有一个 ServletContext 对象(application对象),服务器启动时创建,关闭时销毁
  • 获取方式:通过 request、session、ServletConfig 或直接调用getServletContext()获取
    1. 通过 request 对象获取

    ServletContext context = request.getServletContext();

    1. 通过 HttpSession 对象获取:

    ServletContext context = session.getServletContext();

    1. 通过 ServletConfig 对象获取

    // 在 Servlet 的 init 方法中(或任何可获取 ServletConfig 的地方)

    ServletContext context = getServletConfig().getServletContext();

    1. 直接获取

    ServletContext context = getServletContext();

  • 常用方法:getRealPath("/")(获取项目真实路径)、getServerInfo()(获取服务器版本信息)

三大域对象对比

  • 作用:在整个应用程序中共享数据,数据一旦存储未手动移除则持续存在
  • 三大域对象:
    • request 域:一次请求中有效,请求转发有效、重定向失效

    • session 域:一次会话中有效,请求转发和重定向均有效,Session 销毁后失效

    • ServletContext 域:整个应用程序中有效,服务器关闭后失效

文件上传与下载

文件上传

  • 前端页面:表单需满足method="post"enctype="multipart/form-data",包含文件域(<input type="file" name="文件名">
  • 后端实现:Servlet 需添加@MultipartConfig注解,通过request.getPart("文件域name")获取 Part 对象,调用part.getSubmittedFileName()获取文件名,part.write(存储路径+文件名)保存文件

文件下载

  • 超链接下载:浏览器不识别的资源自动下载,识别的资源需通过download属性强制下载(如<a href="文件路径" download>
  • 后台实现:设置响应类型(response.setContentType("application/x-msdownload"))、响应头(Content-Disposition: attachment;filename=文件名),通过输入流读取服务器文件,输出流写入响应发送给客户端(货拉拉模式)

过滤器(Filter)

核心定义

Filter 用于在 Servlet 之前预处理 Request 或后处理 Response

核心特性

  • 执行流程:请求时按配置顺序执行过滤器,响应时按相反顺序执行
  • 核心能力:拦截请求 / 响应、修改头信息和数据、控制是否放行目标资源

实现步骤

  1. 编写 Java 类实现 javax.servlet.Filter 接口,重写 init()doFilter()destroy() 方法
  2. 通过 @WebFilter 注解配置拦截的资源(如 /* 表示拦截所有资源)
  3. 关键对象 FilterChain:调用其 doFilter() 方法表示放行,否则拦截资源访问

经典实例

请求乱码处理
  • POST 请求:直接通过 request.setCharacterEncoding("UTF-8") 处理
  • GET 请求(Tomcat8 以下):通过 new String(request.getParameter("参数名").getBytes("ISO-8859-1"),"UTF-8") 转码,可通过自定义 HttpServletRequestWrapper 子类统一处理
用户非法访问拦截
  • 拦截范围:所有资源(/*
  • 放行场景:登录 / 注册页面、静态资源(css/js/image)、登录 / 注册操作、已登录状态(通过 Session 判断)
  • 拦截逻辑:未满足放行条件时,重定向至登录页面

监听器(Listener)

核心定义

Servlet 中的特殊类,用于监听 web 容器中的特定事件(如对象创建 / 销毁、属性变化),可在事件前后添加处理逻辑

分类

  • 生命周期监听:ServletRequestListenerHttpSessionListenerServletContextListener
  • 属性变化监听:ServletRequestAttributeListenerHttpSessionAttributeListenerServletContextAttributeListener
  • Session 对象监听:由 JavaBean 直接实现对应接口

实现步骤

  1. 编写 Java 类实现对应监听器接口(如 HttpSessionListener
  2. 通过 @WebListener 注解完成配置

经典实例:在线人数统计

  • 核心接口:HttpSessionListener,监听 Session 的创建(sessionCreated())和销毁(sessionDestroyed()
  • 计数逻辑:Session 创建时在线人数 +1,销毁时 -1,将计数存储在 ServletContext 作用域(全局共享)
  • 辅助 Servlet:提供登录、退出功能,读取全局在线人数并展示
http://www.dtcms.com/a/610030.html

相关文章:

  • 计算机视觉——图像数据增强从原理到落地的全解析
  • 【MATLAB例程】2雷达二维目标跟踪滤波系统-UKF(无迹卡尔曼滤波)实现,目标匀速运动模型(带扰动)。附代码下载链接
  • yolov5/8/9/10/11/12/13+deep-oc-sort算法的目标跟踪实现
  • 网站维护花费个人备案网站做app
  • 用Scrapyd爬取豆瓣图书Top250
  • 数据分析笔记06:假设检验
  • 【论文阅读17】-LLM-TSFD:一种基于大型语言模型的工业时间序列人机回路故障诊断方法
  • Elasticsearch 面试题精编(26题|含答案|分类整理)
  • 专业格泰网站建设宝塔 怎么做网站
  • app做好了网站怎么做1千万人网站维护成本
  • 网站设计价格大概多少宁波seo关键词优化服务
  • AIGC总结二:Stable Diffusion 的训练方式、使用流程、硬件要求、实际应用场景
  • 大疆Action 6 ,pocket3及 action 5 Pro 该如何选择?
  • 银川网站开发培训案例分析网站
  • 谷歌云数据库服务概览:关系型与 NoSQL 的多元选择与应用场景解析
  • 自动驾驶环境下的多目标检测与识别_YOLOv8改进实践
  • 运动学模型推导 + 离散化 + 工程化版本(适用于前方单舵轮 AGV / 自动驾驶 / MPC)
  • 微信小程序中 WebView 组件的使用与应用场景
  • UE5导入的CAD文件零件如何被Merge?
  • 从无形IP到AI万象,安谋科技Arm China“周易”X3 NPU 发布!
  • 微信小程序可以做视频网站吗滑坡毕业设计代做网站
  • Windows 下 Eclipse + MinGW 写 C++ 环境
  • 美国税务表格W-2/1099/W-9/W-4/I-9详解:中国投资者跨境经营合规与战略指南
  • 外贸网站如何推广优化网站备案号取消原因
  • MySQL 查看有哪些表
  • 衡水做网站推广找谁wordpress 图片托管
  • 第一章 函数与极限 7.无穷小的比较
  • CMake 中 install 的使用原因和使用方法
  • 网站宝 添加二级域名怎样在工商局网站做申请登记
  • langchain langGraph 中streaming 流式输出 stream_mode