如何在javascript中使用scriptlet

时间:2011-03-01 17:57:42

标签: javascript jsp

有人可以测试这个例子并分享结果吗? 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

4 个答案:

答案 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()

之后