2014-01-10 3 views
-1

Я читал довольно много о doPost(), doGet() и service() и REST, но я пришел к вопросу, t найти ответ. Этот вопрос может быть более субъективным, поскольку он связан с эстетикой URL, а не с соглашением.doPost(), doGet() и service() и шаблоны URL

Дело в том, при организации структуры проекта, иногда, если он достаточно мал, я предпочел бы иметь один единственный сервлет с различными методами для WebSite asigned с помощью «GET» параметра говорят

http://localhost/Servlet?option=METHOD 

Однако это вызывает конфликт при попытке отделить «GET» от «POST». Теперь то, что я прошу здесь, - это если иметь «хороший» (субъективный взгляд) URL-адрес, означающий его наличие в этом формате, будет ли использовать метод service() как лучший способ использования?

Я открыт для предложений, как с использованием, например

http://localhost/Servlet/Option 

Но как бы я идти о реализации такого формата также возможность передать получить параметры, как

http://localhost/Servlet/Option?param=value 

ответ

1

Вы можете просто сделать один вызов другого для реализации обоих:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
{ 
    doGet(request, response); 
} 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
{ 
    ....... 
} 

Что касается обслуживания(), я не знаю, почему люди переопределяют его. В документации (http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html) прямо сказано:

Практически нет оснований переопределять метод обслуживания. служба обрабатывает стандартные HTTP запросы, отправив их методам обработчика для каждого типа HTTP-запроса (методы doXXX, перечисленные выше).

РЕДАКТИРОВАТЬ: Я вижу, теперь вопрос в том, что в одном сервлете есть много методов, дифференцированных по параметру. Да, это плохая практика. Вы должны разделить разные операции на разные сервлеты. И в пользовательском интерфейсе лучше использовать разные формы для разных операций, а не одну форму со многими кнопками отправки. Его гораздо проще сломать сервлет кода спагетти, управляемый связью if-statement при редактировании.

+0

Я делаю это в настоящее время для решения этой проблемы, но я прочитал в другом вопросе здесь, в SO, что считается плохой практикой. Я ищу разные способы взглянуть на это, что можно считать хорошей практикой. – alexhg11

+0

Они, несомненно, говорят о некотором составленном и непрактичном правиле, таком как «POST следует использовать только для сервлетов, которые меняют данные, а GET всегда следует использовать при извлечении данных». Но в реальной жизни я обычно использую POST почти исключительно для обоих, потому что я не хочу, чтобы параметры отображались в адресной строке. Когда я хочу иметь возможность связываться с параметром там, я стараюсь реализовать оба варианта, как указано выше. – developerwjk

+0

Есть все основания не применять GET для сервлетов, которые меняют данные. Только внедрение POST для тех, кто будет отсеивать несколько сценариев детишек, которые знают только, как взломать из адресной строки. – developerwjk

Смежные вопросы