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

时间:2015-07-31 05:01:10

标签: javascript jsp scriptlet

这是我的代码:

<%@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>

这里在上面的函数中点击一个按钮我想执行javascript里面的scriptlets吗?

3 个答案:

答案 0 :(得分:1)

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

如果由JSP编译器处理,所呈现的语句将导致myVar等于''作为您正在使用的scriptlet格式&lt;%...%&gt;在标记之间执行Java代码,但不返回结果。

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

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

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

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

答案 1 :(得分:1)

你也可以用这个:

<%@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>

答案 2 :(得分:1)

您可以,但如果您希望将结果传递给JavaScript,则必须输出

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

...除非你采取措施来逃避这些数据,否则你很容易受到XSS攻击。

(显然,在实际提交表单之前,这不起作用)