2010-07-12 10 views
4

J'ai récemment basculé l'un de mes fichiers html statiques vers un contrôleur Spring qui utilise une JSP pour afficher sa vue. J'utilise jetty pour tester localement et les tests locaux montrent que le rendu de la page est correct. Lors du déploiement de notre serveur de test, qui utilise Tomcat 6.0.26, je reçois l'exception suivante:Tomcat impossible de trouver jsp dans le fichier war

javax.servlet.ServletException: Could not get RequestDispatcher for [/WEB-INF/jsp/index.jsp]: check that this file exists within your WAR 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:219) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

Je confirme que la JSP existe dans la guerre, je Déployez et le répertoire qui a explosé tomcat crée lors du déploiement. Voici ce que mon web.xml et les fichiers avant-contrôleur servlet.xml ressemblent respectivement (web.xml court-circuitées légèrement):

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    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"> 

    <!-- Initialize the Spring DispatcherServlet --> 
    <servlet> 
     <servlet-name>gwtrpc</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <!-- Map the DispatcherServlet to only intercept RPC requests --> 
    <servlet-mapping> 
     <servlet-name>gwtrpc</servlet-name> 
     <url-pattern>*.gwtrpc</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>front-controller</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>front-controller</servlet-name> 
     <url-pattern>/search.html</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>front-controller</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

avant-contrôleur 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:context="http://www.springframework.org/schema/context" 
      xmlns:security="http://www.springframework.org/schema/security" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

     <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
      <property name="mappings"> 
       <props> 
        <prop key="/search.html">indexController</prop> 
       </props> 
      </property> 
     </bean> 

     <bean id="indexController" class="com.company.search.web.server.controller.IndexController" /> 

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

Le La différence entre mon instance dev et instance de test est que l'instance dev est déployée à la racine (localhost/search.html) alors que l'instance de test est déployée sur server.com/appname/search.html. Appname est le nom du fichier * .war que je déploie. J'ai essayé d'ajouter le chemin complet comme préfixe aux fichiers jps (/ appname/WEB-INF/jsp /) et un certain nombre d'autres combinaisons sans chance. J'ai vérifié que les jars jsp-api sont dans le répertoire lib de tomcat. Mon installation de tomcat est l'installation de base/par défaut.

Répondre

1

Le problème a été provoqué par le retrait de la servlet jsp par défaut du fichier web.xml par défaut de l'installation de tomcat. Cela avait été fait par un ancien collègue et pas à ma connaissance. Le remplacement du fichier web.xml du serveur de test par le fichier web.xml par défaut (qui comprenait des modèles/servlets d'URL pour la gestion des fichiers jsp) a corrigé le problème.