Tomcat не может найти jsp в файле войны

Недавно я переключил один из своих статических html-файлов на контроллер Spring, который использует JSP для визуализации своего представления. Я использую причал для локального тестирования, и локальное тестирование показывает, что страница отображается нормально. При развертывании на нашем тестовом сервере, который использует Tomcat 6.0.26, я получаю следующее исключение:

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)

Я подтвердил, что JSP существует в войне, которую я развертываю, и взорванном каталоге, который tomcat создает при развертывании. Вот как выглядят мои файлы web.xml и front-controller-servlet.xml соответственно (web.xml немного сокращен):

<?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>

передний контроллер-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>

Разница между моим экземпляром для разработки и тестовым экземпляром заключается в том, что экземпляр для разработки развертывается в корневом каталоге (localhost/search.html), тогда как тестовый экземпляр развертывается на server.com/appname/search.html. Appname — это имя файла *.war, который я развертываю. Я попытался добавить полный путь в качестве префикса к файлам jps (/appname/WEB-INF/jsp/) и ряду других комбинаций, но безуспешно. Я проверил, что файлы jsp-api находятся в каталоге tomcat lib. Моя установка tomcat является базовой/установкой по умолчанию.


person Brad    schedule 12.07.2010    source источник


Ответы (1)


Проблема была вызвана тем, что сервлет jsp по умолчанию был удален из стандартного файла web.xml установки tomcat. Это было сделано бывшим сотрудником и, насколько мне известно, не было. Замена файла web.xml тестового сервера на файл web.xml по умолчанию (который включал шаблоны URL/сервлеты для обработки файлов jsp) устранила проблему.

person Brad    schedule 13.07.2010