Контроллер Spring MVC не найден - PullRequest
2 голосов
/ 21 марта 2012

Это, вероятно, легко, но я что-то упускаю, я думаю.Проблема сводится к следующему: я пытаюсь использовать HelloController для отображения "/WEB-INF/hello.jsp".К сожалению, я получаю 404 при попытке получить доступ к http://example.com/app/hello

Вот код.Возможно, это легко исправить.

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>app</display-name>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  </context-param>

  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </init-param>
</servlet>

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

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.1.xsd 
                    http://www.springframework.org/schema/tx
                    http://www.springframework.org/schema/tx/spring-tx-3.1
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-3.1.xsd
                    http://www.springframework.org/schema/security
                    http://www.springframework.org/schema/security/spring-security-3.1.xsd
                    http://www.springframework.org/schema/mvc
                    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

<context:component-scan base-package="web.controller" />

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

</beans>

HelloController.java:

@Controller
public class HelloController {

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public ModelAndView helloWorld() {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello");
        return mv;
    }
}

hello.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <title>Hello</title>
</head>
<body>
<p>Hello</p>
</body>
</html>

Обновление: добавлено сообщение об ошибке для запроса.

Ошибка 404 - не найдена из RFC 2068 Протокол передачи гипертекста - HTTP / 1.1: 10.4.5 404 Not Found

Сервер не нашел ничего, соответствующего Request-URI.Не указывается, является ли условие временным или постоянным.

Если сервер не желает предоставлять эту информацию клиенту, вместо этого можно использовать код состояния 403 (Запрещено).Код состояния 410 (Унесенные) СЛЕДУЕТ использовать, если сервер через некоторый внутренне конфигурируемый механизм знает, что старый ресурс постоянно недоступен и не имеет адреса пересылки.

Ответы [ 3 ]

8 голосов
/ 21 марта 2012

Это проблема (в web.xml):

<url-pattern>/*</url-pattern>

Это перенаправит все запросы к сервлету Spring, , включая ваш запрос от контроллерав JSP.По сути, поток управления будет возвращаться из вашего контроллера обратно в Spring снова.Вам нужно сузить это так, чтобы запрос на JSP направлялся прямо в нижележащий контейнер, а не в Spring.

Попробуйте изменить его на

<url-pattern>/app*</url-pattern>

и попробуйте снова.Возможно, вам придется немного поиграть с ведущими и конечными слэшами, чтобы заставить его работать (например, <url-pattern>/app*</url-pattern> или @RequestMapping("hello") и т. Д.)

1 голос
/ 16 сентября 2012

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

<context:annotation-config />
<context:component-scan base-package="com.kfs" />
0 голосов
/ 21 марта 2012

Как вы отметили в комментарии, журнал не дает вам информации о том, что Контроллер сопоставлен с конкретным URL.Поэтому я думаю, что prblem находится в контроллере.

Убедитесь, что контроллер в пакете "mil.army.retain.web.controller" и включите аннотацию-config:

<context:annotation-config />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...