Другие стратегии для реализации <sql: query>
Я использовал 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.
2 ответа
Поскольку JSTL выполняется на стороне сервера, дыры в безопасности нет, поскольку клиенты приложения не видят запрос. Есть другие проблемы с этим подходом:
- Запрос не подлежит повторному использованию. Если вам это нужно на других страницах, вам нужно будет повторить запрос. Когда у вас есть простые запросы, подобные этому, вы не можете проверить проблему, но это возникает с более сложными операторами, которым также нужны параметры.
- Вы создаете соединение вручную на странице! Это замедлит ваше приложение. Используйте подходящий источник данных для пула соединений с базой данных, настроенного как ресурс или программно (например, C3PO или BoneCP)
Переместите весь код вашей базы данных в соответствующие классы уровня доступа к данным. И использовать <sql>
для JSTL только для учебных целей, а не для реальных приложений.
Больше информации:
Вы действительно должны выполнить свой запрос в своем классе Java, а не в JSP, как советовал руководитель вашей группы.
С точки зрения безопасности это не имеет большого значения, весь код доступен на сервере, JSP или Java. Тег sql не должен выводить эту информацию на сгенерированную страницу.
Но на самом деле вопрос больше в правильном использовании технологий:
jsp используется в качестве шаблона, он должен взять данные и показать их конечному пользователю. Некоторые базовые операции могут выполняться в цикле жизни над списком данных или при форматировании данных, но это должно относиться только к представлению, которое вы хотите сделать
Контроллер Java используется для восстановления данных и настройки представления по мере необходимости, например, какой JSP использовать и какие данные отправлять в этом JSP