2012-03-27 64 views
1

我有一個名爲菜單的Servlet產生一些HTML和動態菜單, 我的意思的動態,在菜單中的鏈接每當用戶在一個框架中選擇一個表的變化,這裏是一個快速爲例:如何在另一個Servlet的post方法中包含一個Servlet?

Browse?table=student 
Search?table=student 

Browse?table=professor 
Search?table=professor 

我包括這個servlet中的大多數我的servlet以優化修改開始,我用下面的代碼:

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

但是當我嘗試發送POST請求的Servlet包含以前的代碼,我收到一條錯誤消息: HTTP狀態405 - HTTP POST方法不受此URL

我使用NetBeans 6.9.1和Tomcat 6.0.26和Java版本支持1.6

那麼,有沒有辦法,包括在另一個POST方法我的servlet菜單Servlet的? 還是有另一種解決方案來擁有除Servlet之外的動態菜單?

爲了解釋更多的你們,這是我的Servlet代碼:

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個Servlet時,我纔會工作,但我有太多的工作,我希望他們共享相同的菜單。

所以我所要做的就是製作一個靜態方法,它將表名作爲參數並生成html代碼。 如果我這樣做,我可以從我所有的Servlet中調用我的方法。

+0

菜單servlet應該是''。 – BalusC 2012-03-27 17:08:17

+0

是否可以將jsp包含在servlet中? – Hidalgo 2012-03-27 18:08:10

回答

1

您需要在servlet中提供POST支持。 Netbeans默認使用的Servlet模板爲您執行此操作。但僅僅提供了確實的servlet工作的一個方法:

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

然後在doPost方法,你可以簡單地調用這個方法,在你的doGet,你可以調用這個方法是這樣的:

doEverything(request, response); 

這樣,單個servlet就可以同時處理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

我知道這一點。看到我班的代碼。 – Hidalgo 2012-03-27 17:22:17

+0

但是,您的菜單servlet是否同時提供了doPost和doGet?那就是問題所在。 – 2012-03-27 18:13:37

+0

不,我的Menu servlet只提供了doGet,但其他Servlet支持doGet和doPost,並且它們都使用Menu Servlet。爲了在我的整個應用程序中擁有相同的界面,這是一個好習慣嗎? – Hidalgo 2012-03-27 18:20:11

0

只是一個文森特Ramdhanie的回答擴張:

在您包括您需要實現doPost方法servlet的。我經常看到類似這樣的東西:

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. 
} 
相關問題