Не найдено сопоставление для HTTP-запроса с URI Spring MVC

Вот мой Web.xml

dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/servlet-context.xml 1

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

мой сервлет-context.xml

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

И, наконец, класс Handler. который находится под com.springexample.controller.impl

@Controller
public class IndexControllerImpl implements IndexController {

    @RequestMapping("/")
    public String index() {

        return "index";
    }
}

Однако при переходе к localhost:8080/projectname/

возвращает ошибку 404.

 Jul 27, 2013 8:18:31 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/WEB-INF/views/index.jsp] in DispatcherServlet with name 'dispatcherServlet'
Jul 27, 2013 8:18:37 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/index] in DispatcherServlet with name '

Вот моя структура проекта

Структура проекта

7 ответов

С настроенным web.xml они так, как у вас есть в вопросе, в частности:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

ВСЕ запросы к вашему веб-приложению будут направлены на DispatcherServlet, Это включает в себя такие запросы, как /tasklist/, /tasklist/some-thing.html, /tasklist/WEB-INF/views/index.jsp,

Из-за этого, когда ваш контроллер возвращает представление, которое указывает на .jspвместо того, чтобы ваш серверный контейнер обслуживал запрос, DispatcherServlet прыгает и начинает искать контроллер, который может обслуживать этот запрос, он не находит и, следовательно, 404,

Самый простой способ решить эту проблему - создать URL-адрес сервлета следующим образом:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Обратите внимание на отсутствие *, Это говорит контейнеру, что любой запрос, который не имеет path info в нем (URL без.xxx в конце), должны быть отправлены DispatcherServlet, С этой конфигурацией, когда xxx.jsp запрос получен, DispatcherServlet не рассматривается, и сервлет по умолчанию вашего сервлет-контейнера будет обслуживать запрос и представлять JSP, как ожидалось.

Надеюсь, это поможет, я понимаю, что ваши предыдущие комментарии утверждают, что проблема была решена, но решение НЕ МОЖЕТ быть просто добавлением method=RequestMethod.GET к RequestMethod,

Сначала проверьте, скомпилированы ли классы java или нет в вашем каталоге [PROJECT_NAME]\target\classes.

Если нет, у вас есть ошибки компиляции в ваших Java-классах.

У меня та же проблема.... Я меняю имя своего проекта и у меня есть эта проблема... Моим решением была проверка проектов и использование ссылок / в моем web.xml (вместо /*)

Попробуйте передать объект Model в свой метод index, и он будет работать

@RequestMapping("/")

public String index(org.springframework.ui.Model model) {

 return "index";

    }

На самом деле контейнер пружины ищет объект Model в методе отображения. Если он найдет то же самое, он передаст возвращающую строку в качестве представления в распознаватель представлений.

Надеюсь это поможет.

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Эй, пожалуйста, используйте / в вашем web.xml (вместо /*)

Я добавил папку META-INF с context.xml, содержащим

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/SpringGradleDemo"/>

SpringGradleDemo - это имя моего проекта, и оно работает. Мой сервлет-отображение "/" Я прочитал его здесь https://tomcat.apache.org/tomcat-5.5-doc/config/context.html

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

изменить на:

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
Другие вопросы по тегам