java - 一个 Controller (servlet)中的CRUD应用程序

标签 java jsp servlets crud

美好的一天!

我打算做一个简单的 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 个选择。

  1. 只需使用 4 个独立的 servlet。使用 Servlet 3.0,您无需摆弄 web.xml再添加另一个 servlet 类真的很容易。每个 servlet 类都充当一个“ Action ”类,并且每个都有明确的职责。

  2. 使用单个 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/

相关文章:

java - 检测客户端何时不再监听服务器

java - 类似SQL的机制来过滤和排序对象

java - 编写一个简单的servlet。通过servlet获取和发送数据

java - 现在servlet已经不用了吗?

java - @RequestBody 没有按预期工作

java - 我可以使用 Java 6 通过 Web Start 运行 JavaFX 应用程序吗?

JavaScript - 将选定的下拉列表值传递给方法

jsp - java.lang.IllegalArgumentException : Servlet mapping specifies an unknown servlet name GCMBroadcast 异常

html - 仅用一种形式替换它

JSP 处理指令未关闭