0

似乎我已经正确导入了包和类,但由于某种原因,找不到我的变量用户。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>
4

2 回答 2

2

您只从包中导入一个类,而不是它的字段。

话虽如此,您应该将该AddTo对象作为请求属性添加到某个 servlet 中,并在JSPusing中访问该属性EL。您不应该在新代码中使用脚本。

在 Servlet 中,您可以:

request.setAttribute("addTo", addTo);

然后在 JSP 中,您可以访问user属性的属性addTo

<p> Shopping Cart</p>
${addTo.user}  <!-- Access user property of addTo attribute, which is an object of type `AddTo` -->

也可以看看:

于 2013-08-07T21:59:40.270 回答
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 块中来防止错误向用户显示实际的代码行。

于 2013-08-07T22:13:22.690 回答