HTTPServletRequest对象-封装-最佳做法

时间:2018-07-28 16:25:37

标签: java servlets

在构建Java Web应用程序时,有时我们将模型类的Form类用于“ ......将ServletRequest传递给其他组件(例如验证器)。ServletRequest是Servlet特定的类型,不应为“表单类与模型类相同,但不可序列化。

引文来自Servlets&JSP和Spring MVC教程。我正在尝试理解第二条语句,即ServletRequest对象已公开。出于安全原因,这是最佳做法吗?如果有人可以解释,那就太好了。显然,实现此功能需要大量代码,对于我来说,对于初学者而言,这似乎是多余的。

非常感谢, 答:

1 个答案:

答案 0 :(得分:1)

  

ServletRequest是特定于servlet的类型,不应暴露给应用程序的其他层。

如果您的服务,数据访问对象等都绑定到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实例?

相关问题