使用欢迎文件时,无需附加index.xhtml即可获取真正的requestURI

时间:2013-10-04 12:43:12

标签: jsf servlets jboss welcome-file

所以这里有2个请求:

  1. http://example.com/someUrl/
  2. http://example.com/someUrl/index.xhtml(xhtml扩展名只是一个例子)
  3. 设置<welcome-file>index.xhtml</welcome-file>后,服务器将请求1作为2处理。

    但是,在这两种情况下,request.getRequestURI()都会返回完整的URI:someUrl/index.xhtml

    根据documentation它不应该,但在大多数情况下,这是我们想要的,所以看起来很好。

    我在JBoss Wildfly(Undertow webservice)下使用JSF,我不知道哪个负责。

    我不一定想改变它的工作方式,但我正在寻找一种获取最终用户在浏览器地址栏中看到的原始URI的方法,因此在1的情况下没有index.xhtml部分。

    更准确地说,我必须获得与JavaScript中document.location.href返回的完全相同的网址。

1 个答案:

答案 0 :(得分:3)

欢迎文件由前导显示,该转发位于服务器封面下,由RequestDispatcher#forward()执行。在这种情况下,原始请求URI可用作请求属性,其中包含由RequestDispatcher#FORWARD_REQUEST_URI标识的密钥,即javax.servlet.forward.request_uri

所以,这应该做:

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

if (originalURI == null) {
    originalURI = request.getRequestURI();
}

// ...