CRUD应用程序在一个控制器(servlet)中

时间:2011-03-10 02:25:17

标签: java jsp servlets crud

美好的一天!

我打算做一个简单的CRUD应用程序。我打算让我的添加,编辑,删除和查看由一个控制器处理。像这样:

@WebServlet(name="ControllerServlet",
            urlPatterns = {"/add","/edit","/delete","/view"}

然后在我的控制器中使用此代码:

 String userPath = request.getServletPath();
    if (userPath.equals("/add")) {
 }

但我不确定这是否是一种常见做法。无论如何,我想知道这是什么最好的做法?这样做的优点和缺点是什么,而不是分离每个控制器?

提前谢谢。

2 个答案:

答案 0 :(得分:6)

坦率地说,常规练习是采用MVC框架。 Java EE 6提供了JSF 2.0作为基于组件的MVC框架。使用单个bean和单个视图可以实现CRUD。您可以在this answer中找到一个基本示例。唯一的控制器由JSF本身提供,FacesServlet。其他MVC框架遵循的意识形态越来越少。

如果您不想采用MVC框架,因为您希望首先学习JSP / Servlet和/或您的项目不会超出CRUD表单,那么很难指出“正确”的方法。至少,使用多个URL模式和if / else语句是一个不好的标志。你基本上有2个选择。

  1. 只需使用4个独立的servlet即可。使用Servlet 3.0,您不再需要使用web.xml,并且添加另一个servlet类非常容易。每个servlet类都充当一个“动作”类,每个类都有明确的责任。

  2. 使用单个servlet,但不要使用多个URL模式,也不要使用if/else块来确定操作。将其映射到单个网址格式,例如/action/**.do,以便您可以通过action/createaction/read等网址或create.do来调用它, read.do等。然后创建如下的界面

    public interface Action {
        void execute(HttpServletRequest request, HttpServletResponse response);
    }
    

    根据此界面CreateActionReadAction等实施所有操作,并在您的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框架深入研究的方式。

  3. 另见:

答案 1 :(得分:3)

您是否考虑过使用JAX-RS框架(如Jersey)将其作为RESTful服务?然后你利用URI和HTTP操作:PUD,GET,POST,DELETE for CRUD:

例如:

获取http://www.example.com/customer/1

  • 以id = 1
  • 读取客户

删除http://www.example.com/customer/1

  • 删除id = 1
  • 的客户