在JSP EL中,这个expression式语言$ {pageContext.request.contextPath}究竟做了什么?

我有一个networking应用程序,我有不同的导航定位标记,如家庭,个人资料等。

我想要的是:

当我按像主页或configuration文件的锚标签。 我只是想确保当前用户在标签/ JSP页面中获取它的信息。

示例我正在尝试的示例:

<a href="${pageContext.request.contextPath}/JSPAddress.jsp">Profile</a> 

pageContext是JSP中可用的隐式对象。 EL文件说

JSP页面的上下文。 提供访问各种对象,包括:
servletContext:…
会议:…
请求:…
回应:…

因此,这个expression式将得到当前的HttpServletRequest对象,并获取当前请求的上下文path ,并附加/JSPAddress.jsp来创build一个链接(即使在更改时访问该资源的上下文path也是可行的)。

这个expression式的主要目的是保持链接与应用程序上下文的“相对”,并将它们与应用程序path的变化隔离。


例如,如果您的JSP(名为thisJSP.jsp )在http://myhost.com/myWebApp/thisJSP.jsp上访问,则myWebApppath将为myWebApp 。 因此,生成的链接href将是/myWebApp/JSPAddress.jsp

如果有一天,您决定在另一台服务器上部署corpWebApp上下文path的corpWebApp ,则为链接生成的href将自动更改为/corpWebApp/JSPAddress.jsp而无需任何工作。

在jsp页面的顶部添加<%@ page isELIgnored="false"%>

在JSPexpression式语言中使用request.getContextPath()而不是${pageContext.request.contextPath}

 <% String contextPath = request.getContextPath(); %> out.println(contextPath); 

输出:willPrintMyProjectcontextPath