Java servlet不会调度到另一个servlet

我有2个servlet,“HomeController”和“SearchController”。 在home.jsp上我有一个表单,其中包含一个搜索框,当提交的操作为“搜索”时

所以SearchController的第一件事就是:

  @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!validator.isValidAlphaOnly(request.getParameter("breed"))) { request.setAttribute("error", "Breed search term invalid. Enter only letters"); RequestDispatcher requestVar = request.getRequestDispatcher("/Home"); requestVar.forward(request, response); } else { processRequest(request, response); } } 

除非我有以下映射,否则不会去/ Home:

   HomeController Controllers.HomeController   SearchController Controllers.SearchController   DogController Controllers.DogController   LogoutController Controllers.LogoutController   UpdateController Controllers.UpdateController   AddController Controllers.AddController   SearchController /Search   LogoutController /Logout   UpdateController /Update   AddController /Add   DogController /Dog/View/* /Dog/Edit/* /Dog/Add   HomeController /Home /  

您可以使用getNamedDispatcher:

 ServletContext context = getServletContext(); RequestDispatcher requestVar = context.getNamedDispatcher("HomeController"); 

好吧,对于一个你的servlet映射配置看起来不太正确:你有这个:

  SearchController /Search    HomeController 

注意2个servlet-mapping行?

我希望你的web.xml文件中只有一个错误:你的代码看起来很好。

  1. 检查它是否进入状态。
  2. 在转发之前检查响应是否已提交。 是的,那么前锋就会失败。
  3. 最糟糕的情况是,它可能是您的应用服务器的问题。
  4. 尝试使用ServletContext.getNamedDispatcher(“HomeController”); 作为备选。

我想我找到了你的问题,你的代码实际上没问题,web.xml是有问题的:

  HomeController /Home /  

servlet映射中有多个url-patterns。 试试这个

  HomeController /   HomeController /Home  

它可能会解决您的问题,Web容器有时会非常挑剔这些细节。

资料来源: http : //java.sun.com/xml/ns/j2ee/web-app_2_4.xsd

xsd指定servlet映射类型:

     

那里没有多个url模式。