嗨,請原諒我的英語,爲什麼從一個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