Spring Служба RESTful как WAR вместо JAR в Tomcat
Я создаю веб-службу REST в Java Spring. Я успешно загрузил STS и пример, указанный в:
"В этом руководстве вы познакомитесь с процессом создания веб-сервиса RESTful" hello world "с помощью Spring."
http://spring.io/guides/gs/rest-service/
Однако этот учебник до сих пор идет. Я хочу создать WAR файл вместо самозагружаемого jar, содержащего сервлет, и развернуть этот WAR файл. Затем я нашел этот учебник и попытался просто изменить первый файл build.gradle.
"Преобразование приложения загрузки WAR2 в w962 > в WAR"
http://spring.io/guides/gs/convert-jar-to-war/
Казалось, что он прекрасно вписывается в файл .war. Служба работает в моем диспетчере экземпляров TOMCAT.. но я получаю 404, когда пытаюсь использовать эту службу.
URL 404'd
http://localhost:8080/gs-rest-service-0.1.0/dbgreeting?name=MyName
Нужно ли модифицировать отображение?
DataBaseController.java
@RequestMapping("/dbgreeting")
public @ResponseBody DataBaseGreeter dbgreeting(
@RequestParam(value="name", required=false, defaultValue="World") String name) {
return new DataBaseGreeter(counter.incrementAndGet(),String.format(template, name));
}
Теперь у меня есть файл .war, созданный в соответствии с смешением вещей.. и беспокоился, что я, возможно, что-то пропустил.
С тех пор я обнаружил, что XAMPP на OSX не содержит папку webapp/, которая заставила меня загружать стек Bitnami Tomcat. На самом деле люди обычно переключаются между XAMPP и другими стеками? или я пропустил что-то, чтобы получить папку webapp, созданную в XAMPP?
Ответы
Ответ 1
WAR - это просто JAR со специальными полномочиями. Он должен иметь WEB-INF, под которым вам нужен web.xml для описания вашего развертывания, любых файлов конфигурации, зависящих от сервера приложений, и, как правило, lib, классов и других коэффициентов и целей.
Самый простой способ - использовать Maven для создания вашей WAR. Я думаю, вы должны просто изменить тип проекта в pom.xml от JAR до WAR. В приведенном ниже учебном руководстве используется Gradle, который, в свою очередь, использует Maven, я считаю, поэтому вы должны где-то там. Кроме этого, google для учебных пособий о том, как построить WAR. Я не верю, что Tomcat требует каких-либо специальных дескрипторов развертывания, поэтому вам понадобится только сеть
.xml.
Ответ 2
Я ожидаю увидеть некоторый вывод INFO, когда запускается приложение загрузки spring, поэтому некоторые идеи:
Попробуйте обычный экземпляр tomcat
- Загрузите и извлеките почтовый дистрибутив.
- Запустите tomcat с помощью
bin/startup.sh
- Скопируйте свою войну в каталог
webapps
- Проверьте журналы... надеюсь увидеть некоторые доказательства запуска spring
Вручную осмотреть файл войны
- Распакуйте файл войны
- Ожидайте увидеть WEB-INF/web.xml
Ответ 3
(Ответ от OP переместился с вопроса на этот вопрос)
Мальчик, я чувствую себя очень глупым. Нашел больше учебника после изменения инструкций gradle, включая очень необходимую автоматическую конфигурацию, которая отменяет/заменяет необходимость в web.xml
Решение
Инициализировать сервлет
Ранее приложение содержало метод public static void main()
, который был настроен для запуска spring -boot- gradle -plugin при использовании команды java -jar
.
Преобразуя это в WAR файл без XML файлов, вам нужен другой сигнал в контейнер сервлета о том, как запустить приложение.
SRC/Основной/Java/Привет/HelloWebXml.java
package hello;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.SpringBootServletInitializer;
public class HelloWebXml extends SpringBootServletInitializer {
@Override
protected void configure(SpringApplicationBuilder application) {
application.sources(Application.class);
}
}
Отдадим кредит на первый ответ, но вы оба были правы, что необходим web.xml(или то, что spring -Boot использует для его замены).