在构建Java Web应用程序时,有时我们将模型类的Form类用于“ ......将ServletRequest传递给其他组件(例如验证器)。ServletRequest是Servlet特定的类型,不应为“表单类与模型类相同,但不可序列化。
引文来自Servlets&JSP和Spring MVC教程。我正在尝试理解第二条语句,即ServletRequest对象已公开。出于安全原因,这是最佳做法吗?如果有人可以解释,那就太好了。显然,实现此功能需要大量代码,对于我来说,对于初学者而言,这似乎是多余的。
非常感谢, 答:
答案 0 :(得分:1)
ServletRequest是特定于servlet的类型,不应暴露给应用程序的其他层。
如果您的服务,数据访问对象等都绑定到ServletRequest类(例如,它们都以ServletRequest作为参数),那么您有两个主要缺点:
让我们举一个简单的例子。在这两种方法之间最容易理解的是什么:
class TransferForm {
String fromAccountId;
String toAccountId;
BigDecimal amount;
// constructor, methods omitted for brevity
}
void transferMoney(TransferForm form);
或
void transferMoney(HttpServletRequest request)
知道必须将什么作为参数传递给这两种方法有多容易?
在第一种情况下,非常清楚。
在第二种情况下:请求中的金额在哪里?是参数吗?属性?如何命名?应该有什么类型?如何在测试中创建并填充HttpServletRequest实例?