Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How is using "<%=request.getContextPath()%>" better than "../"

I have worked on number of J2EE projects where the view layer is JSP. In most projects, I have seen that we reference external resources i.e. images, javascript, jsp's, css etc. using the contextPath in the scriptlet.

The code is as follows,

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head>     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">     <title>GC Demo Using HandlebarsJS</title>     <script type="text/javascript" src="<%=request.getContextPath()%>/js/jqueryUI-AutoComplete/jquery-1.9.1.js"></script>     <script type="text/javascript" src="<%=request.getContextPath()%>/js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.js"></script>     <script type="text/javascript" src="<%=request.getContextPath()%>/js/handlebarsJS/handlebars.js"></script>     <link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.css"> 

From the above jsp, here I am importing the external resources which are in my same project bundle i.e. in my war.

Now the same above JSP can be written as below code,

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head>     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">     <title>GC Demo Using HandlebarsJS</title>     <script type="text/javascript" src="../js/jqueryUI-AutoComplete/jquery-1.9.1.js"></script>     <script type="text/javascript" src="../js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.js"></script>     <script type="text/javascript" src="../js/handlebarsJS/handlebars.js"></script>     <link rel="stylesheet" type="text/css" href="../js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.css"> 

Here in the second example too I am referencing the resources present in my war.

Now considering both of the above two cases, the first case is given more significance as a best practise.

Why?

and what are the drawbacks of using the second case?

Does using the second case, our project gets more tightly coupled with the contextpath?

Please explain to me.

like image 538
Rahul Shivsharan Avatar asked Nov 01 '13 10:11

Rahul Shivsharan


People also ask

What is the use of request getContextPath ()?

getContextPath. Returns the portion of the request URI that indicates the context of the request. The context path always comes first in a request URI. The path starts with a "/" character but does not end with a "/" character.

What is the use of Pagecontext request contextPath in JSP?

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.

What is getContextPath in JSP?

getContextPath()- returns root path of your application, while ../ - returns parent directory of a file. You use request. getContextPath(), as it will always points to root of your application. If you were to move your jsp file from one directory to another, nothing needs to be changed.


1 Answers

request.getContextPath()- returns root path of your application, while ../ - returns parent directory of a file.

You use request.getContextPath(), as it will always points to root of your application. If you were to move your jsp file from one directory to another, nothing needs to be changed. Now, consider the second approach. If you were to move your jsp files from one folder to another, you'd have to make changes at every location where you are referring your files.

Also, better approach of using request.getContextPath() will be to set 'request.getContextPath()' in a variable and use that variable for referring your path.

<c:set var="context" value="${pageContext.request.contextPath}" /> <script src="${context}/themes/js/jquery.js"></script> 

PS- This is the one reason I can figure out. Don't know if there is any more significance to it.

like image 198
Sudarshan_SMD Avatar answered Sep 17 '22 15:09

Sudarshan_SMD