简体   繁体   中英

What does this expression language ${pageContext.request.contextPath} exactly do in JSP EL?

I have a web app, where I have different navigation anchor tags such as Home, Profile and etc.

When I press anchor tags like home or profile. I just want to ensure that current user gets its information in that Tags/JSP Page.

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

The pageContext is an implicit object available in JSPs. The EL documentation says

The context for the JSP page. Provides access to various objects including:
servletContext: ...
session: ...
request: ...
response: ...

Thus this expression will get the current HttpServletRequest object and get the context path for the current request and append /JSPAddress.jsp to it to create a link (that will work even if the context-path this resource is accessed at changes).

The primary purpose of this expression would be to keep your links 'relative' to the application context and insulate them from changes to the application path.


For example, if your JSP (named thisJSP.jsp ) is accessed at http://myhost.com/myWebApp/thisJSP.jsp , thecontext path will be myWebApp . Thus, the link href generated will be /myWebApp/JSPAddress.jsp .

If someday, you decide to deploy the JSP on another server with the context-path of corpWebApp , the href generated for the link will automatically change to /corpWebApp/JSPAddress.jsp without any work on your part.

use request.getContextPath() instead of ${pageContext.request.contextPath} in JSP expression language.

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

output: willPrintMyProjectcontextPath

在jsp页面上包含<%@ page isELIgnored="false"%>

For my project's setup, "${pageContext.request.contextPath}"= refers to "src/main/webapp". Another way to tell is by right clicking on your project in Eclipse and then going to Properties:

在此输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM