以前接触过SSH框架,但是一直都没有用过,然后这段时间又重新回顾了一下,当然,期间也碰到了不少问题,然后就在网上查相关资料,折腾了一番,也学到了不少东西,所以决定整理下来。使用的IDE工具是Myeclipse10.1,碰到的问题大致有下面几个:
1、问题1——控制台报加载Struts配置文件失败的异常。
异常原因:主要是缺少struts2-spring-plugin-2.X.X.X这个插件jar包。
解决方法:将这个jar包导入到项目中即可。
a、可以直接下载所需要的版本如:struts2-spring-plugin-2.2.1.jar,然后将这个jar包放到WebRoot/WEB-INF/lib目录下,然后build Path一下即可。
b、也可以直接通过Myeclipse工具进行添加,只是通过这种方式添加后,会多引入了几个包,我也不知道项目中有没有用到过,反正删掉了其他的几个项目也能正常运行,没有什么影响,应该是项目中没有用到。
右击项目——》选择Build Path——》选择Add Libraries.
选择Myeclipse Libraries
勾选Struts2 Spring Libraries
ok,异常消失。
需要注意的是:Struts2得已经交由Spring进行管理了,即配置文件里面已经做了正确的配置了,不然有可能还会出现其他的问题。至于什么问题我就懒得去试了。
a、web.xml配置文件中开启了Spring监听。
b、然后struts.xml配置文件中配置了将Struts2委托给Spring进行管理。
2、问题2——对象关系映射失败,实体映射失败,找不到POJO类,额,我也不知道能不能这样叫,估计不行,暂且就这样称呼吧。
异常原因:entity class not found。
发生的位置:Hibernate的映射文件中xxxx.hbm.xml
解决方法,更改xxxx.hbm.xml映射文件中POJO类的路径
错误的配置:
正确的配置:POJO类的完整路径
3、问题3——Spring的bean初始化注入失效。这个问题困扰了我好久,我的配置是这样的,Struts.xml文件中的action的class属性值配置的是applicationContext.xml文件中由Spring注入的bean的id值,之前一直以为是这个路径配置文件,导致Spring不能初始化注入,甚至还怀疑过是命名空间namespace的配置问题,试了好几次,最后效果还是一样的报异常。
struts.xml的配置:
applicationContext.xml文件的配置:
然后启动Tomcat的时候,控制台没有任何异常,一切正常,但是运行的时候,就报不能实例化action的异常。
运行,不能实例化action,找不到action的定义
之后,做了下尝试,将struts.xml文件的action的class属性写成action的完整路径。这个时候却报空指针,程序找到了action,也进入到了action中,但是action中定义的Service却又出现同样的问题,注入失败,初始化为null。所以报控指针异常。
service注入失败,报空指针,用debug跟一下可以看到Service为null.
然后,经过一番折腾,在网上搜了好久,最后才发现原来是web.xml配置文件中配置的Spring监听出了问题。applicationContext.xml文件的加载路径配置不正确。
解决方法:
关于applicationContext.xml文件的放置,一般有两种做法,
a、放置在项目的顶级根目录src目录下面。配置方法如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
b、放置在项目的WebRoot/WEB-INF目录下面。配置方法如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
</context-param>
或者也可以使用下面这种方式:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/applicationContext*.xml</param-value>
</context-param>
由于Spring的监听配置出了问题,所以程序找不到applicationContext.xml文件,于是便无法完成初始化的注入操作了,通过上面两种方式的配置正确后,问题解决。Spring初始化注入成功。
4、问题4——关于数据库的异常,驱动jar包的冲突。使用的是Oracle11g数据库。导入的数据库驱动jar包文件是classes12.jar,运行之后报如下异常:
oracle.jdbc.driver.OracleDatabaseMetaData.supportsGetGeneratedKeys()Z
Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.OracleDatabaseMetaData.supportsGetGeneratedKeys()Z
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:142)
解决方法:
换成ojdbc6.jar再运行就没有这个问题了。 问题解决、
应该是驱动的版本与oracle的版本有冲突,所以才会报这个错。
5、问题5——使用的jsp标签跳转到action,一直没有任何效果,请求不到资源,但是浏览器中直接输入page的值,能够成功跳转。
解决方法:
需要在struts.xml文件中过滤器映射中对下面配置dispatcher属性,
配置REQUEST和FORWARD属性即可,问题解决、
ok,结束,暂时碰到的问题就这么多,这也算是这几天学习SSH2框架以来的一个小小的总结,后续再慢慢学习。。加油!!!