【问题标题】:How do you detect the URL in a Java Servlet when forwarding to JSP?转发到 JSP 时如何检测 Java Servlet 中的 URL?
【发布时间】:2009-06-23 05:48:54
【问题描述】:

我有一个看起来像这样的 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. 如何检测用户正在查找的 URL?

编辑:以防万一,这在 Google App Engine 上。不过不应该这样。

【问题讨论】:

  • 第二种情况,你是在转发请求之前还是之后检查getPathInfo?或者你在jsp文件中这样做?
  • 我之前在做,我把评论放在那里。(//在这里做一些事情来检查request.getPathInfo()的值)

标签: java jsp servlets


【解决方案1】:

这个问题含糊不清(servlet 是否再次在每次转发时调用自己?),但听起来您需要request.getAttribute("javax.servlet.forward.request_uri")

【讨论】:

    【解决方案2】:

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

    request.getRequestURL()
    

    或者,请求有一个whole bunch of accessors 来获取URL 的各个部分以及ServletRequest 上的那些部分。

    要重定向到不同的 URL,请更改响应而不是请求:

    response.sendRedirect(theURLToRedirectTo)
    

    【讨论】:

    • 好吧,我实际上正在使用上述方法之一,getPathInfo()。它的文档说:“返回与客户端发出此请求时发送的 URL 关联的任何额外路径信息。”但这显然不是正在发生的事情。
    • 为什么不呢? “/foo”不是额外的路径吗?或者“whatever.jsp”不是额外的路径。在您的情况下,这两个都是额外的路径。
    • 它将 JSP 显示为路径,而不是 foo。我看不出它怎么可能是 JSP,因为我在 servlet 中要求它,然后再将转发发送到 JSP。
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2019-11-03
    • 2011-02-28
    相关资源
    最近更新 更多