【问题标题】: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] 标签上方,然后点击弹出框上的“信息”链接。

标签: java jsp 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 中一样。
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2011-06-18
    • 2012-07-23
    • 2016-09-10
    • 2023-03-15
    相关资源
    最近更新 更多