如何在javascript中使用scriptlet

IT技术 javascript jsp
2021-02-27 14:49:43

有人可以测试这个例子并分享结果吗? http://timothypowell.net/blog/?p=23
当我这样做时:

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

我得到: '<% request.getContextPath(); %>'.

从 '<% request.getContextPath(); 中删除封闭的单引号;%>'; 给出语法错误。如何在 js 函数中使用 scrptlet 或表达式?

编辑:此链接的解释对我有帮助:http :
//www.codingforums.com/showthread.php?t=172082

4个回答

该行代码必须放在文件的 HTML<script>标记中.jsp这种方式JspServlet将处理小脚本(和其他 JSP/EL 特定表达式)。

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

请注意,这<%= %>是打印变量的正确语法,而<% %>不是这样做。

或者,如果它打算在独立.js文件中提供,那么您需要将其重命名为.jsp并将以下内容添加到文件顶部(并相应地更改<script src>URL):

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

通过这种方式,JspServlet将处理它,并指示浏览器将 JSP 响应正文解释为 JavaScript 而不是 HTML。


与具体问题无关,请注意scriptlet被认为是糟糕的做法使用EL。

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

听起来您将 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)

尽管如此,在大多数情况下,scriptlet 被视为不好的做法。大多数情况下,您应该使用 JSTL 表达式和自定义标记。

但是如果我想执行一个不返回结果的函数呢?像 session.inValidate() 吗?
2021-04-26 14:49:43

你不能通过给它正常的扩展来跑scriptlet进去但是你可以给你的文件扩展名,然后直接链接到它:javascript.js.js.jsp

<script type="text/javascript" src="/script.jsp"></script>

现在你可以jsp在你javascript喜欢的范围内使用

var someMessage = "${someMessage}"
var anotherMessage = "${anotherMessage}"/>"

此操作是完全有效的,因为决定文件是否为文件的是javascriptMIME 媒体类型。您可以使用以下方法从 JSP 设置 MIME:

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

您忘记在请求和删除之前输出 = ;在 getContextPath() 之后