Java Spring MVC和Tiles集成问题
我正在尝试创建一个简单的Spring3MVC应用程序,它集成了tiles 当我尝试构建应用程序时,会收到以下错误消息(为简洁起见,已截断): 我是不是错过了一些必要的图书馆 我在WEB-INF/lib文件夹中有以下JARJava 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
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;
}
}