Java 这个表达式语言${pageContext.request.contextPath}在JSP EL中到底做了什么?
我有一个web应用程序,其中我有不同的导航锚标签,如主页、个人资料等 我想要的是: 当我按下锚定标记时,如home或profile。我只想确保当前用户在Tags/JSP页面中获取其信息 我正在尝试的示例:Java 这个表达式语言${pageContext.request.contextPath}在JSP EL中到底做了什么?,java,jsp,el,Java,Jsp,El,我有一个web应用程序,其中我有不同的导航锚标签,如主页、个人资料等 我想要的是: 当我按下锚定标记时,如home或profile。我只想确保当前用户在Tags/JSP页面中获取其信息 我正在尝试的示例: 页面上下文是JSP中可用的隐式对象。说 JSP页面的上下文。提供对各种对象的访问,包括: servletContext:… 会话:… 请求:… 答复: 因此,此表达式将获取当前的HttpServletRequest对象,并获取当前请求的属性,并向其追加/JSPAddress.jsp,以创建链
页面上下文是JSP中可用的隐式对象。说
JSP页面的上下文。提供对各种对象的访问,包括:
servletContext:…
会话:…
请求:…
答复:
因此,此表达式将获取当前的HttpServletRequest
对象,并获取当前请求的属性,并向其追加/JSPAddress.jsp
,以创建链接(即使在更改访问此资源的上下文路径时,该链接也会起作用)
此表达式的主要目的是保持链接与应用程序上下文的“相对”关系,并将它们与应用程序路径的更改隔离开来
例如,如果在http://myhost.com/myWebApp/thisJSP.jsp
,上下文路径将是myWebApp
。因此,生成的链接href将是/myWebApp/JSPAddress.jsp
如果有一天,您决定使用上下文路径corpWebApp
在另一台服务器上部署JSP,则为链接生成的href将自动更改为/corpWebApp/JSPAddress.JSP
,而无需您做任何工作。使用请求.getContextPath()
而不是${pageContext.request.contextPath}
在JSP表达式语言中
<%
String contextPath = request.getContextPath();
%>
out.println(contextPath);
out.println(contextPath);
输出:将PrintMyProjectContextPath包含在jsp页面顶部。对于我的项目设置,“${pageContext.request.contextPath}”=引用“src/main/webapp”。另一种方法是在Eclipse中右键单击项目,然后转到属性:
在${pageContext.request.contextPath}
和${request.contextPath}
之间有什么区别?@MeBigFatGuy我不相信request
是EL中的隐式对象(不过有一个requestScope
)-获取请求实例引用的方法是通过OPs片段中的pageContext
。将鼠标放在[el]
标记上方,然后单击popbox上的“info”链接。不鼓励使用片段,不应再使用片段。表达式语言是实现这一点的正确方法,并且已经存在很长时间了。@Kjetilnodin从脚本中知道您必须执行request.getContextPath()
,而不是pageContext.getRequest().getContextPath()
这将是从JSP到scriptlet的简单翻译。答案并没有回答问题的标题。接受的答案已经声明pageContext在JSP中是隐式的。这个答案是没有用的,它是噪音,并参考不鼓励的编码方式。它也比公认的答案早了三年,而且根本不需要提及非常过时的做法。所以我尊重地不同意你的评论@MarcusJuniusBrutusDhanywaada,对我来说,expressionlanguage被忽略了。
<%
String contextPath = request.getContextPath();
%>
out.println(contextPath);