Java Spring MVC和Tiles集成问题

Java Spring MVC和Tiles集成问题,java,spring,tiles2,Java,Spring,Tiles2,我正在尝试创建一个简单的Spring3MVC应用程序,它集成了tiles 当我尝试构建应用程序时,会收到以下错误消息(为简洁起见,已截断): 我是不是错过了一些必要的图书馆 我在WEB-INF/lib文件夹中有以下JAR commons-beanutils-1.8.0.jar commons-digester-2.0.jar org.springframework.asm-3.1.1.RELEASE.jar org.springframework.beans-3.1.1.RELEASE.jar

我正在尝试创建一个简单的Spring3MVC应用程序,它集成了tiles

当我尝试构建应用程序时,会收到以下错误消息(为简洁起见,已截断):

我是不是错过了一些必要的图书馆

我在WEB-INF/lib文件夹中有以下JAR

commons-beanutils-1.8.0.jar
commons-digester-2.0.jar

org.springframework.asm-3.1.1.RELEASE.jar
org.springframework.beans-3.1.1.RELEASE.jar
org.springframework.context-3.1.1.RELEASE.jar
org.springframework.core-3.1.1.RELEASE.jar
org.springframework.expression-3.1.1.RELEASE.jar
org.springframework.web.servlet-3.1.1.RELEASE.jar
org.springframework.web-3.1.1.RELEASE.jar
tiles-api-2.2.2.jar
tiles-core-2.2.2.jar
tiles-jsp-2.2.2.jar
tiles-servlet-2.2.2.jar
tiles-template-2.2.2.jar
log4j-1.2.16.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar
WEB-INF/WEB.xml


SpringMVC
春天
org.springframework.web.servlet.DispatcherServlet
1.
春天
*.html
index.jsp
WEB-INF/spring-servlet.xml


/WEB-INF/tiles.xml

WEB-INF/tiles.xml



感谢使用commons-digester-1.8.jar和tiles 2.2.2,commons digester的2.0版在sax方面有缺陷

编辑:额外的pom我用来解决这个问题 这是为了解决初始http请求,这是一个已知问题(注意,我使用的是jdk 1.6),下面是我的pom的一个额外部分,以使其正常工作:

        <!-- Note: tiles 2.2 uses commons-digester 2.0 which is buggy with sax 
            (http request will fail the first time) using version 1.8 to solve the issue -->
        <dependency>
            <groupId>commons-digester</groupId>
            <artifactId>commons-digester</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>${apacheTiles.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-digester</groupId>
                    <artifactId>commons-digester</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>${apacheTiles.version}</version>
        </dependency>

公地蒸煮器
公地蒸煮器
1.8
org.apache.tiles
瓦片servlet
${apacheTiles.version}
公地蒸煮器
公地蒸煮器
org.apache.tiles
平铺jsp
${apacheTiles.version}

由于${apacheTiles.version}是2.2.2,spring的版本是3.0.5.RELEASE,我假设
com.sun.org.apache.xerces.internal.jaxp.saxparserfactorympl是从第三方库引用的。确保它是从Sun的jre库中引用的

如果您使用的是maven,请尝试从类路径中排除任何不需要的库

编辑:

请看下面的代码


将commons-digestor-2.0替换为commons-digestor-1.7
用于tiles 2.2.2以解决此问题

我在tiles 2.2.2本身的发行版中得到了commons-digestor-2.0。在JDK1.6(可能还有其他上下文)下,异常只发生在第一个http请求上,进一步的http请求将起作用。我已经用pom的摘录编辑了我的文章来解决这个问题。对我来说工作很好。谢谢我检查了项目的构建路径,发现还有两个JAR拥有SAXParserFactoryImpl类。我删除了这两个jar,现在只有JRockit的saxparserfactorympl存在,但问题仍然存在。我不确定您是否已经解决了这个问题。但是基于Digester类的代码(),他们期望Xerces版本号>2.1这与前面的答案所建议的解决方案基本相同。除了更改建议版本的
commons digestor
之外,它对问题或答案没有什么新的价值。您的答案可以通过一些理由或解释来加以改进,说明为什么应首选
1.7
版本(例如,优于
1.8
)。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns="http://java.sun.com/xml/ns/javaee" 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" id="WebApp_ID" version="2.5">
<display-name>SpringMVC</display-name>
  <servlet>
<servlet-name>spring</servlet-name>  
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>  
</servlet>

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

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<?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">

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Scans within the base package of the application for @Components to configure as beans -->
<!-- @Controller, @Service, @Configuration, etc. -->
<context:component-scan base-package="xyz.sample.baremvc" />

<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven />

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean> 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles.xml</value>
        </list>
    </property>
</bean>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC 
 "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" 
 "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
    <definition name="base.definition" template="/WEB-INF/views/layout.jsp">
    <put-attribute name="title" value="" />
    <put-attribute name="header" value="/WEB-INF/views/header.jsp" />
    <put-attribute name="menu" value="/WEB-INF/views/menu.jsp" />
    <put-attribute name="body" value="" />
    <put-attribute name="footer" value="/WEB-INF/views/footer.jsp" />
    </definition>

    <definition name="contact" extends="base.definition">
    <put-attribute name="title" value="Contact Manager" />
    <put-attribute name="body" value="/WEB-INF/views/contact.jsp" />
    </definition>
</tiles-definitions>
        <!-- Note: tiles 2.2 uses commons-digester 2.0 which is buggy with sax 
            (http request will fail the first time) using version 1.8 to solve the issue -->
        <dependency>
            <groupId>commons-digester</groupId>
            <artifactId>commons-digester</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>${apacheTiles.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-digester</groupId>
                    <artifactId>commons-digester</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>${apacheTiles.version}</version>
        </dependency>
 public static SAXParser newSAXParser(Properties properties) 
        throws ParserConfigurationException, 
              SAXException,
               SAXNotSupportedException {

   SAXParserFactory factory =  
                    (SAXParserFactory)properties.get("SAXParserFactory");

    if (versionNumber == null){
      versionNumber = getXercesVersion();
        version = new Float( versionNumber ).floatValue();
   }

   // Note: 2.2 is completely broken (with XML Schema). 
    if (version > 2.1) {

       configureXerces(factory);
       return factory.newSAXParser();
   } else {
        SAXParser parser = factory.newSAXParser();
       configureOldXerces(parser,properties);
       return parser;
    }
   }