JavaScript – How to Use Scriptlet Inside JavaScript

javascriptjsp

Can someone test this example and share the results?
http://timothypowell.net/blog/?p=23
When I do:

var myVar = '<% request.getContextPath(); %>';
alert(myVar);

I get : '<% request.getContextPath(); %>'.

Removing the enclosing single quotes from '<% request.getContextPath(); %>';
gives syntax error.
How can I use the scrptlet or expresion inside a js function?

EDIT: this link has an explanation that helped me:
http://www.codingforums.com/showthread.php?t=172082

Best Answer

That line of code has to be placed in a HTML <script> tag in a .jsp file. This way the JspServlet will process the scriptlets (and other JSP/EL specific expressions).

<script>var myVar = '<%= request.getContextPath() %>';</script>

Note that <%= %> is the right syntax to print a variable, the <% %> doesn't do that.

Or if it is intended to be served in a standalone .js file, then you need to rename it to .jsp and add the following to top of the file (and change the <script src> URL accordingly):

<%@page contentType="text/javascript" %>
...
var myVar = '<%= request.getContextPath() %>';

This way the JspServlet will process it and the browser will be instructed to interpret the JSP response body as JavaScript instead of HTML.


Unrelated to the concrete problem, note that scriptlets are considered poor practice. Use EL.

var myVar = '${pageContext.request.contextPath}';