4

我正在尝试将在浏览器地址栏中查看的 URL 提取到 Google Analytics 标记中。我使用了

<% String getURI=request.getRequestURI(); %>

方法,但它向我显示 JSP 文件名/路径,而不是浏览器中的内容。

我做错了吗,还是因为我在 VM 上的开发人员工具包中这样做,所以这是预期的?我浏览了论坛并查看了谷歌,但找不到我的问题的答案,似乎没有什么可以解决它在本地环境中工作方式不同的可能性,所以我认为我做错了什么。

4

2 回答 2

1

如果 JSP由前端控制器转发,那么HttpServletRequest#getRequestURI()将确实返回 JSP 的 URI,而不是客户端最初请求的原始 URI(在浏览器的地址栏中可见)。

在转发的情况下,原始请求 URI 可用作请求属性,其键由 标识RequestDispatcher#FORWARD_REQUEST_URI,即javax.servlet.forward.request_uri

所以,这应该这样做:

String getURI = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);

或者当您仍在使用 Servlet 2.5 或更早版本时(此常量是在 Servlet 3.0 中引入的):

String getURI = request.getAttribute("javax.servlet.forward.request_uri");

顺便说一句,它在 JSP EL 中可用,如下所示:

${requestScope['javax.servlet.forward.request_uri']}
于 2012-10-02T17:31:28.370 回答
0

是的,这就是它应该做的。使用 request.getRequestUrl(),这会给你完整的(http://www...../xyz.jsp)

编辑有关两种方法的描述请参阅此处 http://docs.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletRequest.html

编辑 2,简而言之,您的查询是您需要您所在的 tge 文件的文件名。

尝试类似的东西

request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/"))

这将为您提供字符串welcome.html。如果您在welcome.html 中,您可以在前面加上'/'。不确定是否有直接的方法可以满足您的需求

于 2012-10-02T17:27:02.500 回答