Виктор Гольцман - MySQL 5.0. Библиотека программиста
Создание сервлета включает три основных этапа:
• написание кода;
• компиляция сервлета;
• размещение и регистрация сервлета в контейнере.
После выполнения этих этапов можно запустить сервлет, введя его адрес в адресной строке браузера.
Рассмотрим порядок создания сервлета на примере простейшего сервлета.
1. Запустите стандартную программу Windows Блокнот (Пуск → Все программы → Стандартные → Блокнот).
2. В окне программы Блокнот введите код, представленный в листинге 4.14.
Листинг 4.14. Простейший сервлетimport java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class test extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
response.setContentType(«text/html;charset=windows-1251»);
PrintWriter out = response.getWriter();
out.println(«Мой первый сервлет»);
}
}Данный код создает класс с именем test, который расширяет существующий класс HttpServlet и переопределяет метод service(). Метод service() получает параметры запроса с помощью объекта request и передает ответ сервлета с помощью объекта response. Метод service() нашего класса test выполняет следующие действия:
• устанавливает тип выводимой информации с помощью метода setContentType() объекта response;
• получает ссылку на выходной поток сервлета с помощью метода getWriter() объекта response;
• выводит в этот поток текстовую информацию.
3. Для сохранения файла нажмите комбинацию клавиш Ctrl+S. В стандартном окне Windows Сохранить как откройте любую папку, например <Корневая папка Tomcat>webappsROOTWEB-INFclasses. Введите имя файла test.java (имя файла должно совпадать с именем класса) и нажмите кнопку Сохранить.
4. Откройте окно командной строки Windows. Для этого нажмите кнопку Пуск, в меню выберите пункт Выполнить, в появившемся окне Запуск программы в поле Открыть введите команду cmd и нажмите кнопку OK. На экране возникнет окно командной строки, в которой с помощью команды cd перейдите в папку, в которой находится файл test.java (рис. 4.32).
Рис. 4.32. Компиляция сервлета5. Скомпилируйте сервлет, выполнив в окне командной строки команду
javac test.java
В результате компиляции в папке, где находится файл test.java, будет создан файл test.class. Этот файл и есть созданный нами сервлет.
...Внимание!
Далее вы узнаете, как разместить и зарегистрировать сервлет в контейнере сервлетов нашей среды разработки. Если для запуска сервлета вы используете хостинг с поддержкой сервлетов, то при подключении сервлета руководствуйтесь инструкциями провайдера хостинга.
6. Скопируйте файл test.class в папку <Корневая папка Tomcat>webappsROOT
WEB-INFclasses, например C: Program FilesTomcatwebappsROOTWEB-INFclasses (если исходный файл test.java был создан в этой папке, то файл test.class уже находится в нужной папке и копирование не требуется).
...Внимание!
Обратите внимание на регистр символов: важно, чтобы папка для размещения сервлетов называлась именно classes (не CLASSES и не Classes).
7. Откройте для редактирования (например, с помощью программы Блокнот) файл web.xml, находящийся в папке <Корневая папка Tomcat>webappsROOTWEB-INF.
В этом файле для каждого нового сервлета необходимо добавить в элемент web-app вложенные элементы servlet и servlet-mapping (листинг 4.15).
Листинг 4.15.
Файл web.xml
<?xml version=”1.0” encoding=”ISO-8859-1”?>
<web-app …<Дополнительные атрибуты>…>
<servlet>
<servlet-name><Имя сервлета 1></servlet-name>
<servlet-class><Класс сервлета 1></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name><Имя сервлета 1></servlet-name>
<url-pattern><Адрес сервлета 1></url-pattern>
</servlet-mapping>
<servlet>
<servlet-name><Имя сервлета 2></servlet-name>
<servlet-class><Класс сервлета 2>test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name><Имя сервлета 2></servlet-name>
<url-pattern><Адрес сервлета 2></url-pattern>
</servlet-mapping>
…
</web-app>
Элемент servlet должен содержать произвольное имя сервлета и имя класса, заданное в коде сервлета (см., например, листинг 4.14). Элемент servlet-mapping должен содержать то же самое имя сервлета и URL-адрес, по которому будет доступен этот сервлет.
Например, после добавления сервлета test файл web.xml примет следующий вид (листинг 4.16).
Листинг 4.16. Пример файла web.xml<?xml version=”1.0” encoding=”ISO-8859-1”?>
<web-app …<Дополнительные атрибуты>…>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/servlet/test</url-pattern>
</servlet-mapping>
</web-app>8. Запустите Tomcat. Для этого откройте корневую папку Tomcat, далее папку bin и дважды щелкните на значке файла startup.bat.
Чтобы убедиться, что Tomcat работает нормально, запустите Internet Explorer (Пуск → Все программы → Internet Explorer) или любой другой браузер. В адресной строке браузера введите следующий адрес: http://localhost:8080/ – в результате откроется стартовая страница Tomcat (рис. 4.33).
Рис. 4.33. Стартовая страница Tomcat9. Чтобы запустить сервлет, наберите в адресной строке браузера его адрес, который вы задали в файле web.xml: http://localhost:8080/servlet/test. Вы увидите результат выполнения сервлета: текст «Мой первый сервлет» (рис. 4.34).
Рис. 4.34. Результат выполнения сервлетаИтак, вы научились создавать собственные сервлеты и запускать их. Отмечу, что при изменении ранее созданного сервлета его необходимо перекомпилировать (см. пп. 5–6), а затем перезапустить Tomcat, используя файлы shutdown.bat и startup.bat в папке bin корневой папки Tomcat.
Перейдем теперь к разработке сервлета, взаимодействующего с базой данных MySQL.
Подключение к базе данных
В данном разделе мы рассмотрим простой сервлет, который подключается к базе данных и выводит диагностическое сообщение. Чтобы создать такой сервлет, необходимо импортировать пакеты java.sql.*.
Соединение с базой данных описывается объектом класса Connection. Для создания такого объекта предназначен методpublic static Connection getConnection(“jdbc:mysql://<Имя
хоста>[:<Имя порта>]/<Имя базы данных>[<Параметры>]”)
throws SQLExceptionкласса DriverManager. Параметры соединения задаются в формате
?<Имя параметра>=<Значение>&<Имя параметра>=<Значение>…
Важнейшими параметрами соединения являются user (имя пользователя), password (пароль) и characterEncoding (кодировка).
Если при подключении к базе данных произошла ошибка, метод getConnection() сгенерирует исключение SQLException, о котором подробно будет рассказано в подразделе «Обработка ошибок».
Например, вызов методаConnection dbh =
DriverManager.getConnection(«jdbc:mysql://localhost/SalesDept»
+ «?user=username»
+ «&password=userpassword»
+ «&characterEncoding=cp1251»);осуществляет подключение к серверу MySQL, работающему на локальном компьютере, используя имя пользователя username и пароль userpassword, устанавливает для взаимодействия с сервером кодировку CP-1251 и выбирает базу данных SalesDept (Отдел продаж) в качестве текущей. Созданному соединению соответствует объект dbh класса Connection.
...Совет
В целях защиты от несанкционированного доступа рекомендуется подключаться к базе данных не от имени пользователя root, а от имени специально созданного пользователя с минимально необходимыми правами доступа. О регистрации пользователей и настройке прав читайте в главе 4.
Создайте теперь сервлет Connect с исходным кодом, представленным в листинге 4.17.
Листинг 4.17.
Подключение к базе данных
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class Connect extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
response.setContentType(“text/html;charset=windows-1251”);
PrintWriter out = response.getWriter();
try {
//Подсоединяемся к базе данных
Connection dbh =
DriverManager.getConnection(«jdbc:mysql://localhost/SalesDept»
+»?user=username&password=userpassword&characterEncoding=cp1251»);
//Обрабатываем испключение
} catch (SQLException ex) {
out.println(“Ошибка доступа к базе данных. Приносим свои извинения”);
return;
}
out.println(«Подключение выполнено успешно»);