Spring MVC: RequestMapping не работает, URL-адреса не определены - PullRequest
1 голос
/ 27 ноября 2011

Я погуглил эту проблему, но никто не кажется, что у меня точно такая же проблема, как у меня.

Я пытаюсь настроить простое приложение Spring MVC. Это соответствующие файлы:

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

...

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

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

    <servlet-mapping>
        <servlet-name>MyApp</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

MyApp-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

        <mvc:annotation-driven/>
        <context:component-scan base-package="myapp.gui"/>

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

HomeController.java

@Controller
public class HomeController 
{
    @RequestMapping({"/"})
    public String showHomePage(Map<String,Object> model)
    {
        return "home";
    }
}

У меня есть home.jsp в WEB-INF \ views. Проблема в том, что мое приложение не возвращает домашнюю страницу. Я просто получаю 404, и хотя Spring находит мой контроллер (в журнале так написано), он выдает ошибку: пути URL не определены.

Кто-нибудь может увидеть, что я делаю не так?

Пол

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Можете ли вы попробовать использовать / app / * в качестве URL-адреса отображения сервлета и / home в качестве RequestMapping.Затем попробуйте получить к нему доступ через / app / home.Существуют определенные проблемы с отображением / * - как только вы настроите работу с / app с остальной частью сопоставления - мы можем рассмотреть удаление / app

0 голосов
/ 27 ноября 2011

Однажды я хотел завершить весенний проект MVC с URL-адресами отдыха, и я тоже не смог найти действительно полезных ресурсов. Я опубликовал статью в своем блоге, но с тех пор удалил блог. Вот выдержка из поста:

Я использую:

  • NetBeans 6.9.1
  • Spring Framework 3.0.2 RELEASE (включая JSTL)
  • JAVA JDK 6
  • GlassFish Server 3
    • Запустить новый проект NetBeans
    • выберите Java Web - веб-приложение
    • Нажмите Далее>
    • Введите имя проекта "restMVC" и выберите местоположение проекта
    • Нажмите Далее>
    • Выберите GlassFish Server 3 - выберите Java EE 6 Web
    • Нажмите Далее>
    • Проверьте Spring Web MVC - перейдите на вкладку Конфигурация и измените Имя диспетчера на "restMVC" и Сопоставление диспетчера на "/"
    • Нажмите Готово
  1. Открыть restMVC-servlet.xml - мы хотим, чтобы сервлет искал аннотацию @Controller в классах в конкретном пакете, для этого нам нужно вставить контекст: компонент-сканирование в файл, что означает, что мы Также необходимо добавить схему расположения следующим образом:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="
    
      http://www.springframework.org/schema/beans
    
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    <context:component-scan base-package="restMVC.web"/>
    ...
    

    Конечно, мы еще не создали пакет, поэтому давайте сделаем это.

    • Щелкните правой кнопкой мыши «Пакеты с исходным кодом»
    • Перейти к новому
    • Нажмите Java пакет
    • Введите название пакета restMVC.web
  2. Теперь мы можем создать наш первый контроллер -

    • Щелкните правой кнопкой мыши новый пакет restMVC.web
    • Перейти к новому
    • Нажмите Java класс
    • Введите имя класса myController
  3. Затем добавьте аннотацию @Controller, затем щелкните правой кнопкой мыши - исправьте импорт:

    package restMVC.web;
    import org.springframework.stereotype.Controller;
    
    @Controller
    public class myController {
    }
    
  4. Теперь мы можем добавить несколько URI сопоставления запросов, помните, что теперь у нас есть много разных вариантов сопоставления с использованием аннотации @RequestMapping, поэтому обязательно ознакомьтесь с Spring Docs.

    package restMVC.web;
    
    import java.util.ArrayList;
    import java.util.List;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class myController {
        @RequestMapping("/test")
        public String getTests(Model model) {
            List tests = new ArrayList();
            tests.add("<a href=\"test/1\">test 1</a>");
            tests.add("<a href=\"test/2\">test 2</a>");
            model.addAttribute("tests", tests);
            return "tests";
        }
        @RequestMapping("/test/{testId}")
        public String getTest(@PathVariable String testId, Model model) {
            List tests = new ArrayList();
            tests.add("test " + testId);
            model.addAttribute("tests", tests);
            return "tests";
        }
    }
    
  5. Нам нужно создать представление для tests.jsp. Это создается путем взятия строки, возвращаемой из методов getTests и getTest («тесты»), и с помощью viewResolver в добавлении restMVC-servlet.xml .jsp - подробнее об этом позже.

    • Щелкните правой кнопкой мыши (просмотр проектов) restMVC -> Веб-страницы -> WEB-INF -> папка jsp
    • Нажмите Новый
    • Нажмите JSP ..
    • Введите имя файла "tests"
  6. Редактировать tests.jsp. Введите в верхней части страницы следующее:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    И затем это внутри элемента тела:

    <table>
      <c:forEach var="test" items="${tests}">
        <tr>
          <td>${test}</td>
        </tr>
      </c:forEach>
    </table>
    
  7. Наконец, нам нужно убедиться, что viewResolver находится в restMVC-servlet.xml. Полный файл должен выглядеть так:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">
      <context:component-scan base-package="restMVC.web"/>
      <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/jsp/"
        p:suffix=".jsp" />
    </beans>
    
  8. Возможно, вы захотите отредактировать redirect.jsp, чтобы он перенаправил на /test.

  9. Теперь нажмите «Запустить основной проект»

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