所以我有一个.jsp来显示我的Web应用程序的标题部分。这是一个非常标准的页面。我在顶部有一个栏,有登录,注册,联系我们等等......在下面我们有一个水平导航栏。
这是一个带有maven构建的标准Spring Web应用程序。它生成一个我们部署到tomcat的文件web.war。在dev上,这很好用。
我们正在测试生产,并希望这场战争成为根,所以我们将战争重命名为ROOT.war并重新启动。一切都很好。
现在有时,我们从内容管理系统获取导航部分。我们将文本设置为变量并显示该变量。显然我们不能使用$ {pageContext.request.contextPath}因为不会以这种方式解析,所以在我们显示文本之前我们在jsp中这样做
<% navcopy = navcopy.replace("${pageContext.request.contextPath}", request.getContextPath()); %>
现在这是将/ web添加到URL。现在这让我感到困惑,因为jsp中的注册链接起作用:
<a id="home-left-menu-item" href="${pageContext.request.contextPath}/register.html">Register Now!</a>
所以hoe在jsp中解析$ {pageContext.request.contextPath}返回正确的根,但调用request.getContextPath()返回“/ web”
它们对同一个对象的调用是不是基本相同?
任何见解都将受到赞赏。
答案 0 :(得分:1)
$ {pageContext.request.contextPath}:返回请求URI的一部分,指示请求的上下文。 实际上,它与request.getContextPath()完全相同,因为$ {pageContext.request}引用了当前请求的HttpServletRequest。
例如:
http://localhost:80/myProjectName/path/servlet
$ {pageContext.request.contextPath}返回/ myProjectName
request.getServletPath()返回此请求调用servlet的URL的一部分,例如: /路径/ servlet的
$ {pageContext.request.servletPath}返回/ path / servlet
对于此代码,请尝试以下操作:
<a id="home-left-menu-item" href="<%=request.getContextPath()%>/register.html">Register Now!</a>