Как включить сервлет в почтовый метод другого сервлета? - PullRequest
1 голос
/ 27 марта 2012

У меня есть сервлет с именем Menu, который генерирует html и динамическое меню, я имею в виду под динамическим, что ссылки в меню меняются каждый раз, когда пользователь выбирает таблицу в кадре, вот быстрый пример:

Browse?table=student
Search?table=student

Browse?table=professor
Search?table=professor

Я включил этот сервлет в начало большинства моих сервлетов, чтобы оптимизировать модификации, я использовал следующий код:

RequestDispatcher dispatcher = request.getRequestDispatcher("/Menu?table="+tableName);
dispatcher.include(request, response);

, но когда я пытаюсь отправить запрос на отправку сервлету, которыйсодержат предыдущий код, я получаю сообщение об ошибке: HTTP Status 405 - метод HTTP POST не поддерживается этим URL-адресом

Я использую NetBeans 6.9.1 и TomCat 6.0.26 и Java версии 1.6

Так есть ли способ включить мое меню сервлета в метод POST другого сервлета?или есть другое решение иметь динамическое меню, отличное от сервлета?

Чтобы объяснить вам, ребята, вот код моего сервлета:

public class ExecuteAnySql extends HttpServlet {

//No problem here
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//code
//include the Menu Servlet
//code
}

//this does not work when I include the Menu Servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//code
//include the Menu Servlet
//code
}

}

Спасибо, ребята, я думаю, что нашел решение,

Решение, которое вы мне предоставите, будет работать, только если у меня есть 1 сервлет, но у меня их слишком много, и я хочу, чтобы они использовали одно и то же меню.

Итак, все, что мне нужно сделать, - это создать статический метод, который принимает имя таблицы в качестве параметра и генерировать HTML-код.Если я продолжу так, я могу вызвать свой метод из всех моих сервлетов.

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Вам необходимо обеспечить поддержку POST в сервлете. Шаблон сервлета, который Netbeans использует по умолчанию, делает это за вас. Но просто предоставьте один метод, который выполняет работу сервлета:

   public void doEverything(HttpServletRequest request, HttpServletResponse response){
          //all your servlet code here
   }

Затем в doPost вы можете просто вызвать этот метод, а в вашем doGet вы можете вызвать этот метод следующим образом:

   doEverything(request, response);

Таким образом, один сервлет обрабатывает как GET, так и POST.


Итак, расширив ваш размещенный код:

public class Menu extends HttpServlet {

//No problem here
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
         doEverything(request, response);
}

//this does not work when I include the Menu Servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {   
        doEverything(request, response);
}

protected void doEverything(HttpServletRequest request, HttpServletResponse response){
    //do actual menu code
    //forward to the requested servlet
}

}
0 голосов
/ 27 марта 2012

Просто расширение ответа Винсента Рамдхани:

В сервлете, который вы включаете, вам нужно реализовать метод doPost. Я часто видел что-то вроде этого:

protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
{
  doGetAndPost(request, response);
}

protected void doPost(final HttpServletRequest request, final HttpServletResponse response)
{
  doGetAndPost(request, response);
}

protected void doGetAndPost(final HttpServletRequest request, final HttpServletResponse response)
{
  ... process requests here.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...