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

Servlet复习

Servlet

是一种在 Java EE环境中运行的服务器端 Java 程序,用于处理客户端请求并生成动态响应。

它们通常用于构建 Web 应用程序,是 Java Web 技术的核心部分。

1. 基本概念

  • 定义: Servlet 是一个实现了 javax.servlet.Servlet 接口的 Java 类,能够接收和处理来自客户端(通常是浏览器)的请求,并返回相应的结果。

  • 工作机制: 当客户端发送请求到服务器时,Web 服务器会将该请求转发给相应的 Servlet 进行处理。Servlet 处理完请求后,可以生成 HTML、JSON 或其他类型的数据返回给客户端。

2. 主要功能

  • 处理 HTTP 请求: Servlet 能够处理各种类型的 HTTP 请求,包括 GETPOST

  • 生成动态内容: 根据请求参数或数据库中的数据,Servlet 可以动态生成不同的响应内容。

  • 会话管理: Servlet 可以通过 HTTP 会话跟踪用户状态,使其能够处理用户登录、购物车等功能。

3. 生命周期

Servlet 的生命周期由以下几个阶段组成:

  1. 加载和实例化: Servlet 容器启动时会加载 Servlet 类,并创建其实例。

  2. 初始化: Servlet 容器调用 init() 方法进行初始化,通常在这里进行资源的准备工作,如数据库连接。

  3. 请求处理: 每当有请求到达时,Servlet 容器会调用 service() 方法,根据请求类型(如 doGet()doPost())处理请求。

  4. 销毁: 当 Servlet 容器决定卸载 Servlet 时,会调用 destroy() 方法,进行清理工作。

4.service() 方法

在 Java Servlet 中用于处理客户端的请求。它是 HttpServlet 类中的一个核心方法,通常被重写以实现自定义的请求处理逻辑。具体来说,service() 方法的主要作用包括:

  1. 请求分发:根据请求的 HTTP 方法(如 GETPOSTPUTDELETE 等)来决定调用哪个具体的处理方法,例如 doGet()doPost() 等。

  2. 统一入口service() 方法可以作为请求的统一入口点,允许开发者在这里实现公共的逻辑,比如认证、日志记录、请求参数解析等。

  3. 响应处理:在 service() 方法中,可以设置响应的内容类型和其他响应头信息,并向客户端返回数据。

工作流程

  • 当一个请求到达 Servlet 容器时,容器会调用该 Servlet 的 service() 方法。
  • service() 方法内部会判断请求的 HTTP 方法,并根据不同的方法调用相应的处理逻辑。
  • 处理完成后,service() 方法会将结果返回给客户端。

重写service,传参传值,然后通过判断对比确定是哪一种请求处理

虽然通常推荐直接重写 doGet()doPost() 方法,但如果需要实现更复杂的逻辑,重写 service() 方法是一个有效的方式。例如,可以在 service() 方法中添加日志记录、权限验证等逻辑,然后再将请求分发到具体的处理方法。重写 service() 方法,以实现对不同 HTTP 请求方法(如 GETPOST)的处理。

  1. @WebServlet注解: 使用 @WebServlet 注解定义了这个 Servlet 的 URL 映射,这里是 /customService

  2. 重写 service() 方法:

    • 在 service() 方法中,首先获取当前请求的方法类型。
    • 根据请求的方法类型(GET 或 POST),调用相应的处理方法 doGet() 或 doPost()
    • 如果请求方法不是 GET 或 POST,则向客户端返回 HTTP 405 状态码,表示该方法不被允许。
  3. 处理 GET 请求 (doGet()):

    • 在 doGet() 方法中,设置响应内容类型为 HTML,并向客户端输出简单的 HTML 内容。
  4. 处理 POST 请求 (doPost()):

    • 在 doPost() 方法中,同样设置响应内容类型为 HTML,并向客户端输出简单的 HTML 内容

过滤器(Filter)和监听器(Listener)

过滤器(Filter)和监听器(Listener)在Java EE中都是自动执行的,它们的生命周期由Servlet容器管理。

过滤器(Filter)

自动执行机制

  • 过滤器会在Servlet处理请求之前和之后自动执行。
  • 当用户发起请求时,Servlet容器会根据配置的URL模式找到相应的过滤器,并按照定义的顺序执行它们的 doFilter 方法。

生命周期

  1. 创建:当应用程序启动时,容器会加载所有的过滤器。
  2. 初始化:调用 init() 方法进行初始化。
  3. 过滤请求:每当接收到请求时,调用 doFilter() 方法。
  4. 销毁:当应用程序关闭时,调用 destroy() 方法进行清理。

过滤器(Filter)

定义:过滤器是一种用于对请求和响应进行处理的对象。在Servlet处理请求之前或之后,可以通过过滤器进行一些特定的操作。

功能

  1. 请求预处理:可以在请求到达Servlet之前进行验证、记录日志等。
  2. 响应后处理:可以对响应内容进行修改,例如压缩响应数据。
  3. 链式过滤:多个过滤器可以链接在一起,形成一个过滤器链。

使用场景

  • 身份验证和授权
  • 日志记录
  • 数据压缩
  • 输入数据的预处理

例子:过滤器设置(统一)编码

  1. 注解@WebFilter:指定过滤器的URL模式,这里使用"/*"表示过滤所有请求。
  2. init()方法:用于初始化过滤器,可以在这里进行一次性设置。
  3. doFilter()方法:核心处理逻辑:
    • request.setCharacterEncoding("UTF-8"):设置请求的字符编码为UTF-8。
    • httpResponse.setContentType("text/html;charset=UTF-8"):设置响应的内容类型和字符编码。
    • chain.doFilter(request, response):调用链中的下一个过滤器或目标Servlet。
  4. destroy()方法:用于清理资源,可以在这里释放资源等。

使用注意事项

  • 确保在请求处理的最开始就设置编码,以避免出现编码问题。
  • 根据具体需求修改字符编码,比如可以使用"UTF-8"或者其他编码。
  • 如果项目中有多个过滤器,请考虑它们的执行顺序,以确保编码设置正常工作。

通过这样的过滤器,您可以有效地管理Web应用中的字符编码,避免因编码不一致而导致的问题

监听器(Listener)

定义:监听器是一种用于监听特定事件的对象,它可以对Web应用程序的生命周期事件、会话事件等进行响应。

自动执行机制

  • 监听器会在特定事件发生时自动执行,例如应用程序启动、会话创建等。
  • Servlet容器会监控这些事件并调用相应的监听器方法。
  • 监控应用程序的状态:例如,监听应用程序启动、销毁、会话创建和销毁等事件。

  • 处理资源管理:可以在应用程序启动时初始化资源,在结束时释放资源。

生命周期

  1. 创建:当应用程序启动时,容器会加载所有的监听器。
  2. 初始化:对于 ServletContextListener,调用 contextInitialized() 方法;对于 HttpSessionListener,调用 sessionCreated() 方法等。
  3. 响应事件:当特定事件发生时,例如用户会话创建或销毁,调用对应的方法(如 sessionDestroyed())。
  4. 销毁:当应用程序关闭时,调用 contextDestroyed() 方法。

使用场景

  • 监听应用程序启动和关闭
  • 监听用户会话的创建和销毁
  • 监听属性变化

这两种组件都通过自动执行的方法来增强Web应用的功能,开发者只需实现必要的方法,Servlet容器会负责调用它们。

  • 小结

  • 过滤器用于对请求和响应进行处理,是与请求的生命周期紧密关联的。
  • 监听器用于监控和响应特定的事件,帮助管理应用程序的状态和资源。
  • 过滤器:用于在请求处理过程中根据条件决定是否执行特定逻辑,比如请求日志记录。
  • 监听器:用于监控应用程序的特定事件,比如会话创建和销毁,并可以在这些事件发生时执行逻辑。

Post请求和Get请求

在 web 开发中,GETPOST 请求是 HTTP 协议中最常用的两种请求方法。

主要涉及数据传输方式、可见性、以及对服务器资源的影响。

1. GET 请求

  • 定义: GET 请求用于从服务器获取数据。请求的数据会附加在 URL 后面,以查询字符串的形式发送。

  • 特性:

    • 安全性GET 请求是安全的,不会更改服务器上的资源。
    • 幂等性: 多次请求相同的 URL 会返回相同的结果。
    • 数据长度限制: URL 的长度有限制,通常最大为 2048 字符(具体取决于浏览器和服务器)。
    • 缓存GET 请求可以被缓存,浏览器可以保存以前的请求和响应。
    • 数据可见性:

      • 数据通过 URL 传递,任何人都可以在浏览器的地址栏、网络日志或代理服务器上看到这些数据。这意味着敏感信息(如密码、信用卡号)不应该通过 GET 请求发送。
    • 缓存与重放攻击:

      • GET 请求可能被缓存,重放攻击者可以利用缓存的结果多次发送相同请求,从而可能导致意外的后果。
    • URL 长度限制:

      • 由于 URL 长度有限,无法传递大量数据,这种限制在某些情况下可能会带来问题。
  • 示例:

    GET /search?q=example HTTP/1.1 Host: www.example.com

2. POST 请求

  • 定义: POST 请求用于向服务器发送数据,通常用于提交表单或上传文件。

  • 特性:

    • 安全性POST 请求不是安全的,可能会更改服务器上的资源。
    • 非幂等性: 多次发送相同的 POST 请求可能会导致不同的结果(例如,多次提交表单)。
    • 数据长度限制POST 请求没有严格的大小限制,适合传输大量数据。
    • 不易缓存: 浏览器一般不会缓存 POST 请求。
    • 数据可见性:

      • 数据在请求体中传递,不会直接显示在 URL 中,因此相对于 GET 请求,敏感数据的可见性较低。然而,仍需注意,数据在传输过程中可以被截获,尤其是在未加密的连接上。
    • 不易缓存:

      • POST 请求通常不会被缓存,这减少了重放攻击的风险。
    • 非幂等性:

      • 因为 POST 请求可能修改服务器数据,重复发送同一 POST 请求可能导致多次创建记录或状态改变。因此,开发者需要特别注意处理重复请求的安全性。
    • 适合传输较大数据:

      • POST 请求没有严格的大小限制,可以传输更大量的数据,适合文件上传等场景。
  • 示例:

    POST /submit HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded name=John&age=30

适用场景

  • 使用 GET 请求:

    • 获取数据:如查询、搜索。
    • 生成书签:因 URL 中包含参数。
    • 可被缓存的请求。
  • 使用 POST 请求:

    • 提交表单:如注册、登录。
    • 上传文件。
    • 需修改服务器状态的操作。

安全最佳实践

无论使用 GET 还是 POST 请求,都应遵循以下安全最佳实践:

  • 使用 HTTPS: 确保所有数据传输都通过 HTTPS 加密,以防止中间人攻击和数据窃取。

  • 验证与授权: 对所有请求进行适当的身份验证和授权检查,确保用户只能访问他们有权访问的资源。

  • 输入验证与清理: 对所有输入数据进行验证和清理,以防止注入攻击(如 SQL 注入、XSS)。

  • CSRF 保护: 在 POST 请求中使用 CSRF 令牌,防止跨站请求伪造攻击。

  • 限制数据量: 尽量限制请求中发送的数据量,避免过大的请求影响性能。

总结

  • GET 请求适合获取数据,但在传输敏感信息时不够安全。
  • POST 请求更适合发送数据,尤其是敏感信息,但也要做好相应的安全措施。。

选择合适的请求方式以及实施必要的安全措施是确保 Web 应用安全的关键。


http://www.mrgr.cn/news/50922.html

相关文章:

  • 阿拉伯应用市场的特点
  • jetson nano ubuntu20.04安装ros-Noetic
  • 运行Springboot + Vue 项目
  • 【力扣 | SQL题 | 每日3题】力扣2988,569,1132,1158
  • 大健康零售电商AI知识库:优化用户体验的新引擎
  • Linux 命令 —— grep、tail、head、cat、more、less(查看日志常用命令)
  • 获取vue实例
  • 【Linux】解锁线程基本概念和线程控制,步入多线程学习的大门
  • 2024腾讯全球数字生态大会 | 线上直播活动参与教程
  • redis安装 | 远程连接
  • 利用 PyTorch Lightning 搭建一个文本分类模型
  • Web编程---配置Tomcat
  • 小米12S Ultra工程固件 资源预览 刷写说明 修复NV损坏去除主板电阻图示
  • 爬虫实战总结
  • 【ICPC】The 2021 CCPC Weihai Onsite G
  • LeetCode209.长度最小的子数组
  • PMP敏捷专题课:敏捷原则与理念
  • 使用OpenCV实现基于FisherFaces的人脸识别
  • 【数据结构】:破译排序算法--数字世界的秩序密码(二)
  • 腾讯云视立方·直播 SDK 合规使用指南