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