Приложение CRUD в одном контроллере (сервлете) - PullRequest
6 голосов
/ 10 марта 2011

Добрый день!

Я планирую сделать простое приложение CRUD.Я планирую сделать, чтобы мои добавления, редактирования, удаления и просмотра обрабатывались одним контроллером.Примерно так:

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

, затем просто используйте этот код в моем контроллере:

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

Но я не уверен, что это обычная практика.Во всяком случае, мне интересно, что является лучшей практикой для этого?Каковы плюсы и минусы этого вместо разделения каждого контроллера?

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 10 марта 2011

Честно говоря, общей практикой является принятие инфраструктуры MVC.Java EE 6 предлагает JSF 2.0 из коробки как компонентную основу MVC.CRUD возможен с одним бином и одним представлением.Вы можете найти базовый пример в этом ответе .Единственный контроллер предоставляется самой JSF, FacesServlet.Другие MVC-фреймворки в большей или меньшей степени придерживаются той же идеологии.

Если вы не хотите внедрять MVC-фреймворк, потому что вы хотели бы сначала изучить JSP / Servlets и / или ваш проект не выйдет за рамки CRUDФорма, то трудно указать на «правильный» подход.По крайней мере, использование нескольких шаблонов URL и операторов if / else является плохим знаком.У вас есть в основном 2 варианта.

  1. Просто используйте 4 отдельных сервлета.С Servlet 3.0 вам больше не нужно возиться с web.xml, и действительно легко добавить еще один класс сервлетов.Каждый класс сервлета функционирует как класс «действия», и каждый из них несет четкую ответственность.

  2. Используйте один сервлет, но не используйте несколько шаблонов URL и не используйте if/else блоки для определения действий.Сопоставьте его с одним шаблоном URL-адреса, таким как /action/* или *.do, чтобы его можно было вызывать по URL-адресам, таким как action/create, action/read и т. Д. Или create.do, read.do и т. Д. Затем создайте интерфейскак следует

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

    Реализуйте все действия, основанные на этом интерфейсе, CreateAction, ReadAction и т. д. и получите в своем сервлете Map<String, Action>, который вы заполняете следующим образом при методе init():

    actions.put("create", new CreateAction());
    actions.put("read", new ReadAction());
    // ...
    

    И вызовите его следующим образом (при условии, что используется шаблон URL /action/*)

    actions.get(request.getPathInfo().substring(1)).execute(request, response);
    

    Это также, как средняя структура MVC работает глубоко под прикрытием.

См. Также:

3 голосов
/ 10 марта 2011

Рассматривали ли вы сделать это как службу RESTful с использованием инфраструктуры JAX-RS (например, Джерси)? Затем вы используете URI и HTTP-операции: PUT, GET, POST, DELETE для CRUD:

Например:

GET http://www.example.com/customer/1

  • читает клиента с id = 1

УДАЛИТЬ http://www.example.com/customer/1

  • удаляет клиента с id = 1
...