在转发到JSP时,如何检测Java Servlet中的URL?

时间:2009-06-23 05:48:55

标签: java jsp servlets

我有一个看起来像这样的servlet:

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”而不是“foo”。

  1. 为什么在将它转发到JSP之前已经改变了?
  2. 如何检测用户正在寻找的网址?
  3. 编辑:以防万一,这是在Google App Engine上。不要认为它应该。

2 个答案:

答案 0 :(得分:14)

这个问题模糊不清(servlet是否会在每个前锋身上再次调用?),但听起来很像你需要request.getAttribute("javax.servlet.forward.request_uri")

答案 1 :(得分:2)

用户(浏览器)请求的URL可以通过以下方式从请求中访问:

request.getRequestURL()

或者,该请求包含whole bunch of accessors以获取网址的各个部分以及ServletRequest上的部分。

要重定向到其他网址,请更改响应而不是请求:

response.sendRedirect(theURLToRedirectTo)