2016-06-15 7 views
0

Я пытаюсь написать простое веб-приложение Spring MVC без использования аннотаций. Однако, когда я получаю доступ к определенному URL-адресу, я получаю сообщение об ошибке HTTP 404. Соответствующий фрагмент кода ниже: измененияSpring MVC без аннотации - HTTP 404 страница не найдена ошибка

web.xml сделано для фронт-контроллера:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee"  xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.4"> 
    <display-name>POCProject</display-name> 
    <servlet> 
    <servlet-name>FrontController</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
    <servlet-mapping> 
     <servlet-name>FrontController</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

Имя сервлет ->FrontController

Следовательно, имеют следующий файл конфигурации - > FrontController-servlet.xml

<beans ...> 

    <bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 

    <bean name="/userdetails" class="com.example.controllers.UserDetailsController"/> 

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

В вышеописанном файле конфигурации, класс отображения Обработчик ->org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

Класс контроллера для URL /userdetails является ->com.example.controllers.UserDetailsController

Код для этого контроллера ниже:

public class UserDetailsController extends AbstractController { 

    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse res) throws Exception { 

    ModelAndView mw = new ModelAndView("userInfo"); 
    return mw; 
    } 
} 

Таким образом, для запроса с /userdetails контроллер должен послать вид userInfo.html

Однако, когда я вызываю это, я получаю ошибку HTTP 404.

Я развернул это в Tomcat Apache, а ниже - сообщение, которое я получаю в консоли tomcat.

WARNING: No mapping found for HTTP request with URI [/POCProject/WEB-INF/userInfo.html] in DispatcherServlet with name "FrontController"

Все входы на то, что я здесь отсутствует?

+1

Ну, вы успешно сконфигурировали пружинную часть, потому что, поскольку ошибка заключается в том, что для WEB-INF/userInfo.html ошибка, DispatcherServlet, контроллер и Resolver обработали запрос. Во-первых, существует ли файл userInfo.html в папке WEB-INF? Если это так, то * uncommon * перенаправляется на html-файлы, потому что они не будут переданной моделью, поэтому вы должны использовать jsp-файлы в своей POC. –

+1

Добавьте '' mvc: default-servlet-handler /> 'в вашу конфигурацию. –

+0

@SergeBallesta: Спасибо за ваш ответ, действительно информативный. Файл .html существует в WEB-INF. У меня есть сомнения, почему это не может быть простой HTML-файл? Разве HTML не является технологией просмотра? Я изменил с .html на .jsp (и изменения в конфигурации), и он отлично работает. Теперь у меня есть это сомнение, почему мы не можем передавать html-страницы? – CuriousMind

ответ

1

документация Javadoc для InternalResourceViewResolver говорит, что это (подчеркнуть мое):

Wrapper для JSP или другой ресурс в пределах одной и той же веб-приложения. Выдает объекты модели в качестве атрибутов запроса и переадресовывает запрос на указанный ресурс URL с использованием RequestDispatcher.

JSP внутренне преобразован в настоящий сервлет Tomcat (или любым контейнером сервлета), который является ресурсом, подходящим для пересылки. Но простого HTML нет.

Это означает, что Spring InternalResourceViewResolver не может использовать представления HTML, и вы должны преобразовать их в файлы JSP.

+0

Большое спасибо за информацию, очень полезно. – CuriousMind