Учебники

Сервлеты — Упаковка

Структура веб-приложения, включающая подкаталог WEB-INF, является стандартной для всех веб-приложений Java и определяется спецификацией API сервлета. Дано имя каталога верхнего уровня myapp. Вот как выглядит эта структура каталогов:

/myapp
   /images
   /WEB-INF
      /classes
      /lib

Подкаталог WEB-INF содержит дескриптор развертывания приложения с именем web.xml. Все файлы HTML должны храниться в каталоге верхнего уровня, который является myapp . Для пользователя-администратора вы найдете каталог ROOT в качестве родительского каталога.

Создание сервлетов в пакетах

Каталог WEB-INF / classes содержит все классы сервлетов и другие файлы классов в структуре, которая соответствует имени их пакета. Например, если у вас есть полное имя класса com.myorg.MyServlet , этот класс сервлета должен находиться в следующем каталоге:

/myapp/WEB-INF/classes/com/myorg/MyServlet.class 

Ниже приведен пример создания класса MyServlet с именем пакета com.myorg.

// Name your package
package com.myorg;  

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class MyServlet extends HttpServlet {
 
   private String message;
 
   public void init() throws ServletException {
      // Do required initialization
      message = "Hello World";
   }
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      // Actual logic goes here.
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
   }

   public void destroy() {
      // do nothing.
   }
}

Компиляция сервлетов в пакетах

Нет ничего особенного в том, чтобы скомпилировать класс, доступный в пакете. Самый простой способ — сохранить ваш Java-файл по полному пути, как указано выше, класс будет храниться в com.myorg. Вам также необходимо добавить этот каталог в CLASSPATH.

Предполагая, что ваша среда настроена правильно, перейдите в каталог <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes и скомпилируйте MyServlet.java следующим образом

$ javac MyServlet.java

Если сервлет зависит от каких-либо других библиотек, вы должны также включить эти файлы JAR в свой CLASSPATH. Я включил только JAR-файл servlet-api.jar, потому что я не использую никакую другую библиотеку в программе Hello World.

В этой командной строке используется встроенный компилятор javac, поставляемый с Sun Microsystems Java Software Development Kit (JDK). Чтобы эта команда работала правильно, вы должны указать расположение Java SDK, которое вы используете, в переменной среды PATH.

Если все пойдет хорошо, приведенная выше компиляция выдаст файл MyServlet.class в том же каталоге. В следующем разделе объясняется, как скомпилированный сервлет будет развернут в производстве.

Развертывание упакованного сервлета

По умолчанию приложение сервлета находится в пути <Tomcat-instaldirectory> / webapps / ROOT, а файл класса будет находиться в <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Если у вас есть полное имя класса com.myorg.MyServlet , то этот класс сервлета должен находиться в WEB-INF / classes / com / myorg / MyServlet.class, и вам потребуется создать следующие записи в файле web.xml, расположенном по адресу в <каталог-установки Tomcat> / webapps / ROOT / WEB-INF /

<servlet>
   <servlet-name>MyServlet</servlet-name>
   <servlet-class>com.myorg.MyServlet</servlet-class>
</servlet>
 
<servlet-mapping>
   <servlet-name>MyServlet</servlet-name>
   <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>

Над записями, которые будут созданы внутри тегов <web-app> … </ web-app>, доступных в файле web.xml. В этой таблице уже могут быть различные записи, но не берите в голову.

Вы почти закончили, теперь давайте запустим сервер Tomcat, используя <Tomcat-installationdirectory> \ bin \ startup.bat (в Windows) или <Tomcat-InstallationDirectory> /bin/startup.sh (в Linux / Solaris и т. Д.) И, наконец, наберите http: // localhost: 8080 / MyServlet в адресной строке браузера. Если все будет хорошо, вы получите следующий результат —