如何在JSP网页中创建跨服务器的可移植URL
解决方案
方案1:使用站点根目录相对路径(最简便,适配绝大多数内部资源场景)
你不需要写任何动态代码拼接域名,直接使用以/开头的站点根目录相对路径即可:
<link rel="icon" href="/songkong/images/songkong32.png" type="image/png" />
你之前被建议的相对路径不可行,是因为那类是相对于当前页面目录的相对路径(需要用../回退层级),而站点根目录相对路径的特性是:
- 自动适配当前访问站点的协议(http/https)和域名,不会硬编码任何站点信息
- 不受当前页面所在目录层级影响,所有层级的页面都能正确解析到站点根目录下的对应资源
完全满足两套站点共用一套代码的需求,修改成本极低,只需要把所有硬编码的域名前缀删掉,保留从根目录开始的路径即可。
方案2:动态拼接完整绝对URL(适用于需要对外输出完整链接的场景)
如果你确实需要生成完整的绝对URL(比如用于页面元数据、对外分享链接等),可以通过request对象动态获取协议、域名、端口,不要硬编码任何部分:
<link rel="icon" href="<%=request.getScheme()%>://<%=request.getServerName()%><%=request.getServerPort() == 80 || request.getServerPort() == 443 ? "" : ":" + request.getServerPort()%>/songkong/images/songkong32.png" type="image/png" />
写法说明:
request.getScheme()自动获取当前请求的协议(http/https),不需要硬编码- 增加了端口判断逻辑,http默认端口80、https默认端口443不需要显式拼接,避免出现
http://www.jthink.net:80/xxx这类冗余格式 - 非标准端口场景下也能正常适配
内容的提问来源于stack exchange,提问作者Paul Taylor
相关产品推荐
相关产品推荐

