使用JSP确定基本URL

时间:2012-04-24 19:35:35

标签: java jsp

在浏览器(IE和Firefox)中,如果您有相关链接且您的网址为:http://domain/somepath/lastfolder/

相对链接变为:

http://domain/somepath/lastfolder/linkdocname.html

如果网址为http://domain/somepath/lastdoc,则相对链接变为:

http://domain/somepath/linkdocname.html

http://domain/somepath/lastfolder/变为:

http://domain/somepath/lastfolder/linkdocname.html

有没有办法在不编写特殊函数的情况下使用JSP复制它?

我尝试使用以下网址获取基本网址:

baseURL = request.getScheme() + "://" + request.getServerName() + ":" 
+ request.getServerPort()+ request.getRequestURI(); 

但是这让我得到了requst URI的完整路径,并且如果它不以“/”结尾,则不会丢弃最后一位然后如果我尝试:

baseURL = request.getScheme() + "://" + request.getServerName() + ":" 
+ request.getServerPort() + request.getContextPath();

它为我提供了Web容器文件夹的所有内容,但之后没有任何文件夹。

1 个答案:

答案 0 :(得分:0)

在您上次的字符串构建尝试中,即使您指定了“:”

,也会丢失端口号

试试这个:

new URL(request.getScheme(), request.getServerName(), 
        request.getServerPort(), request.getContextPath());

您也可以自己构建字符串,并在需要时删除默认端口:

public String getBaseUrl(HttpServletRequest request) {
    if (( request.getServerPort() == 80 ) || ( request.getServerPort() == 443 )) {
        return request.getScheme() + "://" + request.getServerName() + 
                request.getContextPath();
    } else {
        return request.getScheme() + "://" + request.getServerName() + ":" + 
                request.getServerPort() + request.getContextPath();
    }
}