嗨,请原谅我的英语,为什么从一个servlet派发到另一个servlet会加倍pathInfo?
我有一个主要servlet调度所有用户操作,一个管理对DAO Java类的请求。第一个动作(点击菜单)的作品,并给我正确的URL:projet/admin/groupes/gerer(project/admin/bands/manage)。第二个动作(点击按钮)将pathInfo加倍:projet/admin/groupes/admin/groupes/creer(create)。
如果我参加了双通道进去,它的工作原理,但它不是一个很好的解决方案
呼叫来的servlet从一个JavaScript(如果我尝试再次单击菜单上的,它的三倍!):
switch (name) {
case 'Groupe': // Click on band menu from administration side
console.log('JS: Click on admin menu Groupe');
var url = "admin/groupes/gerer";
location.href = url;
break;
case 'Creer': // Click on 'Creer' button from liste-groupe page
console.log('JS : click on Creer');
var url = "admin/groupes/creer";
location.href = url;
break;
default:
console.log('JS: no click source');
}
带有urlPattern的主要servlet:“/ admin/groupes/*”,我应该在第二种情况下写“/ creer”。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
pathInfo = request.getPathInfo();
servletPath = request.getServletPath();
System.out.println("BandController, pathInfo: " + pathInfo); // TEST CODE
System.out.println("BandController, servletPath: " + servletPath); // TEST CODE
switch (pathInfo) {
// Dispatch to the management servlet
case "/gerer":
System.out.println("BandController : groupes (menu) > BandManagement"); // TEST CODE
dispatch = request.getRequestDispatcher("/action/gerer/listergrp");
dispatch.forward(request, response);
break;
// FIXME fix double URL call!
case "/admin/groupes/creer" :
System.out.println("BandController : liste-groupes.jsp > nouvellefiche.jsp"); // TEST CODE
dispatch = request.getRequestDispatcher("/WEB-INF/jsp/admin/nouvellefiche.jsp");
dispatch.forward(request, response);
break;
default:
System.out.println("BandController : page 404."); // TEST CODE
break;
}
我希望这是足够的信息,我尝试了几种不同类型的路径中没有成功的RequestDispatcher。我只是找到这个话题Understanding URL mapping using DispatcherServlet using alwaysUseFullPath property,谈论双重道路,但不明白答案。
感谢所有帮助(顺便说一下我是一个Java初学者!)
您好并感谢您的回答。 我今天早上才想到,我可能需要添加路径上下文!因为当我使用<%= request.getContextPath()%>将表单直接发送到我的主要servlet时,它仍然有效(我仍然需要了解EL!) 因此,它看起来像在JavaScript文件中使用EL ?它不适合我,但也许我错过了一步? – Klarow
(抱歉,首先使用StackOverFlow ...我无法编辑) 浏览器尝试访问此URL:**/$%7BpageContext.request.contextPath%7D/admin/groupes/gerer ** – Klarow
发生这种情况因为JS文件无权访问请求范围obj。看看我的编辑。 :) – bosco