当前位置: 代码迷 >> JavaScript >> 我们可以在 Javascript 中使用 scriptlet 吗?
  详细解决方案

我们可以在 Javascript 中使用 scriptlet 吗?

热度:38   发布时间:2023-06-05 14:18:50.0

这是我的代码:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Example of Java Server Page with JDBC</title>
    </head>
<script>
function myFunction() {
    var x='<% request.getParameter("ServerName"); %>';
    alert(x);
</script>
<body>
<form>
    ServerName:  <input type="text" name="ServerName"   required> <br><br>
<input type="submit" id="btnSubmit" name="btnSubmit" />
            </div>
            </form>
  </body>
</html>

在上面的函数 onclick 中,我想执行 javascript 中的 scriptlets?

听起来您是将JSP代码放在JavaScript页面中,或者至少是在非JSP页面中。 脚本只能包含在JSP页面中(通常配置为* .jsp)。

所提供的语句如果由JSP编译器处理,将导致myVar等于”,因为您正在使用的<%...%>的scriptlet格式在标记之间执行Java代码,但不会返回结果。

因此,要使用此标记,您需要手动将一个值写入请求输出流。 要获得所需的功能,您需要执行以下操作:

确保您的代码在JSP页面中,如果是,则

function myFunction() {
    var x= '&lt;%= request.getContextPath() %&gt;'; //(note the equals sign)
    alert(x);
}

综上所述,在大多数情况下,scriptlet被视为不良做法。 在大多数情况下,您应该使用JSTL表达式和自定义标签。

您还可以使用以下命令:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<%
String ServerName = (String)request.getParameter("ServerName");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Example of Java Server Page with JDBC</title>
    </head>
<script>
function myFunction() {
    var x='<%=ServerName%>';
    alert(x);
</script>
<body>

    ServerName:  <input type="text" name="ServerName"   required> <br><br>
<input type="submit" id="btnSubmit" name="btnSubmit" />
            </div>
            </form>
  </body>
</html>

可以,但是如果要将结果传递到JavaScript,则必须输出一些内容。

var x='<%= request.getParameter("ServerName"); %>';
         ^ output!

…除非采取措施逃避该数据,否则您将很容易受到XSS攻击。

(而且,显然,这要等到实际提交表单后才能生效)

  相关解决方案