Не найдено сопоставления для HTTP-запроса с URI Spring MVC
Здесь мой Web.xml
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<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
<context:component-scan base-package="com.springexample.controller.impl" />
<mvc:annotation-driven />
<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 '
Вот моя структура проекта
![Project Structure]()
Ответы
Ответ 1
Когда 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
.
Ответ 2
У меня такая же проблема....
Я меняю имя моего проекта, и у меня есть эта проблема... Мое решение заключалось в проверке выполнения проектов и использовании /
в моем web.xml(вместо /*
)
Ответ 3
Сначала проверьте, скомпилированы ли классы java или нет в каталоге [PROJECT_NAME]\target\classes.
Если нет, у вас есть некоторые ошибки компиляции в ваших Java-классах.
Ответ 4
Попробуйте передать объект Model в свой индексный метод, и он будет работать
@RequestMapping("/")
public String index(org.springframework.ui.Model model) {
return "index";
}
Фактически контейнер spring ищет объект Model в методе сопоставления. Если он найдет то же самое, он передаст возвращаемый String в виде представления в разрешающее устройство.
Надеюсь, что это поможет.
Ответ 5
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Привет, пожалуйста, используйте/в вашем web.xml(вместо/*)
Ответ 6
<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>
Ответ 7
Я добавил папку 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