Подтвердить что ты не робот

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

4b9b3361

Ответ 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