问题描述
这是我的代码:
<%@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?
1楼
Umar Abbas
1
2015-07-31 05:13:59
听起来您是将JSP代码放在JavaScript页面中,或者至少是在非JSP页面中。 脚本只能包含在JSP页面中(通常配置为* .jsp)。
所提供的语句如果由JSP编译器处理,将导致myVar等于”,因为您正在使用的<%...%>的scriptlet格式在标记之间执行Java代码,但不会返回结果。
因此,要使用此标记,您需要手动将一个值写入请求输出流。 要获得所需的功能,您需要执行以下操作:
确保您的代码在JSP页面中,如果是,则
function myFunction() {
var x= '<%= request.getContextPath() %>'; //(note the equals sign)
alert(x);
}
综上所述,在大多数情况下,scriptlet被视为不良做法。 在大多数情况下,您应该使用JSTL表达式和自定义标签。
2楼
Beniamin
1
2015-07-31 14:30:06
您还可以使用以下命令:
<%@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>
3楼
Quentin
1
2015-07-31 14:35:39
可以,但是如果要将结果传递到JavaScript,则必须输出一些内容。
var x='<%= request.getParameter("ServerName"); %>';
^ output!
…除非采取措施逃避该数据,否则您将很容易受到XSS攻击。
(而且,显然,这要等到实际提交表单后才能生效)