Сервлет представляет специальный тип классов Java, который выполняется на веб-сервере и который обрабатывает запросы и возвращает результат обработки.
Создадим первый сервлет. Определим где-нибудь на жестком диске файл HelloServlet.java со следующим кодом:
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
try {
writer.println("<h2>Hello from HelloServlet</h2>");
} finally {
writer.close();
}
}
}
Класс сервлета наследуется от класса HttpServlet. Перед определением класса указана аннотация WebServlet, которая указывает, с какой конечной точкой будет сопоставляться данный сервлет. То есть данный сервлет будет обрабатывать запросы по адресу "/hello".
Для обработки GET-запросов (например, при обращении к сервлету из адресной строки браузера) сервлет должен переопределить метод doGet. То есть, к примеру, в данном случае get-запрос по адресу /hello будет обрабатываться методом doGet.
Этот метод принимает два параметра. Параметр типа HttpServletRequest инкапсулирует всю информацию о запросе.
А параметр типа HttpServletResponse позволяет управлять ответом.
В частности, с помощью вызова response.setContentType("text/html") устанавливается тип ответа (в данном случае, мы говорим, что ответ представляет код html).
А с помощью метода getWriter() объекта HttpServletResponse мы можем получить объект PrintWriter, через
который можно отправить какой-то определенный ответ пользователю. В данном случае через метод println() пользователю
отправляет простейший html-код. По завершению использования объекта HttpServletResponse его необходимо закрыть с помощью метода close().
Для запуска сервлета воспользуемся опять же контейнером сервлетов Apache Tomcat. В каталоге Tomcat в папке webapps создадим каталог для нового приложения, который назовем helloapp.
В папке приложения классы сервлетов должны размещаться в папке WEB-INF/classes. Создадим в каталоге helloapp папку WEB-INF, а в ней папку classes. И в папку helloapp/WEB-INF/classes поместим файл HelloServlet.java.
Но нам нужен не код сервлета, а скомпилированный класс сервлета. Поэтому скомпилируем сервлет. Для этого нам нужно использовать специальную утилиту servlet-api.jar, которая находится в каталоге Tomcata в папке lib.
В начале в командной строке/терминале перейдем с помощью команды cd к папке helloapp/WEB-INF/classes, где расположен код сервлета.
Потом для компиляции сервлета выполним следующую команду:
javac -cp .;"C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib\servlet-api.jar" HelloServlet.java
В моем случае предполагается, что Tomcat размещен в каталоге C:\Program Files\Apache Software Foundation\Tomcat 9.0.
После этого в папке helloapp/WEB-INF/classes должен появиться класс сервлета. Перезапустим Tomcat и обратимся к нашему сервлету в браузере:
Поскольку с помощью аннотации WebServlet в классе сервлета была указана точка "/hello", то при обращении к сервлету после домена и порта идет название приложения (helloapp) и конечная точка (hello).