Сервлет с кучей методов, имена которых соответствуют url

Рейтинг: 1Ответов: 1Опубликовано: 27.03.2011

Допустим, такая ситуация:

  1. Имеем сервлет CommentServlet
  2. Имеем следующие url, которые этот сервлет обрабатывает в методе doGet

    localhost/comment?delete=true&id=123
    localhost/comment?remove=true&id=124
    localhost/comment?vote=true&id=19

и т.д.

Как можно сделать так, чтобы можно было вызывать сервлет по адресу:

localhost/comment/delete?id=123
localhost/comment/vote?id=19

и в этом сервлете были соответствующие методы, например:

protected void doGet(... request, ... response) {...}
protected void delete(... request, ... response) {...}
protected void vote(... request, ... response) {...}

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

Ответы

▲ 2Принят

В чистом виде красиво это сделать не получится. Можно сделать через рефлекшны, но это кривизна. Вся проблема в том, что вы хотите получить "плохую" архитектуру.

Нет смысла объединять обработку этих методов в одно сервлет. Сделайте несколько сервлетов и запапьте их на эти URL'ы. Если у них есть общий код, то вынесите его из сервлета, либо сделайте базовый класс для этих сервлетов и общую часть занесите в базовый абстрактный класс.