gpt4 book ai didi

java - HTTPServletRequest 对象 - 封装 - 最佳实践

转载 作者:行者123 更新时间:2023-12-02 10:57:56 24 4
gpt4 key购买 nike

在构建 Java Web 应用程序时,有时我们使用 Form 类作为模型类来“...保存将 ServletRequest 传递给其他组件(例如 validator )的过程。ServletRequest 是 servlet 特定的类型,不应该暴露给应用程序的其他层。”表单类与模型类是相同的类,但不可序列化。

引用来自 Servlets & JSP 和 Spring MVC 教程。我试图理解第二个语句,即 ServletRequest 对象已公开。出于安全原因,这是最佳实践吗?如果有人可以解释,那就太好了。显然,实现这一点需要大量代码,对于我这个初学者来说,这似乎是多余的。

非常感谢,答:

最佳答案

ServletRequest is a servlet-specific type and should not be exposed to other layers of the applications.

如果您的服务、数据访问对象等都绑定(bind)到 ServletRequest 类(例如,它们都采用 ServletRequest 作为参数),那么您有两个主要缺点:

  • 该代码仅在 servlet 上下文中可用:您不能在控制台应用程序中使用它们,也不能在不基于 servlet 规范的 Web 应用程序中使用它们,或者当操作由 HTTP 请求以外的其他内容触发时(例如例如,来自队列的消息)
  • 代码更难阅读、理解和测试

让我们举一个简单的例子。这两个版本的方法之间最容易理解的是:

class TransferForm {
String fromAccountId;
String toAccountId;
BigDecimal amount;

// constructor, methods omitted for brevity
}

void transferMoney(TransferForm form);

void transferMoney(HttpServletRequest request)

知道必须将什么作为参数传递给这两种方法有多容易?

对于第一种情况,情况非常清楚。

第二种情况:请求中的金额在哪里?是一个参数吗?属性?它是如何命名的?它应该有什么类型?如何在测试中创建并填充 HttpServletRequest 实例?

关于java - HTTPServletRequest 对象 - 封装 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51573198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com