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


этот вопрос уже есть ответ здесь:

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

13:45:02,034 DEBUG [org.springframework.сеть.сервлет.вид.JstlView] - Переадресация на ресурс [/WEB-INF/pages / apiForm.jsp] в InternalResourceView 'apiForm'
13:45:02,035 DEBUG [org.springframework.сеть.сервлет.DispatcherServlet] - DispatcherServlet с именем 'testapp2' определяет последнее измененное значение для [/WEB-INF/pages / apiForm.jsp]
13:45:02,038 отладка [орг.springframework.сеть.сервлет.DispatcherServlet] - обработчик не найден в getLastModified
13:45:02,038 DEBUG [org.springframework.сеть.сервлет.DispatcherServlet] - DispatcherServlet с именем 'testapp2' обработка запроса [/WEB-INF / pages / apiForm.jsp]
13:45:02,038 WARN [org.springframework.сеть.сервлет.PageNotFound] - отображение не найдено для HTTP-запрос с URI [/WEB-INF/pages / apiForm.jsp] в DispatcherServlet с именем 'testapp2'
13:45:02,045 DEBUG [org.springframework.сеть.сервлет.DispatcherServlet] - успешно завершен запрос
13:45:02,048 DEBUG [org.springframework.сеть.сервлет.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>
16 89

16 ответов:

похоже, что DispatcherServlet пытается обработать запрос на apiForm.jsp, который подсказывает мне, что ваша сеть.xml servlet-mapping направляет запросы на это пространство в 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>

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

контейнер сервлета выбирает отображение на основе самого длинного пути, который соответствует. Таким образом, вы можете поместить это сопоставление для своих 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>

просто добавить <mvc:default-servlet-handler /> настройки DispatcherServlet, и вы сделали!

вы получаете No mapping found for HTTP request with URI

Если вы сканировали не тот пакет

например, ваш контроллер находится в мой.пакет.abc но вы по ошибке поставили

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

или

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

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

решение, которое помогло мне: не карте DispatcherServlet to /*, сопоставить его с /. Окончательный конфиг тогда:

<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>

Я думаю, что прочитал весь интернет, чтобы выяснить, как заставить 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>

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

<mvc:default-servlet-handler/>

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

@Controller
public class MyClass{
    ...
}

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

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

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

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

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

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

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

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

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

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

<mvc:annotation-driven />

надеюсь, что это помогает!

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

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

"Project | Properties | Java Compiler"

вот более подробная информация о том, как это сделать: https://stackoverflow.com/a/2540730/26510

тот же ответ, что и Брэд Паркс... больше текста, хотя

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

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

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

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

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

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

к сожалению, это достаточно широкое сообщение об ошибке класса. Еще одна вещь, которая может пойти не так, если вы пропускаете некоторые классы/банки. Например, если вы пропускаете spring-expression jar file, the dispatch-servlet не будет в состоянии найти свой контроллер независимо от того, как сильно вы пытаетесь и как правильно все остальное настроено.

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

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

" / 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";
}

измените Диспетчер имен сервлетов на любое другое имя .потому что диспетчер-это предопределенное имя для версий 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>