2009-06-23 66 views
3

我有一個servlet,看起來是這樣的:如何在轉發到JSP時檢測Java Servlet中的URL?

public class ExampleServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.getWriter().println(request.getPathInfo()); 
    } 
} 

與像一個web.xml映射:

<servlet> 
    <servlet-name>example</servlet-name> 
    <servlet-class>com.example.ExampleServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>example</servlet-name> 
    <url-pattern>/example/*</url-pattern> 
</servlet-mapping> 

,這讓我正是我期待......如果我去http://localhost:8080/example/foo它打印「/ foo」。但是,如果我改變servlet來轉發到JSP文件:

public class ExampleServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // do something here to check the value of request.getPathInfo() 
     request.getRequestDispatcher("whatever.jsp").forward(request, response); 
    } 
} 

然後當我檢查getPathInfo(的價值),現在報告「whatever.jsp」,而不是「富」。

  1. 爲什麼在它被轉發到JSP之前發生了改變?
  2. 如何檢測用戶所尋找的URL?

編輯:以防萬一,這是在谷歌App Engine上。不要以爲它應該。

+0

在第二種情況下,你是否在轉發請求之前或之後檢查getPathInfo?或者你在jsp文件中這樣做? – kgiannakakis 2009-06-23 06:14:25

+0

我在做之前,我把評論。(/ /在這裏做一些事情來檢查request.getPathInfo()的值) – 2009-06-23 06:28:50

回答

2

用戶(瀏覽器)請求的URL可以從請求由訪問:

request.getRequestURL() 

可替換地,請求具有whole bunch of accessors獲得URL的各個部分以及那些上ServletRequest

重定向到不同的URL變化的響應,而不是請求:

response.sendRedirect(theURLToRedirectTo) 
11

的問題是含糊不清(是servlet調用本身上每前行着?),但很多像這樣的音響你需要request.getAttribute("javax.servlet.forward.request_uri")