Конфигурация spring-webmvc.xml

102
05 января 2021, 05:10

Помогите сконфигурировать Spring.

Контроллер

@Controller
@RequestMapping("/*")
public class IndexController {
    private final Logger log = LoggerFactory.getLogger(this.getClass());
    @RequestMapping(method = RequestMethod.GET)
    public String printHello(HttpServletRequest request, Model model) {
...

Репозиторий

@Repository
public class JpaRepositoryImpl implements JpaRepository {
    @PersistenceContext
    private EntityManager emf; // Для внедрения EntityManager
...

ну и куча остальных нужных классов

Репозиторий подключен в spring-db.xml

...
<context:component-scan base-package="ru.bityard.bitrix24.serverAuth.repository"/>
...

Контроллер и сервисы подключены в spring-mvc.xml

...
    <context:component-scan base-package="ru.bityard.bitrix24.serverAuth.**.web"/>
    <context:component-scan base-package="ru.bityard.bitrix24.serverAuth.**.service"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
...

Все остальные бины я собираю в spring-app.xml

И вот все это я пытаюсь собрать воедино в web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <display-name>Spring MVC Application</display-name>
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:spring-app.xml
            classpath:spring-db.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>index</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:spring-mvc.xml
            </param-value>
        </init-param>
        <init-param>
            <param-name>throwExceptionIfNoHandlerFound</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>index</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

Получаю ошибку:

2019-05-25 11:48:00 DEBUG http-nio-8080-exec-4:DispatcherServlet.java:doService:891 - DispatcherServlet with name 'index' processing GET request for [/index.php]
2019-05-25 11:48:00 DEBUG http-nio-8080-exec-4:AbstractHandlerMethodMapping.java:getHandlerInternal:312 - Looking up handler method for path /index.php
2019-05-25 11:48:00 DEBUG http-nio-8080-exec-4:AbstractHandlerMethodMapping.java:getHandlerInternal:322 - Did not find handler method for [/index.php]
2019-05-25 11:48:00 WARN  http-nio-8080-exec-4:DispatcherServlet.java:noHandlerFound:1205 - No mapping found for HTTP request with URI [/index.php] in DispatcherServlet with name 'index'
2019-05-25 11:48:00 DEBUG http-nio-8080-exec-4:FrameworkServlet.java:processRequest:1000 - Successfully completed request

Где у меня ошибка в конфигурации?

Answer 1

Мне удалось решить проблему так:

файлы spring-db.xml и spring-mvc.xml я импортировал в spring-app.xml

spring-app.xml

...
    <import resource="spring-db.xml"/>
    <import resource="spring-mvc.xml"/>
...

а настройку диспетчера сделал так

web.xml

... 
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.XmlWebApplicationContext
        </param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:spring-app.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>mvc-despetcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
          <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:spring-app.xml
            </param-value>
        </init-param>
        <init-param>
            <param-name>throwExceptionIfNoHandlerFound</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>
                org.springframework.web.context.support.XmlWebApplicationContext
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc-despetcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
...

и комбайн завелся...

Answer 2

Замените @RequestMapping("/*") на @RequestMapping("/") - звездочка лишняя.

Эту аннотацию перед методом лучше указывать, а не общую для всего класса.

А еще лучше перед методом написать:

@RequestMapping({"/", "/index.html", "/index.php"})

См. Spring RequestMapping

READ ALSO
Ошибка с заполнением Spinner Android

Ошибка с заполнением Spinner Android

Хочу полученные результаты от сервера закинуть в Spinner, но выкидывает ошибку:

118
Не могу создать executable JAR-архив

Не могу создать executable JAR-архив

Пытаюсь поподробнее разобраться с ручной компиляцией java-проектов и появилась задача создать простой выполняемый jar-архивИмеется файл:

122
Перезагрузка скриптов

Перезагрузка скриптов

Возможно ли на JS динамически перезагрузить подключенные скрипты (обновить их кэш - загрузить scriptjs?time=111 с текущим значением времени)?

98
Не могу понять тестовое задание js

Не могу понять тестовое задание js

Есть тестовое задание tutu-ru (просто решил попрактиковаться )со следующим текстом:

94