Percy

其他阻碍的状态<sql:query>

java

我一直在使用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本身来完成。


阅读 267

收藏
2020-12-06

共1个答案

一尘不染

由于JSTL是在服务器端执行的,因此没有安全漏洞,因为该查询无法被应用程序的客户端看到。这种方法还有其他问题:

该查询不可重用。如果在其他页面中需要它,则需要重复查询。当您遇到像这样的简单查询时,您无法检查问题,但这是由于更复杂的语句也需要参数而引起的。
您正在按页面手动创建连接!这会使您的应用程序变慢。对配置为资源或以编程方式(例如,C3PO或BoneCP)的数据库连接池使用正确的数据源
将所有数据库代码移到正确的数据访问层类中。并且仅用于学习目的,而不用于实际应用。

2020-12-06