MartyMcAir
@MartyMcAir

Какие бывают варианты запуска spring-webmvc?

Доброго времени суток.
Изучаю Spring Framework опробовал разные вариации его юза.
Много вариаций запуска приложений основанных на Spring, легко запутаться.
Приобрёл курс в надежде, что после курса, всё по полочкам разложится и придёт более глубокое понимание Spring'a).

В курсе проект создаётся в IDEA используя maven архетип: maven-archetype-webapp.
Но сама проблема в том, что автор курса использует IDEA Ultimate, которой конечно же у меня нет (уже). (В курсе автор подключает TomCat.)
Возможно ли запустить данный проект средствами Спринга, без использования IDEA Ultimate, и если да то как?
Какие зависимости в pom.xml необходимо подключить, и как сконфигурировать, что бы всё заработало?

Структура проекта с курса:
5fb2cbb36ccd6901463418.jpeg
Файлы:
HomeController.java:
@Controller
public class HomeController {
    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public ModelAndView home() {
        return new ModelAndView("index");    }   }

app-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <context:component-scan base-package="org.example"/>
</beans>

web-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/mvc
		http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="org.example"/>
    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".html"/>
    </bean>
</beans

index.html - ничего интересного, внутри body, тег h2 Hello World и всё
web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:app-config.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>my-dispatcher-servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfiguration</param-name>
            <param-value>classpath:web-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>my-dispatcher-servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

В файле pom.xml - автор курса оставил всё как есть, т.е. стандартно сгенерированное с maven архетипа: maven-archetype-webapp.. И была добавлено только одна дополнительная зависимость (да это spring-webmvc):
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency>


Для примера.. Пробовал официал гайд
https://spring.io/guides/gs/rest-service/ - их пример проекта запускается, если:
0) Spring на странице рекомендует использовать https://adoptopenjdk.net/.
1) убрать зависимость spring-boot-starter-tomcat..
2) IDEA ругалась на spring-boot-maven-plugin does not found..
Исправляется добавлением зависимости.
<dependency>
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-maven-plugin</artifactId>
	  <version>2.3.4.RELEASE</version>
	  <type>maven-plugin</type>
</dependency>

3) Сконфигурировать, что бы использовался везде компилятором и в проекте Java 1.8 или 11.
4) Создать простой @RestController и др. файлы проекта
4) После первого запуска приложения, следует в конфиге IDEA, добавить в поле VM options:
-Ddebug=true И перезапуститься в режиме Debug.
5) После запуска смотрим в браузере результ: localhost:8080/greeting
6) Меняем что нибудь в файле GreetingController, идём в меню Build -> Recompile (либо цеплям в настройках горяч клавиши, на то чтобы IDEA перекомпилировала все изменённые файлы.)
и Spring сам подхватывает перекомпилированный файл. И изменения видны в браузере красота).
И IDEA Ultimate не понадобилась.

Пробовал по всякому.., перенести проект с курса вместе со всеми xml конфигами, на spring boot.. Но ничего не выходит, и что-то подсказывает, что это и не должно так работать, эти два проекта совершенно по-разному конфигурируются.

(Учителя с курса, вызывают сомнения, в понимании того что они делают..
Мало самой сути объясняют, нет пошагово что зачем и как, больше похоже на сухую инструкцию без понимания. - отсюда и сложности не могу понять, как запустить данный проект без IDEA Ultimate, средствами Spring'a., своих знаний и пониманий Spring'a не хватает.)
  • Вопрос задан
  • 316 просмотров
Решения вопроса 1
MartyMcAir
@MartyMcAir Автор вопроса
1) Да согласен. (имелось в виду, что он может подключать встроенный серв.)
2) а жаль)..
Думал может, есть какой-то секретный ниндзя dependency для юза, не знаю какой нить embeded серв или maven plugin.
3) Годно, согласен. Сейчас для меня, всё использование maven заключается в подключении dependency и только, хорошо бы понимать его по глубже..
4) Для старта Spring Boot IDEA не нужна - это понятно.

SpringBoot - основан на Spring Framework, и подключив один какой-нибудь spring-boot-*..-starter можно подключить сразу пачку библиотек (в том числе, там конечно будут библиотеки и со Spring Framework) и + все плюшки SpringBoot, авто конфигурация и прочее..
- Так.. значит теоретически и возможно, если достаточно хорошо разбирать в глубь Spring''à, и подключить к такому проекту только необходимое, для его запуска как со SpringBoot.., но без каких либо доп. зависимостей, которые он автоматом подключает..
Ведь главная фишка SpringFramework - это его максимальная гибкость, а значит и теоретически должен быть способ, подключив что-то ещё, да бы это работало как SpringBoot - но без его доп. зависимостей.

За страничку пасиб.
Про SpringTools4 для IDE'шек даж как-то не подумал. Видел пишут, что есть какой-то "helper toolза" у Spring'а, для Ecipse и всё, а она оказывается есть и для Visual Studio. Должно быть оч. полезная, ок посмотрим, попробуем.

UPD: необходимо было добавить след. зависимости..
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

И для успешной переадресации на страницу index., накинуть на отдельный котроллер мэпппинга вида: @GetMapping(value = "/"..

git исходники (разные вариации.., конечно же не в...

Помогла в основном медитация), над github'ом и др. ресурсами с кодом.
И как оказалось, всё прекрасно скрещивается и работает).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
1) Spring ничто сам ничего не запускает - это фреймворк.
2) Не надо прыгать с одного урока, на другой. Скрестить ужа с ежом не получиться
3) Учите maven.
4) Если хотите быстрый старт, то начните со SpringBoot, он проще. Для старта SpringBoot IDEA не нужна, всё делается в рамках maven.

И да пользуйтесь официальной документацией.
В частности вот страница по выбору IDE
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы