在我的应用程序中,我使用struts2,并创建一个基本操作来解决路径问题:
class BaseAction{
private String path;
static{
HttpServletRequest request = ServletActionContext.getRequest(); path=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();+"/";
}
}
然后所有其他操作都会扩展此基本操作。
在我的jsp页面中,我添加了路径作为基础:
xx.jsp:
....
<head>
<base href="<s:property value='path'/>">
<script ... src="res/test.js" />
</head>
它在我自己的机器上运行良好。
http://localhost:8080/app test.js可以通过“http:// localhost:8080 / app / res / test.js”找到
但当其他人尝试访问我的应用时,他们会使用:
现在,浏览器仍然尝试下载test.js 的 “http://本地主机:8080 /应用/ RES / test.js”
当然,它无法得到它。真正的道路应该是: http://192.168.x.x:8080/app/res/test.js
SInce,“路径”是行动中的硬代码,有什么想法解决这个问题吗?
答案 0 :(得分:2)
在static
初始化块中,我不希望您有可用的请求。我做了:
<base href="${request.contextPath}" />
答案 1 :(得分:0)
您正在基本路径中设置本地主机和端口,而不是远程主机和端口。
毕竟这不是一个很好的构造来创建基本路径。我建议改为创建如下:
path = request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath()) + "/";
或者恰好在JSTL / EL
中<c:set var="r" value="${pageContext.request}" />
<base href="${fn:replace(r.requestURL, r.requestURI, r.contextPath)}/" />
答案 2 :(得分:0)
怎么样
<base href="${pageContext.request.contextPath}" />