2012-03-27 98 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. 
} 
相关问题