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

new*_*bie 6 java jsp servlets crud

美好的一天!

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

@WebServlet(name="ControllerServlet",
            urlPatterns = {"/add","/edit","/delete","/view"}
Run Code Online (Sandbox Code Playgroud)

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

 String userPath = request.getServletPath();
    if (userPath.equals("/add")) {
 }
Run Code Online (Sandbox Code Playgroud)

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

先感谢您.

Bal*_*usC 6

坦率地说,通常的做法是采用MVC框架.Java EE 6提供了JSF 2.0作为基于组件的MVC框架.使用单个bean和单个视图可以实现CRUD.您可以在此答案中找到一个基本示例.唯一的控制器由JSF本身提供FacesServlet.其他MVC框架遵循更少或更多相同的意识形态.

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

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

  2. 使用单个servlet,但不要使用多个URL模式,也不要使用if/else块来确定操作.地图它在一个单一的URL模式,例如/action/**.do让你可以像URL调用它action/create,action/read等或者通过create.do,read.do等于是像下面创建一个接口

    public interface Action {
        void execute(HttpServletRequest request, HttpServletResponse response);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    实现基于该接口,所有的动作CreateAction,ReadAction等,并在你的servlet一个Map<String, Action>您填写期间,按如下init()方法:

    actions.put("create", new CreateAction());
    actions.put("read", new ReadAction());
    // ...
    
    Run Code Online (Sandbox Code Playgroud)

    并按如下方式调用它(假设使用了URL模式/action/*)

    actions.get(request.getPathInfo().substring(1)).execute(request, response);
    
    Run Code Online (Sandbox Code Playgroud)

    这也是普通MVC框架深入研究的方式.

也可以看看: