java - JSP_哪个更好?转发请求对象还是转发Java Bean?
问题描述
我对 Java 和 JSP 比较陌生。目前正在使用 JSP 和 Servlet 处理 Auth 过程。
假设我正在编写登录过程。
在我看来,我看到了两种方法来做到这一点。
1) Controller 将请求对象从客户端转发到 DAO 或 Model 类
2)Controller接收请求,将数据(如ID,PWD)以Java bean的形式传递给DAO或Model类。
我已经完成了这两件事,并且在功能上都可以正常工作。
所以我不知道什么是更好的编码方式。
这让我想知道另一件事。
如果我只是将来自客户端的请求不仅转发到登录过程而且还转发给其他整个过程,有什么缺点吗?
解决方案
理想情况下,您不应将请求对象传递到 Controller 之外的任何层。让请求对象位于 Controller 本身中,并使用 POJO 或 DTO 对象从 Controller 跨层移动数据。您的代码可能有效,但这不是这样做的“方式”。当您的应用程序变得更大时,您将理解并理解为什么模式很重要。它使生活更轻松并避免所有混乱。并使调试和维护变得更加容易。
关于RequestDispatcher
RequestDispatcher用于将请求转发到 JSP 以呈现您可能需要的数据request parameters
以及request attributes
(例如:从数据库中提取的员工列表)。您实际上是在将请求对象转发给 JSP。在这种情况下,您的请求对象仍在应用程序的表示层中移动。事实上,您的 JSP 稍后会被容器转换为 Servlet(控制器)。这完全没问题,这两条线是一起的:
RequestDispatcher rd = request.getRequestDispatcher("/jspToDisplayAsResponse.jsp");
rd.forward(request, response);
您不应将请求对象传递给其他层,如服务层、DAO层等,除了包含您的 JSP 和控制器的表示层。
推荐阅读
- oracle - 划分列 - oracle
- java - 从 Java 禁用 Docker 容器中的 IPv6
- javascript - Node js和mysql模块连接握手报错
- java - Saga 条目表/ Sagas 集合仍然为空
- javascript - 使用 Angular js 防止 microsoft edge 中的 OPEN 文件提示
- rust - 如何修复错误 E0277: trait bound `[usize]: std::marker::Sized` 不满足?
- c# - '' 是命名空间,但用作类型
- php - 无法从高级自定义字段输出 ('text_field,)
- c# - Xamarin Forms - 如何在列表视图(itemtapped)中获取标签的值/文本?
- firefox - 应用程序在 Firefox 52 中运行,但在 Firefox 61 中它被冻结显示错误