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


Автор: barracuda477 14.12.2008, 19:22
При вот таком содержимом web.xml и panel-servlet.xml (мой сервлет) всё работает как нужно

web.xml

Код

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>    
    
    <servlet>
        <servlet-name>panel</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>panel</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>


panel-servlet.xml

Код

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/showParameters.htm">showParametersController</prop>
        </props>
    </property>
</bean>

<bean id="showParametersController" class="aggregator_panel.controllers.showParametersController"/>

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



aggregator_panel.controllers.showParametersController
Код

package aggregator_panel.controllers;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class showParametersController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        ModelAndView mav = new ModelAndView("showParameters");
        return mav;
    }

}


но если я меняю <url-pattern>*.htm</url-pattern> на <url-pattern>*.jsp</url-pattern> и 

  <props>
     <prop key="/showParameters.htm">showParametersController</prop>
  </props>

на 

  <props>
     <prop key="/showParameters.jsp">showParametersController</prop>
  </props>

то в окне томката я вижу 

1
Код

4 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet getLastModified
FINE: DispatcherServlet with name 'panel' determining Last-Modified value for [/aggregator_panel-0.0.1/showParameters.jsp]
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping getHandlerInternal
FINE: Mapping [/showParameters.jsp] to handler 'aggregator_panel.controllers.showParametersController@557c15'
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet getLastModified
FINE: Last-Modified value for [/aggregator_panel-0.0.1/showParameters.jsp] is: -1
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet doService
FINE: DispatcherServlet with name 'panel' processing request for [/aggregator_panel-0.0.1/showParameters.jsp]
aaabbb14 уЁєф 2008 16:56:01 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory invokeInitMethods
FINE: Invoking afterPropertiesSet() on bean with name 'showParameters'
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet render
FINE: Rendering view [org.springframework.web.servlet.view.JstlView: name 'showParameters'; URL [/WEB-INF/jsp/showParameters.jsp]] in DispatcherServle
t with name 'panel'
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.view.InternalResourceView renderMergedOutputModel
FINE: Forwarding to resource [/WEB-INF/jsp/showParameters.jsp] in InternalResourceView 'showParameters'
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet getLastModified
FINE: DispatcherServlet with name 'panel' determining Last-Modified value for [/aggregator_panel-0.0.1/WEB-INF/jsp/showParameters.jsp]
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet getLastModified
FINE: No handler found in getLastModified
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet doService
FINE: DispatcherServlet with name 'panel' processing request for [/aggregator_panel-0.0.1/WEB-INF/jsp/showParameters.jsp]
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/aggregator_panel-0.0.1/WEB-INF/jsp/showParameters.jsp] in DispatcherServlet with name 'panel'
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.FrameworkServlet processRequest
FINE: Successfully completed request
14 уЁєф 2008 16:56:01 org.springframework.web.servlet.FrameworkServlet processRequest
FINE: Successfully completed request



при этом - в браузере 404-я ошибка, но код контроллера выполняется

Насколько я понял - оно пытается форварднуть, но что, куда и зачем - не понимаю 

Автор: Kangaroo 15.12.2008, 02:34
Цитата(barracuda477 @  14.12.2008,  19:22 Найти цитируемый пост)
Насколько я понял - оно пытается форварднуть, но что, куда и зачем - не понимаю  

У тебя и маппинг контроллеров, и вью - *.jsp 
Диспатчер запутался smile


Цитата(barracuda477 @  14.12.2008,  19:22 Найти цитируемый пост)
aggregator_panel.controllers.showParametersController

Плохое название пекеджа и класса, почитай про Java Code Conventions

Автор: barracuda477 16.12.2008, 20:47
Цитата(Kangaroo @  15.12.2008,  02:34 Найти цитируемый пост)
У тебя и маппинг контроллеров, и вью - *.jsp 
Диспатчер запутался smile


то есть вьюшки тоже через диспатчер резолвятся ?

Получается что произошло следующее:
1) пришел запрос /showParameters.jsp
2) дистатчер нашел контроллер, передал контроллеру на обработку
3) контроллер попытался разрезлывить вьюшку "showParameters" (вью резолвер указал полный путь в варнике - /aggregator_panel-0.0.1/WEB-INF/jsp/showParameters.jsp 
4) Диспатчер посмотрел, что в маппинге в web.xml стоит  <url-pattern>*.jsp</url-pattern> и попробовал найти ещё раз контроллер но уже для /aggregator_panel-0.0.1/WEB-INF/jsp/showParameters.jsp , но поскольку оно не совпадает с <prop key="/showParameters.jsp">showParametersController</prop> в simpleUrlMapping бине, то контроллер не нашелся

Или я что-то усложняю ?

Цитата(Kangaroo @  15.12.2008,  02:34 Найти цитируемый пост)
Цитата(barracuda477 @  14.12.2008,  19:22 Найти цитируемый пост)
aggregator_panel.controllers.showParametersController

Плохое название пекеджа и класса, почитай про Java Code Conventions 


ок, спасибо, переименую на com.mycompany.aggregatorpanel.controllers.ShowParametersController

Автор: Kangaroo 16.12.2008, 22:31
Цитата(barracuda477 @  16.12.2008,  20:47 Найти цитируемый пост)
Или я что-то усложняю ?

Нет, не усложняешь. Все так и было smile Оставь контроллерам .штмл и все будет ок.




Цитата(barracuda477 @  16.12.2008,  20:47 Найти цитируемый пост)
ок, спасибо, переименую на com.mycompany.aggregatorpanel.controllers.ShowParametersController

Да, так будет красивей.

Автор: _sten_ 16.12.2008, 23:12
InternalResourceViewResolver делает форвард на ресурс, типа префикс+имя вью+суфикс. Получается /WEB-INF/jsp/showParameters.jsp 
/WEB-INF/jsp/showParameters.jsp  попадает под патерн *.jsp
Тоисть заходим в DispatcherServlet и ищем контролер - его нет, получаем 404.

Где-то в глубинах томката есть сервлет который замаплен на *.jsp ты его перекрыл своим.

попробуй в InternalResourceViewResolver указать <property name="alwaysInclude" value="true"/>

PS: aggregator_panel.controllers.showParametersController - глаза режет

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