2012-03-27 3 views
1

Ich habe ein Servlet namens Menüs, das einig HTML und ein dynamisches Menü erzeugt, ich durch dynamische bedeuten, dass die Links im Menü jedes Mal ändern, der Benutzer eine Tabelle in einem Rahmen auswählen, hier ist eine schnelle exemple:Wie fügt man ein Servlet in die Post-Methode eines anderen Servlets ein?

Browse?table=student 
Search?table=student 

Browse?table=professor 
Search?table=professor 

ich dieses Servlets am Anfang der meisten meiner Servlets, um Änderungen zu optimieren enthalten, habe ich den folgenden Code:

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

aber wenn ich versuche, eine Post-Anforderung an Servlets zu senden, die den vorherigen Code enthalten , Erhalte ich eine Fehlermeldung: HTTP-Status 405 - HTTP-Methode POST wird von dieser URL unterstützt

Ich benutze NetBeans 6.9.1 und 6.0.26 TomCat und Java-Version 1.6

So ist es eine Möglichkeit, meine Servlet-Menü in der POST-Methode eines anderen schließen Servlet? oder gibt es eine andere Lösung, um das dynamische Menü als ein Servlet zu haben?

Um mehr zu euch zu erklären, hier ist der Code meiner Servlets:

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 
} 

}

Danke Jungs, ich denke, dass ich eine Lösung,

Die Lösung, die Sie liefern gefunden Ich werde nur arbeiten, wenn ich 1 Servlet habe, aber ich habe zu viele und möchte, dass sie das gleiche Menü teilen.

Also alles, was ich tun muss, ist eine statische Methode, die den Tabellennamen als Parameter und generiert den HTML-Code. Wenn ich so fortfahre, kann ich meine Methode von allen meinen Servlets aufrufen.

+0

Das Menü-Servlet sollte eine '' sein. – BalusC

+0

ist es möglich, JSP in ein Servlet zu integrieren? – Hidalgo

Antwort

1

Sie müssen die POST-Unterstützung im Servlet bereitstellen. Die Servlet-Vorlage, die Netbeans standardmäßig verwendet, erledigt dies für Sie. Aber nur eine einzige Methode zur Verfügung stellen, die die Arbeit des Servlets tut:

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

Dann in der doPost können Sie einfach diese Methode aufrufen und in Ihrem doGet können Sie diese Methode wie folgt aufrufen:

doEverything(request, response); 

Auf diese Weise behandelt das einzelne Servlet sowohl GET als auch POST.


So erweitern auf geposteten Code:

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

Ich bin mir dessen bewusst. Siehe den Code meiner Klasse. – Hidalgo

+0

Aber bietet Ihr Menü-Servlet sowohl DoPost und DoGet? Das ist das Problem. –

+0

Nein, mein Menü-Servlet stellt nur doGet zur Verfügung, aber die anderen Servlets unterstützen doGet und doPost, und sie verwenden das Menü-Servlet in beiden. Um die gleiche Schnittstelle in meiner gesamten Anwendung zu haben, ist es eine gute Praxis? – Hidalgo

0

einfach eine Erweiterung von Vincent Ramdhanie Antwort:

Im Servlet, das Sie Sie brauchen, einschließlich der doPost Verfahren zu implementieren. Ich habe oft so etwas gesehen:

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. 
} 
Verwandte Themen