美好的一天!
我打算做一个简单的 CRUD 应用程序。我打算让我的添加、编辑、删除和查看由一个 Controller 处理。像这样:
@WebServlet(name="ControllerServlet",
urlPatterns = {"/add","/edit","/delete","/view"}
然后在我的 Controller 中使用这段代码:
String userPath = request.getServletPath();
if (userPath.equals("/add")) {
}
但我不确定这是否是一种常见做法。无论如何,我想知道最好的做法是什么?这样做而不是分离每个 Controller 的优点和缺点是什么?
提前谢谢你。
最佳答案
坦率地说,常见的做法是采用 MVC 框架。 Java EE 6 提供开箱即用的 JSF 2.0 作为基于组件的 MVC 框架。单个 bean 和单个 View 可以实现 CRUD。您可以在 this answer 中找到一个基本示例.唯一的 Controller 由 JSF 自己提供,FacesServlet
.其他 MVC 框架或多或少遵循相同的意识形态。
如果你不想采用 MVC 框架,因为你想先学习 JSP/Servlets 和/或你的项目不会超出 CRUD 形式,那么很难指出“正确”的方法.至少,使用多个 URL 模式和 if/else 语句是一个不好的迹象。您基本上有 2 个选择。
只需使用 4 个独立的 servlet。使用 Servlet 3.0,您无需摆弄
web.xml
再添加另一个 servlet 类真的很容易。每个 servlet 类都充当一个“ Action ”类,并且每个都有明确的职责。使用单个 servlet,但不要使用多个 URL 模式,也不要使用
if/else
block 来确定 Action 。将其映射到单个 URL 模式,例如/action/*
或*.do
这样您就可以通过action/create
等 URL 调用它,action/read
等或通过create.do
,read.do
等。然后创建如下界面public interface Action { void execute(HttpServletRequest request, HttpServletResponse response); }
基于此接口(interface)实现所有 Action ,
CreateAction
,ReadAction
等,并在您的 servlet 中有一个Map<String, Action>
您在init()
期间按如下方式填写方法:actions.put("create", new CreateAction()); actions.put("read", new ReadAction()); // ...
并按如下方式调用它(假设使用了
/action/*
的 URL 模式)actions.get(request.getPathInfo().substring(1)).execute(request, response);
这也是一般 MVC 框架在幕后工作的方式。
另见:
关于java - 一个 Controller (servlet)中的CRUD应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5254769/