Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring и первый тест


Автор: fath_fast 26.4.2008, 23:49
Доброго времени суток! 
Ребята помогите разобраться. Читаю ман, вроде бы делаю всё так, как там описано а результат ноль
The requested resource (/my/mypage) is not available.
Имеем следующее.

web.xml :
Код

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">
   <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  <!-- 
Без этого листнера обойтись, насколько я понял, невозможно, т.к. он прослушивает контекст приложения, 
и именно он выводит нас на DispatcherServlet
  -->
    </listener>
    <servlet>
        <servlet-name>first</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
   <!-- ИМенно благодаря этой записи мы подгружаем: ещё один конфиг-файл first-servlet.xml, в котором и описаны нужные бины
    -->
    </servlet>
    <servlet-mapping>
        <servlet-name>first</servlet-name>
        <url-pattern>/my/*</url-pattern>
    </servlet-mapping>

</web-app>



Далее first-servlet.xml:

Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="firController" class="my.FirController"/>

</beans>



И наконец-то сам /src/my/firController :
Код

public class FirController extends AbstractController
{
       private static int counter =0;

       private static final String PARAM_MSG="message";

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

          String message = ServletRequestUtils.getRequiredStringParameter(req, PARAM_MSG);
            increaseCounter();
          ModelAndView mav = new ModelAndView("mypage");
          mav.addObject(PARAM_MSG, message);
          mav.addObject("counter", counter);
          return  mav;
      }


    private void increaseCounter()
    {
       counter++;
     }


}



Код mypage.html:
Код

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Greetings!</title>
</head>
<body>
<p>${message}</p>
You are visitor number ${counter}.
</body>
</html>



В чём может быть проблема? что я не так понял?

Автор: v2v 27.4.2008, 12:10
Цитата(fath_fast @  26.4.2008,  23:49 Найти цитируемый пост)

The requested resource (/my/mypage) is not available.

ппопробуй
/my/mypage.html

Автор: Kangaroo 27.4.2008, 21:56
fath_fast, 
а где прописан маппинг контроллера на /my/mypage ?

Автор: fath_fast 28.4.2008, 02:03
v2v, не помогла :(
Kangaroo, маппинг на /my/mypage ?
А разве
 
Код

 <bean id="firController" class="my.FirController"/>

не  является маппингом на контролл mypage? Ведь в my.FirController чётко прописано вернуть представление mypage

Автор: fath_fast 28.4.2008, 04:25
Стоп.
Работать ведь это должно так по идее...
ЗАбиваем в адресную строку браузера
http://localhost:8080/my/fir
Контейнер смоттрит web.xml и перенаправляет на обработку к  DispatcherServlet. Тот в свою очередь смотрит, что было запрошен
"fir", ищет в бинах класс firController и, найдя его, ему передаёт управление...
я правильно понимаю?

Но у меня даже http://localhost:8080/my/fir не отображается...  smile 

Автор: werdy 28.4.2008, 04:45
Привет.

Здесь надежней по расширению

web.xml
Код

    <servlet-mapping>
        <servlet-name>first</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>


Добавь мапинг в first-servlet.xml:
Код

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <value>
                     /fir.html=firController
            </value>
        </property>
    </bean>


http://localhost:8080/my/fir.html

Автор: fath_fast 28.4.2008, 05:19
werdy, да тоже неплохой вариант задать соотвествие явно.
Я пробовал по-твоему, пробовал так же применять
Код

<bean class=
“org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping”/>

(для автоматического определения контроллеров)

Но в итоге имеем 
HTTP Status 404 - /fir.html 
и что самое обидное, при запуске приложения он даже не отображает заглавный файл index.jsp
Теперешний конфиг web.xml:
Код

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>first</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>first</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

Но когда убираешь тэг <listener>, то хотя бы отображается index.jsp, может это как то связано? ПО книгам, уже всё давным давно должно работать...
Грешу на Томкэт 5.5 сейчас попробую на Глассфише запустить - может в этом проблема...

Добавлено через 10 минут и 31 секунду
Не тут то было (показывает тоже самое)... уже и не знаю где мог допустить ошибку...

Автор: werdy 28.4.2008, 06:45
Покажи first-servlet.xml

Поставь брекпоинт в котроллере, зоходит он туда или нет.

В каком каталоге лежат шаблоны jsp ?

Такое можно еще добавить чтоб определить где искать шаблоны в данном случае в /WEB-INF/jsp/
Код

    <bean id="jstlViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

Автор: Ivan Kolesnikov 28.4.2008, 07:18
Попробуй так:
Код

<bean name="/firController" class="my.FirController"/>

Здесь id заменен на name, так как id не может содержать "/", а вообще лучше мапить не по имени, а через специальный класс.
View - jsp страница mypage.jsp
Код

ModelAndView mav = new ModelAndView("/mypage.jsp");

Опять же лучше конфигурить view через xml, а в ModelAndView прописывать только имя view.
Web XML оставь из первого поста.

У меня работает следующий url: http://localhost:8080/имя_приложения/my/firController?message=Test

Автор: fath_fast 28.4.2008, 11:57
Всё, ребята - БИНГО !!!
Разобрался...
Проблема оказалось уж очень банальной... В логах при прикручивании приложения к веб-серверу затаились несколько строк, говорящих об исключении, сразу их и не заметил...
Теперь всё работает...
Огромное всем спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)