«1. Обзор
В этой быстрой статье мы программно создадим, настроим и запустим сервер Tomcat.
2. Настройка
Прежде чем мы начнем, нам нужно настроить наш проект Maven, добавив следующие зависимости в наш pom.xml:
<dependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${apache.httpclient}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
Вот ссылка на Maven Central с последними версиями зависимости, используемые здесь в проекте.
3. Инициализация и настройка Tomcat
Давайте сначала поговорим о шагах, необходимых для инициализации и настройки сервера Tomcat.
3.1. Создание Tomcat
Мы можем создать экземпляр, просто выполнив:
Tomcat tomcat = new Tomcat();
Теперь, когда у нас есть сервер, давайте настроим его.
3.2. Настройка Tomcat
Мы сосредоточимся на том, как настроить и запустить сервер, добавив сервлет и фильтр.
Во-первых, нам нужно настроить порт, имя хоста и базу приложений (обычно это веб-приложения). Для нашей цели мы будем использовать текущий каталог:
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());
На данный момент у нас есть почти функционирующий Томкэт.
Далее мы добавим сервлет и фильтр и запустим сервер, чтобы проверить, работает ли он.
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- сервлет и видим тестовую страницу:
И если мы посмотрим на логи, то увидим что-то вроде этого:
Эти логи показывают, что Tomcat начал прослушивать порт 8080, а также что наш фильтр работает правильно.
5. Заключение
В этом руководстве мы прошли базовую программную настройку сервера Tomcat.
Мы рассмотрели, как создавать, настраивать и запускать сервер, а также как программно добавлять сервлет и фильтр в контекст Tomcat.
Как всегда, полную реализацию можно найти на Github.