在构建 java web 应用程序时,有时我们使用 Form 类作为我们的模型类来“ ...保存将 ServletRequest 传递给其他组件,例如验证器。ServletRequest 是一个 servlet 特定的类型,不应暴露给其他层应用程序。 ” 表单类与模型类相同,但不可序列化。引用来自 Servlets & JSP 和 Spring MVC 教程。我试图理解第二个语句,即 ServletRequest 对象是公开的。出于安全原因,这是最佳做法吗?如果有人可以解释,那就太好了。显然,实现这一点需要大量代码,对我这个初学者来说,这似乎是多余的。
1 回答
![?](http://img1.sycdn.imooc.com/54584c9c0001489602200220-100-100.jpg)
慕的地8271018
TA贡献1796条经验 获得超4个赞
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 的实例?
添加回答
举报
0/150
提交
取消