Исходя из опыта ASP.NET, я нахожу шокирующим то, как много работы требуется для запуска веб-приложения с Eclipse WTP и Maven, особенно если вы учитесь самостоятельно. Надеемся, что это краткое руководство поможет кому-то еще быстро набрать скорость.
Есть два способа заставить проект hello world работать в Eclipse WTP с Maven. Вы можете создать динамический веб-проект и затем добавить природу Maven, или вы можете сделать наоборот.
Предварительные условия для Eclipse с сайтами обновлений
Начальная конфигурация
Вариант 1. Создайте динамический веб-проект, затем добавьте Maven Nature
Создать новый проект Maven, выбрать архетип
org.apache.maven.archetypes: Maven-архетип-WebApp
Изменение на перспективу Java EE.
Создайте новую исходную папку, src \ main \ java . Обратите внимание, что Eclipse недостаточно умен, чтобы сделать это для вас, а также порядок папок неправильный.
Папка src \ main \ java указана после src \ main \ resources . Это можно исправить вручную позже в свойствах проекта.
Создать новый сервлет. Обратите внимание, что Eclipse по умолчанию использует этот файл в неправильной папке src \ main \ resources , поскольку порядок указан неверно. Вместо этого вручную выберите src \ main \ java .
Измените сопоставление URL на второй странице мастера на / *, чтобы упростить тестирование.
Теперь наш сервлет готов, но зависимости от API сервлета не связаны. A) мы можем добавить сервлет api в качестве зависимости от нашего проекта или B) мы можем привязать конфигурацию сервера Eclipse для Apache 7.0.
Для варианта A добавьте эту зависимость в pom:
.
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>7.0.${set this}</version>
<scope>provided</scope>
</dependency>
Тест публикации зависимостей :
Добавление времени йода в пом.
Добавьте эту строку в сервлет, созданный ранее для метода doGet, и импортируйте необходимые зависимости:
.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("The time is now: " + new DateTime().toString());
}
Перезагрузите тестовую страницу, и результат должен быть:
Время пришло: 2012-03-03T14: 14: 29.890-05: 00
Теперь, если вы хотите поиграть с Servlet 3.0 и аннотациями, он не включен по умолчанию, по какой причине я не знаю.
Сначала заставьте Maven использовать Java 1.6, добавив это в pom, иначе при каждом обновлении pom конфигурация будет возвращаться к Java 1.5.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
Откройте Свойства проекта -> Фасеты проекта. Измените версию в разделе «Динамический веб-модуль» на 3.0, измените версию Java 1.6
Создайте новый сервлет с именем класса AnnotatedServlet в src \ main \ java и обратите внимание, как автоматически создается аннотация @WebServlet.
Вариант 2: создать динамический веб-проект, а затем добавить Maven Nature
- Выберите Tomcat Runtime и динамический модуль версии 3.0
- Создать исходную папку src \ main \ java
- Установить выходную цель по умолчанию \ классы
- Установить контекстную директорию src \ main \ webapp
- Проверить генерацию web.xml
- Создание сервлета с отображением / * для быстрого тестирования
- Добавить оператор вывода в метод doGet
response.getWriter().println("Another test");
Дважды щелкните «Дескриптор развертывания» и добавьте этот атрибут в корневой элемент веб-приложения metadata-complete="false"
Щелкните правой кнопкой мыши проект и выберите Запуск от имени -> Запуск на сервере
- Щелкните правой кнопкой мыши проект -> Настройка -> Преобразовать в Maven Project
- Выбрать упаковку как войну
- Отредактируйте pom и установите компилятор для использования java 1.6 и добавьте зависимость joda-time:
.
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>