有人可以测试这个例子并分享结果吗?
http://timothypowell.net/blog/?p=23
当我这样做时:
var myVar = '<% request.getContextPath(); %>';
alert(myVar);
Run Code Online (Sandbox Code Playgroud)
我明白了: '<% request.getContextPath(); %>'.
从'<%request.getContextPath();中删除封闭的单引号; %>'; 给出了语法错误.如何在js函数中使用scrptlet或expresion?
编辑:这个链接有一个解释,帮助我:http:
//www.codingforums.com/showthread.php?t = 172082
该行代码必须放在文件的HTML <script>
标记中.jsp
.这样JspServlet
将处理scriptlet(以及其他JSP/EL特定表达式).
<script>var myVar = '<%= request.getContextPath() %>';</script>
Run Code Online (Sandbox Code Playgroud)
请注意,这<%= %>
是打印变量的正确语法,<% %>
但不会这样做.
或者,如果要在独立.js
文件中提供服务,则需要将其重命名为.jsp
并将以下内容添加到文件的顶部(并相应地更改<script src>
URL):
<%@page contentType="text/javascript" %>
...
var myVar = '<%= request.getContextPath() %>';
Run Code Online (Sandbox Code Playgroud)
这样,JspServlet
它将处理它,并且将指示浏览器将JSP响应主体解释为JavaScript而不是HTML.
与具体问题无关,请注意,scriptlet被认为是不好的做法.使用EL.
var myVar = '${pageContext.request.contextPath}';
Run Code Online (Sandbox Code Playgroud)
听起来好像您将 JSP 代码放置在 JavaScript 页面中,或者至少放置在非 JSP 页面中。Scriptlet 只能包含在 JSP 页面中(通常配置为 *.jsp)。
如果由 JSP 编译器处理,所提供的语句将导致 myVar 等于 '',因为您使用 <% ... %> 的 scriptlet 格式在标记之间执行 Java 代码,但不返回结果。
因此,要使用此标记,您需要手动将值写入请求输出流。要获得所需的功能,您需要执行以下操作:
make sure your code is in a JSP page
use var myVar = '<%= request.getContextPath() %>'; (note the equals sign)
Run Code Online (Sandbox Code Playgroud)
话虽如此,在大多数情况下,Scriptlet 被视为不好的做法。对于大多数情况,您应该使用 JSTL 表达式和自定义标签。