Программно создавать, настраивать и запускать сервер Tomcat

Программно создавать, настраивать и запускать сервер Tomcat

1. обзор

В этой быстрой статье мы собираемся программно создать, настроить и запуститьTomcat server.

2. Настроить

Прежде чем мы начнем, нам нужно настроить наш проект Maven, добавив следующие зависимости к нашемуpom.xml:


    
        org.apache.tomcat
        tomcat-catalina
        ${tomcat.version}
    
    
        org.apache.httpcomponents
        httpclient
        ${apache.httpclient}
    
    
        junit
        junit
        ${junit.version}
        test
    

Вотlink to Maven Central с последними версиями зависимостей, используемых здесь в проекте.

3. Инициализация и настройка Tomcat

Давайте сначала поговорим о шагах, необходимых для инициализации и настройки сервера Tomcat.

3.1. Создание Tomcat

Мы можем создать экземпляр, просто выполнив:

Tomcat tomcat = new Tomcat();

Теперь, когда у нас есть сервер, давайте настроим его.

3.2. Настройка Tomcat

Мы сосредоточимся на том, как запустить сервер, добавив сервлет и фильтр.

Во-первых, нам нужно настроить порт, имя хоста иappBase (обычно веб-приложения). Для нашей цели мы будем использовать текущий каталог:

tomcat.setPort(8080);
tomcat.setHostname("localhost");
String appBase = ".";
tomcat.getHost().setAppBase(appBase);

Затем нам нужно установитьdocBase (корневой каталог контекста для этого веб-приложения):

File docBase = new File(System.getProperty("java.io.tmpdir"));
Context context = tomcat.addContext("", docBase.getAbsolutePath());

На данный момент у нас есть почти работающий Tomcat.

Затем мы добавим сервлет и фильтр и запустим сервер, чтобы проверить, работает ли он.

3.3. Добавление сервлета в контекст Tomcat

Затем мы добавим простой текст вHttpServletResponse.. Это текст, который будет отображаться при доступе к сопоставлению URL-адресов для этого сервлета.

Давайте сначала определим наш сервлет:

public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(
      HttpServletRequest req,
      HttpServletResponse resp) throws IOException {

        resp.setStatus(HttpServletResponse.SC_OK);
        resp.getWriter().write("test");
        resp.getWriter().flush();
        resp.getWriter().close();
    }
}

Теперь мы добавим этот сервлет на сервер Tomcat:

Class servletClass = MyServlet.class;
Tomcat.addServlet(
  context, servletClass.getSimpleName(), servletClass.getName());
context.addServletMappingDecoded(
  "/my-servlet/*", servletClass.getSimpleName());

3.4. Добавление фильтра в контекст Tomcat

Далее мы определяем фильтр и добавляем его в Tomcat:

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        // ...
    }

    @Override
    public void doFilter(
      ServletRequest request,
      ServletResponse response,
      FilterChain chain)
      throws IOException, ServletException {

        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpResponse.addHeader("myHeader", "myHeaderValue");
        chain.doFilter(request, httpResponse);
    }

    @Override
    public void destroy() {
        // ...
    }
}

Добавление фильтра в контекст требует немного больше работы:

Class filterClass = MyFilter.class;
FilterDef myFilterDef = new FilterDef();
myFilterDef.setFilterClass(filterClass.getName());
myFilterDef.setFilterName(filterClass.getSimpleName());
context.addFilterDef(myFilterDef);

FilterMap myFilterMap = new FilterMap();
myFilterMap.setFilterName(filterClass.getSimpleName());
myFilterMap.addURLPattern("/my-servlet/*");
context.addFilterMap(myFilterMap);

На этом этапе у нас должен быть сервлет и фильтр, добавленный к Tomcat.

Все, что осталось сделать, это запустить его, получить «тестовую» страницу и проверить журналы, чтобы увидеть, работает ли фильтр.

4. Запуск Tomcat

Это довольно простая операция, и после этого мы должны увидеть запущенный Tomcat:

tomcat.start();
tomcat.getServer().await();

После запуска мы можем перейти кhttp://localhost:8080/my-servlet и увидеть тестовую страницу:

image

И если мы посмотрим на журналы, мы увидим что-то вроде этого:

image

Эти журналы показывают, что Tomcat начал прослушивать порт 8080, а также что наш фильтр работает правильно.

5. Заключение

В этом руководстве мы прошли базовую программную настройку сервера Tomcat.

Мы рассмотрели, как создавать, настраивать и запускать сервер, а также как программно добавлять сервлет и фильтр в контекст Tomcat.

Как всегда, полную реализацию можно найти вover on Github.