404 с пружиной 3 - PullRequest
       12

404 с пружиной 3

2 голосов
/ 21 декабря 2010

привет, я прохожу свои первые уроки с весны 3. Я создал динамическое веб-приложение в затмении со следующей структурой.

spring3mvc \src\my.spring.HelloWorldController.java
                \WebContent
                   |
                   |-----WEB-INF\jsp\hello.jsp                     
                   |-----index.jsp
                   |-----WEB-INF\web.xml
                   |-----WEB-INF\spring-servlet.xml
                   |-----WEB-INF\lib\...*.jar files

Я создал spring-servlet.xml, как показано ниже

 <beans xmlns="http://www.springframework.org/schema/beans" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:context="http://www.springframework.org/schema/context"
             xmlns:mvc="http://www.springframework.org/schema/mvc" 
             xmlns:p="http://www.springframework.org/schema/p"   
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
               http://www.springframework.org/schema/mvc       
               http://www.springframework.org/schema/context
                http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                http://www.springframework.org/schema/context/spring-context-3.0.xsd">
                 <mvc:annotation-driven/>

        <context:component-scan base-package="my.spring" />
        <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            p:prefix="/WEB-INF/jsp/"
        p:suffix=".jsp">

          <property name="contentType" value="text/html; charset=utf-8" />
        </bean>
      </beans>

и закодировал контроллер

package my.spring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {
 @RequestMapping("/hello")
 public ModelAndView helloWorld() {
  String message = "Hello World, Spring 3.0!";
  return new ModelAndView("hello", "message", message);
 }
}

index.jsp имеет ссылку на просмотр hello

<html>
<body>
<a href="hello.html">Say Hello</a>

</body>
</html>

наконец в hello.jsp я положил

<html>
<body>
${message}
</body>
</html>

Мой web.xml имеет

<display-name>Spring3MVC</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

Когда я запускаю приложение на сервере Tomcat6 (через затмение), я вижу страницу индекса на http://localhost:8080/Spring3MVC/. Она отображает ссылку наПривет. Когда я нажимаю на нее (http://localhost:8080/Spring3MVC/hello.html),I выдает ошибку 404.

message /Spring3MVC/hello.html
description The requested resource (/Spring3MVC/hello.html) is not available.

Есть идеи, как мне это решить?

спасибо

mark.

Ответы [ 3 ]

2 голосов
/ 21 декабря 2010

Вам необходимо настроить ViewResolver.

Вот пример конфигурации:

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

Когда вы вернетесь new ModelAndView("hello", "message", message); сверху конф. попытается загрузить

prefix value + view name + suffix value  

что потребуется jsp.

Также вам необходимо отобразить ваш сервлет в web.xml следующим образом

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>
1 голос
/ 21 декабря 2010

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

Внимательно прочитайте сообщение об ошибке, оно говорит, в чем проблема:

message /Spring3MVC/hello.html description 
The requested resource (/Spring3MVC/hello.html) is not available.

Дело в том, что hello .html (обработчик) не может быть найден, а не jsp. - Но я не знаю, в чем именно проблема. - Я попытался воспроизвести ошибку, но не получил точно такое же сообщение об ошибке.

добавлено - найти проблему

При запуске Сервера он печатает все сопоставления на контроллере в файле журнала. В вашем случае должно быть что-то вроде

INFO : org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Mapped URL path [/hallo] onto handler 'halloController'

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

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
0 голосов
/ 10 декабря 2011

У меня была такая же проблема.

Шаги для воссоздания

  1. Открыть панель инструментов в Spring Tool Suite
  2. Нажмите «Шаблон весны»
  3. Проект "в области" Создать "на панели инструментов
  4. Щелкните правой кнопкой мыши вновь созданный проект на панели проводника пакетов STS
  5. SelectRun As> Выполнить на сервере
  6. Выберите Tomcat в качестве сервера и нажмите «Готово»

Ожидаемый результат
Браузер должен запустить и отобразить домашнюю страницу Hello World, как определено действием HomeController> home и страницей просмотра home.jsp.

Фактический результат
Ошибка 404

Решение
1. Откройте HomeController.java
2. Добавьте пробел в любом месте файла. Да уж. Пространство. Хит пробел. Это решение. LOL
3. Запустите проект снова, как вы делали раньше.

Это дает ожидаемый результат.

Моя гипотеза
Класс HomeController изначально не компилируется, поэтому метод компонентного сканирования не находит его; необходимо внести изменения в файл и сохранить его. Это заставляет класс быть скомпилированным и, следовательно, делает обнаруживаемым домашний контроллер и действие / home.

Я бездельничал с файлами конфигурации, пока не вырвал свои волосы. Я даже не могу сказать вам, что заставило меня задуматься об этом. ;-) Рад, что я все понял. Надеемся, что команда Spring MVC 3 рассмотрит это, так как это может легко создать серьезный барьер для входа в другие классные рамки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...