好像我已经正确导入了包和类,但由于某种原因,找不到我的变量用户。 User是在AddTo类中创建的String类型的对象。
<%@ page import= "package1.AddTo" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<p> Shopping Cart</p>
<%= System.out.println(user.name); %>
</body>
</html>
答案 0 :(得分:2)
您只能从包中导入一个类,而不是它的字段。
话虽如此,您应该在某个servlet中添加AddTo
对象作为请求属性,并使用JSP
访问EL
中的属性。你不应该在新代码中使用scriplets。
在Servlet中你可以:
request.setAttribute("addTo", addTo);
然后在JSP中,您可以访问属性user
的{{1}}属性:
addTo
另见:
答案 1 :(得分:0)
您的JSP中不包含已包含在其中的类。你只需要很长时间地引用它们。
所以我假设你需要:
System.out.println(package1.AddTo.user.name);
(虽然这没有多大意义,看到用户名应该在会话中,对吗?)
Matt Ball说在JSP中放入大量代码是一个坏主意是真的,但更多的是在错误可能揭示一些不应该泄露的信息的情况下,那么JSP可以在编译错误中揭示用户可以看到。就像你把代码放在JSP中直接建立数据库连接,而不是调用类
像这样:
Class.forName(...);
Connection con = DriverManager.getConnection("jdbc:drivertype://server;errors=full;translate binary=true", "user", "pwd");
这非常糟糕。如果存在编译错误,则会显示用户名和密码,甚至是数据库无法访问时的连接错误;并且用户会知道如何破解您的数据库,因为默认情况下它会向用户显示有问题的代码行!
所以相反:
Connection con = package1.databases.createConnectionToDatabase();
您还可以通过将JSP中的所有Java代码放在Try和Catch块中来防止错误向用户显示实际的代码行。