我一直在使用JSTL从我的数据库中获取值,并使用类似的代码在我的jsp页面中显示它,如下所示。
<sql:setDataSource
var="myDS"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
user="root" password="secret"
/>
<sql:query var="list_users" dataSource="${myDS}">
SELECT * FROM users;
</sql:query>
<c:forEach var="user" items="${listUsers.rows}">
<c:out value="${user.name}" />
<c:out value="${user.email}" />
<c:out value="${user.profession}" />
</c:forEach>
我的团队负责人告诉我,直接在jsp页面中放置查询并不是一个好习惯。由于此代码中存在数据库名称和用户名和密码,因此我不确定此代码是否实现了适当的安全性。我想知道你对这个问题的想法,如果有任何替代方法可以使用JSTL本身。
答案 0 :(得分:4)
由于JSTL在服务器端执行,因此没有安全漏洞,因为应用程序的客户端无法查看该查询。这种方法还有其他问题:
将所有数据库代码移动到正确的数据访问层类中。并将<sql>
用于JSTL仅用于学习目的,而不是用于实际应用程序。
更多信息:
答案 1 :(得分:1)
您应该在您的java类中进行查询,而不是像您的团队领导所建议的那样在jsp中进行查询。
在安全方面,它并不重要,所有代码都可以在服务器,jsp或java上使用。 sql标记不应在生成的页面中输出该信息。
但问题确实是关于正确使用这些技术的问题:
jsp 用作模板,它应该获取数据并将其显示给最终用户。一些基本操作可以在数据列表或格式化数据上进行生命循环,但这应该只针对您想要制作的视图
java controler 用于恢复数据并根据需要配置视图,例如使用哪个jsp以及在jsp中发送哪些数据