Не найдено сопоставления для HTTP-запроса с URI [/WEB-INF/pages/apiForm.jsp]

Мой обработчик пересылает в innerresourceview 'apiForm', но затем я получаю ошибку 404 RequestURI =/WEB-INF/pages/apiForm.jsp. Я уверен, что apiForm.jsp находится в /WEB -INF/pages/

13: 45: 02,034 DEBUG [org.springframework.web.servlet.view.JstlView] - Перенаправление на ресурс [/WEB-INF/pages/apiForm.jsp] в InternalResourceView 'apiForm'
  13: 45: 02,035 DEBUG [org.springframework.web.servlet.DispatcherServlet] - DispatcherServlet с именем "testapp2", определяющим значение Last-Modified для [/WEB-INF/pages/apiForm.jsp]
13: 45: 02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet] - обработчик не найден в getLastModified
13: 45: 02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet] - DispatcherServlet с запросом на обработку имени "testapp2" для [/WEB-INF/pages/apiForm.jsp]
13: 45: 02,038 WARN [org.springframework.web.servlet.PageNotFound] - Не найдено сопоставления для HTTP-запрос с URI [/WEB-INF/pages/apiForm.jsp] в DispatcherServlet с именем testapp2

13: 45: 02,045 DEBUG [org.springframework.web.servlet.DispatcherServlet] - успешно завершенный запрос
13: 45: 02,048 DEBUG [org.springframework.web.servlet.DispatcherServlet] - успешно завершенный запрос

вот как выглядит мой диспетчер .xml..

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

Ответ 1

Похоже, DispatcherServlet пытается обработать запрос apiForm.jsp, который подсказывает мне, что ваше сервлет-сопоставление web.xml направляет запросы на это пространство в DispatcherServlet.

У вас может быть что-то вроде этого?

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

Попробуйте вызвать контроллеры с другим расширением (например, например .do) и обновить сопоставление сервлета в соответствии с

 <servlet-mapping>
  <servlet>dispatcher</servlet>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

Ответ 2

Да, я знаю, что опаздываю на эту вечеринку, но это может помочь другим.

Контейнер сервлета выбирает отображение на основе самого длинного пути, который соответствует. Таким образом, вы можете поместить это отображение в свои JSP, и оно будет выбрано по отображению /*.

<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>/WEB-INF/pages/*</url-pattern>
 </servlet-mapping>

На самом деле для Tomcat вам нужно все, что вам нужно, поскольку jsp - это сервлет, который существует из коробки. Для других контейнеров вам нужно либо узнать имя сервлета JSP, либо добавить определение сервлета, например:

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>

Ответ 3

Просто добавьте <mvc:default-servlet-handler /> в конфигурацию DispatcherServlet, и все готово!

Ответ 4

вы получите сообщение No mapping found for HTTP request with URI

если вы скачали неправильный пакет

Например, ваш контроллер находится в my.package.abc но вы ошибочно положили

<context:component-scan base-package="my.package.efg*" />

или

@ComponentScan("my.package.efg*")

который в том смысле, что ваш контроллер не сканируется в контексте веб-приложения, когда запрос приходит а не только URL, но весь класс не найден!

Ответ 5

С Spring 3.1 и Tomcat 7 я получил следующую ошибку:

org.springframework.web.servlet.DispatcherServlet noHandlerFound Не найдено сопоставления для HTTP-запроса с URI [/baremvc/] в DispatcherServlet с именем "appServlet"

И мне нужно было добавить в следующую конфигурацию web.xml:

<welcome-file-list>
    <welcome-file/>
</welcome-file-list>

И приложение работает!

Ответ 6

Простая проверка может быть выполнена. В настоящее время я использую Spring архитектуру MVC вместе с спящим режимом. Я пропустил запись аннотаций @Controller чуть выше названия класса. Это вызывало у меня проблему.

@Controller
public class MyClass{
    ...
}

Надеюсь, что эта простая проверка решает вашу проблему.

Ответ 7

Я думаю, что я прочитал весь интернет, чтобы выяснить, как заставить sitemesh обрабатывать мои html-пути без расширений + пути API без расширения. Я был завернут в прямую куртку, выясняя это, каждый поворот, казалось, сломал что-то еще. Затем я наконец пришел на этот пост.

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>

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

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/views/*</url-pattern>
 </servlet-mapping>

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/decorators/*</url-pattern>
</servlet-mapping>

Введите это в свой диспетчер-servlet.xml

<mvc:default-servlet-handler/>

Ответ 8

Решение, которое помогло мне: не сопоставляйте DispatcherServlet с /*, сопоставьте его с /. Конечная конфигурация:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        ...
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

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

Ответ 9

У меня была та же проблема. Конечно, была небольшая разница. История состояла в том, что когда я снимал нижнюю строку:

<mvc:resources mapping="/resources/**" location="classpath:/resources/" />

Все было в порядке, но в присутствии этой линии возникает такая же ошибка.

После некоторых проб и ошибок, которые я обнаружил, я должен добавить следующую строку в файл контекстного приложения spring:

<mvc:annotation-driven />

Надеюсь, что это поможет!

Ответ 10

Это также может произойти, когда приложение на самом деле не компилируется, но оно все еще запущено в Tomcat. Когда я увидел это, он не компилировался, потому что проект имел специфический для проекта JDK, и код был проверен на машине, у которой не было этого конкретного JDK. Eclipse по умолчанию вместо JRE, а не JDK, а затем приложение не было скомпилировано.

Чтобы исправить это в нашем конкретном случае, мы просто отключили "Настройки проекта" здесь:

"Проект | Свойства | Компилятор Java"

Здесь более подробная информация о том, как это сделать: fooobar.com/questions/64384/...

Ответ 11

Тот же ответ, что и Brad Parks... больше текста, хотя

У меня была одна и та же проблема, и мы пробовали вышеупомянутые решения вместе со многими другими, все с отрицательными результатами. Я даже начал с нового, нового Dev env и просто установил spring -mvc-шаблон и попытался запустить его сразу после установки (должен работать, но не смог для меня)

Для меня проблема заключалась в том, что я использовал jdk1.6 в своем проекте, но моя выбранная среда исполнения в eclipse была jdk1.7. Решение заключалось в том, чтобы изменить параметры среды исполнения проекта, чтобы этот проект был установлен на jdk1.6. Щелкните правой кнопкой мыши проект → Свойства → Компилятор Java → Установите флажок "Включить специальные настройки проекта", если он еще не установлен → выберите соответствующий jdk (или добавьте, если он не установлен).

Надеюсь, это может помочь кому-то и спасти людей, потому что я провел последние несколько дней, чтобы найти ответ в каждом уголке Интернета. Я случайно наткнулся на него сам, когда начал отчаянно и искать решение в тех областях, где его (по моему мозгу) с меньшей вероятностью можно было найти. =)

Мои 2 цента. Спасибо!

Edit1: Использовать специальные настройки проекта

Edit2: Только что понял, что Брэд Паркс уже ответил на это в этой самой теме. Ну, по крайней мере, я получил "Редактор" -badge из этого = D

Ответ 12

К сожалению, это довольно распространенное сообщение об ошибке класса. Еще одна вещь, которая может пойти не так, - если вам не хватает некоторых классов/банок. Например, если вам не хватает jar файла spring -expression, диспетчер-сервлет не сможет найти ваш контроллер, как бы вы ни старались и как правильно настроено все остальное.

Ответ 13

Что вам нужно, так это иметь контроллер, который сначала отвечает на URL-адрес, который затем отображает ваш jsp. См. Ссылку для решения.

Ответ 14

"/openStudentPage" - это страница, которую я хочу открыть сначала, я сделал:

 @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model) {
     return "redirect:/openStudentPage";
    }

@RequestMapping(value = "/openStudentPage", method = RequestMethod.GET)
public String listStudents(Model model) {
    model.addAttribute("student", new Student());
    model.addAttribute("listStudents", this.StudentService.listStudents());
    return "index";
}

Ответ 15

Я столкнулся с этой проблемой в Eclipse Luna EE. Моим решением было просто перезапустить eclipse, и он волшебным образом начал правильно загружать сервлет.

Ответ 16

измените диспетчер имен сервлета на любое другое имя. поскольку диспетчер является предопределенным именем для версий spring3, spring4.

<servlet>
    <servlet-name>ahok</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>ashok</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>