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文件中只有一个错误:你的代码看起来很好。
- 检查它是否进入状态。
- 在转发之前检查响应是否已提交。 是的,那么前锋就会失败。
- 最糟糕的情况是,它可能是您的应用服务器的问题。
- 尝试使用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模式。