Вам нужно выполнить SQL-запрос с помощью PreparedStatement
вместо Statement
, иначе ваш SQL-запрос прервется (и будет подвержен SQL-инъекциям ). 1007 *
Представьте себе следующий запрос:
SELECT foo FROM tbl WHERE name = 'O'Reilly'
Это приведет к ошибке синтаксиса SQL. Вы бы видели это, если бы проверили логи сервера. Вы должны были видеть это на экране, когда использовали сервлет вместо JSP для выполнения этой задачи. С PreparedStatement
запрос будет обработан следующим образом:
SELECT foo FROM tbl WHERE name = 'O\'Reilly'
Таким образом, SQL понимает этот запрос и может выполнить его без проблем.
С другой стороны, вам также нужно HTML-экранировать результаты, иначе он будет подвержен XSS-атакам .
Представьте себе следующий экран:
<input type='text' value='${name}'>
если ${name}
равен O'Reilly
, то HTML-код будет фактически иметь значение
<input type='text' value='O'Reilly'>
и вы увидите только O
. Что будет, если имя будет '><script>alert('xss')</script><input type='text' value='
? Чтобы исправить это, используйте JSTL fn:escapeXml
для отображения ввода:
<input type='text' value='${fn:escapeXml(name)}'>
(кстати, более рекомендуется использовать двойные кавычки вместо одинарных кавычек, приведенный выше пример)
Тем не менее, технически вы также не должны делать это внутри файла JSP. Необработанный код Java принадлежит классу Java, а не файлу JSP. JSP - это технология просмотра, используйте ее только для просмотра.