jsp中的basepath

时间:2011-03-30 11:07:07

标签: jsp servlets path base

在我的应用程序中,我使用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”找到

但当其他人尝试访问我的应用时,他们会使用:

http://192.168.x.x:8080/app

现在,浏览器仍然尝试下载test.js 的 “http://本地主机:8080 /应用/ RES / test.js”

当然,它无法得到它。真正的道路应该是: http://192.168.x.x:8080/app/res/test.js

SInce,“路径”是行动中的硬代码,有什么想法解决这个问题吗?

3 个答案:

答案 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}" />