Не найдено сопоставление для 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>