自学struts2有段时间了 今天用完全手写的方式整合了struts2 +hibernate3.2+spring2.0
其中的一些技巧,和遇到的异常总结如下:(其实也没什么技巧,蛮多东西都在jar包下可以找到、、、)
web.xml
struts2是以拦截器的形式加载的
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
class在struts-core.jar包下可以找到
spring 是以监听器的形式加载的
参数的配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
(当然如果只有一个applicationContext.xml可以不配 默认的情况下web.xml也可以加载的)
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
class 在spring-web.jar包下可以找到
entity.hbm.xml hibernate实体关系映射文件
dtd 在:hibernate3.jar/org.hibernate下可以找到
整合中我用spring代理 hibernate 没有保留hibernate.cfg.xml
applicationContext.xml配置文件的编写:dtd 在spring-bean.jar/org.springframework.beans.factory.xml/spring-beans-2.0.dtd
有了dtd的规范 applicationContext.xml就好写了,其中要注意的也就二个重要的节点:dataSource 和sessionFactory
关于dataSource
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=Ext"></property>
<property name="username" value="sa"></property>
<property name="password" value=""></property>
</bean>
property的属性在common-dbcp.jar/org.apache.commons.dbcp/BasicDataSource 都可以找到 把几个重要的属性写好就OK了
关于sessionFactory
<bean id="seesionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/tm/entity/Users.hbm.xml</value>
</list>
</property>
</bean>
class 在spring-hibernate3.jar/org.springframework.orm.hibernate3/LocalSessionFactoryBean
属性
hibernateProperties是指定用的那种数据库
hibernate.show_sql用来在控制台打印hql语句
mappingResources将hibernate实体关系映射文件加入进来
struts.xml
dtd 在struts2-core.jar
按照dtd写配置文件
<struts>
<package name="struts" extends="struts-default">
<action name="show" class="usersAction" method="showList">
<result name="success">list.jsp</result>
</action>
<action name="add" class="usersAction" method="doAdd">
<result name="success" type="redirect">show.action</result>
</action>
</package>
</struts>
注意:
extends="struts-default" 是一定要写的 struts2内置也许多核心的东西都在这里面
class属性我们是用spring代理的所有这里并不能指定包的路径(这与单独使用struts2是有区别的)
当然在applicationContext.xml中得指定包的路径
<bean id="usersAction" class="com.tm.action.UsersAction" scope="prototype">
<property name="userBiz" ref="baseBiz"></property>
</bean>
注意:scope="prototype" 这里配置是应为struts2的action是有状态的,并不像struts1一样所以没次加载的时候你的从新创建一个action对性
异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'seesionFactory' defined in ServletContext resource [/WEB-
INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity:
com.tm.entity.Users column: name (should be mapped with insert="false" update="false")
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.tm.entity.Users column: name (should be mapped with insert="false"
update="false")
我写的users 实体类 并存在和任何表中的关系 原来 我将映射文件中的 cloumn 二个都对应成了 数据库中的同一个字段
Unable to load configuration. - [unknown location]
Caused by: Caught exception while loading file struts-default.xml - [unknown location]
Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
包冲突问题 原来是Hibernate 的xerces.jar包与tomcat有冲突,把这个包去掉就好了,不知道,会不会影响到Hibernate的使用。