这种表达式语言 $pageContext.request.contextPath 在 JSP EL 中究竟做了啥?

Posted

技术标签:

【中文标题】这种表达式语言 $pageContext.request.contextPath 在 JSP EL 中究竟做了啥?【英文标题】:What does this expression language $pageContext.request.contextPath exactly do in JSP EL?这种表达式语言 $pageContext.request.contextPath 在 JSP EL 中究竟做了什么? 【发布时间】:2011-08-16 13:25:21 【问题描述】:

我有一个网络应用程序,其中有不同的导航锚标记,例如主页、个人资料等。

我想要什么:

当我按下诸如主页或个人资料之类的锚标签时。我只想确保当前用户在该标签/JSP 页面中获取其信息。

我正在尝试的示例:

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

【问题讨论】:

将鼠标放在[el] 标签上方,然后点击弹出框上的“信息”链接。 【参考方案1】:

对于我的项目设置,“$pageContext.request.contextPath”= 指的是“src/main/webapp”。另一种判断方法是在 Eclipse 中右键单击您的项目,然后转到属性:

【讨论】:

【参考方案2】:

在您的 jsp 页面顶部包含 &lt;%@ page isELIgnored="false"%&gt;

【讨论】:

Dhanywaada,对我来说,表达语言被忽略了。【参考方案3】:

在 JSP 表达式语言中使用 request.getContextPath() 代替 $pageContext.request.contextPath

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

输出:willPrintMyProjectcontextPath

【讨论】:

不鼓励使用片段,不应再使用。表达式语言是做到这一点的正确方法,并且已经存在很长时间了。 @KjetilNordin 知道从 scriptlet 你必须做 request.getContextPath() 而不是 pageContext.getRequest().getContextPath() 这仍然是有用的,这将是幼稚的 JSP 到 scriptlet 的翻译。 答案不回答问题的标题。接受的答案已经表明 pageContext 在 JSP 中是隐含的。这个答案没有用,它是噪音,并且指的是不鼓励的编码方式。它也比公认的答案早了三年,绝不应该参考非常过时的做法。所以我恭敬地不同意你的评论@MarcusJuniusBrutus【参考方案4】:

pageContext 是 JSP 中可用的隐式对象。 The EL documentation 说

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

因此,此表达式将获取当前的 HttpServletRequest 对象并获取当前请求的 context path 并将 /JSPAddress.jsp 附加到它以创建链接(即使访问此资源的上下文路径也将起作用变化)。

此表达式的主要目的是使您的链接与应用程序上下文保持“相对”,并将它们与应用程序路径的更改隔离开来。


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

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

【讨论】:

$pageContext.request.contextPath$request.contextPath 有什么区别? @MeBigFatGuy 我不相信 request 是 EL 中的隐式对象(虽然有一个 requestScope) - 获取对请求实例的引用的方法是通过 pageContext就像在 OPs sn-p 中一样。

以上是关于这种表达式语言 $pageContext.request.contextPath 在 JSP EL 中究竟做了啥?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中num是啥意思

C语言中num/=10是啥意思

求一些C语言if嵌套语句算法题

解释器模式

OGNL与值栈

简述C语言中都有哪些常用表达式?