我一直在使用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本身来完成。
由于JSTL是在服务器端执行的,因此没有安全漏洞,因为该查询无法被应用程序的客户端看到。这种方法还有其他问题:
该查询不可重用。如果在其他页面中需要它,则需要重复查询。当您遇到像这样的简单查询时,您无法检查问题,但这是由于更复杂的语句也需要参数而引起的。 您正在按页面手动创建连接!这会使您的应用程序变慢。对配置为资源或以编程方式(例如,C3PO或BoneCP)的数据库连接池使用正确的数据源 将所有数据库代码移到正确的数据访问层类中。并且仅用于学习目的,而不用于实际应用。