Skip to content

Понимаю, что может быть немного запутанно, так как сервлеты работают в контексте веб-сервера, а не как обычные Java-программы с методом main(). Давайте разберем процесс более подробно.

Как работают сервлеты

Сервлеты запускаются в контейнере сервлетов (например, Apache Tomcat, Jetty и т.д.), который управляет их жизненным циклом. Вам не нужно писать метод main(), так как контейнер сам создает экземпляры сервлетов и вызывает их методы в ответ на HTTP-запросы.

Шаги для запуска сервлета

  1. Установка сервера приложений:
  2. Скачайте и установите Apache Tomcat (или другой контейнер сервлетов).
  3. Распакуйте архив в удобное для вас место.

  4. Создание проекта:

  5. Создайте структуру проекта. Например: MyWebApp/ ├── WEB-INF/ │ ├── web.xml │ └── classes/ └── HelloWorldServlet.java

  6. Написание сервлета:

  7. Создайте файл HelloWorldServlet.java с кодом, который я привел ранее.

  8. Компиляция сервлета:

  9. Вам нужно скомпилировать ваш сервлет. Для этого вам потребуется JDK и настроенный CLASSPATH на библиотеку сервлетов (например, servlet-api.jar, который находится в папке lib вашего Tomcat).
  10. В командной строке выполните: bash javac -cp "path/to/tomcat/lib/servlet-api.jar" HelloWorldServlet.java
  11. Это создаст файл HelloWorldServlet.class в той же директории.

  12. Перемещение скомпилированного класса:

  13. Переместите скомпилированный файл HelloWorldServlet.class в папку WEB-INF/classes/ вашего проекта.

  14. Создание файла web.xml:

  15. Создайте файл web.xml в папке WEB-INF/ с содержимым: xml <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>

  16. Развертывание приложения:

  17. Скопируйте папку MyWebApp в папку webapps вашего Tomcat (например, path/to/tomcat/webapps/).

  18. Запуск сервера:

  19. Запустите Tomcat, выполнив startup.bat (Windows) или startup.sh (Linux/Mac) из папки bin вашего Tomcat.

  20. Доступ к сервлету:

  21. Откройте веб-браузер и перейдите по адресу: http://localhost:8080/MyWebApp/hello.
  22. Вы должны увидеть сообщение "Hello, World!".

Заключение

Таким образом, сервлеты работают в контексте веб-сервера, и вам не нужно писать метод main(). Вместо этого вы создаете классы, которые обрабатывают HTTP-запросы, и контейнер сервлетов управляет их жизненным циклом. Если у вас есть дополнительные вопросы или что-то неясно, не стесняйтесь спрашивать!


Согласно вашему выводу, вы используете Apache Tomcat 11.0.0. Это означает, что вам нужно использовать jakarta.servlet-api.jar, так как начиная с Tomcat 9, спецификация сервлетов была перенесена в пакет jakarta, а не javax.

Шаги для компиляции сервлета с использованием Jakarta

  1. Скачайте jakarta.servlet-api.jar: Если вы еще не скачали jakarta.servlet-api.jar, выполните следующую команду:

bash wget https://repo1.maven.org/maven2/jakarta/servlet/jakarta.servlet-api/6.0.0/jakarta.servlet-api-6.0.0.jar -P /opt/tomcat/lib/

Замените 6.0.0 на актуальную версию, если необходимо.

  1. Компиляция сервлета: После того как вы скачали jakarta.servlet-api.jar, попробуйте снова скомпилировать ваш сервлет, используя новый файл:

bash javac -cp "/opt/tomcat/lib/jakarta.servlet-api-6.0.0.jar" PrivetMirServlet.java

  1. Проверьте код сервлета: Убедитесь, что ваш код сервлета использует правильные импорты. Например, для Tomcat 11 ваш код должен выглядеть так:

```java import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException; import java.io.PrintWriter;

@WebServlet("/privet") // URL для доступа к сервлету public class PrivetMirServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println("

Привет, мир!

"); out.println(""); } } ```

  1. Развертывание и тестирование: После успешной компиляции переместите скомпилированный класс в папку WEB-INF/classes вашего веб-приложения и перезапустите Tomcat. Затем вы сможете получить доступ к вашему сервлету по адресу:

http://localhost:8080/yourapp/privet

Заключение

Теперь, когда вы используете правильный файл и импорты, компиляция должна пройти успешно. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь спрашивать!

вот что получилось [[/opt/tomcat/webapps/servelet]]

пример

https://gitlab.com/javaee5603144/examples/-/tree/main/servelet?ref_type=heads