2009-06-23 84 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")