学习Struts2+Spring2+JPA+AJAX

本文记录了作者按照官方示例实践Struts2+Spring2+JPA集成过程中遇到的问题及解决办法,并对比了Struts1与Struts2在验证框架和分层设计上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照http://cwiki.apache.org/S2WIKI/struts-2-spring-2-jpa-ajax.html 官方例子程序的步骤,原封不动的做了一遍,遇到一下问题。

1.找不到classpath下的META-INF/persistence.xml。
错误原因是我把persistence.xml放在了WebRoot/META-INF/下,正确的做法是在src/下新建一个/META-INF目录,并把persistence.xml放在src/META-INF/下。

2.有一些类找不到,导致EntityManagerFactory不能创建,进而导致不能把EntityManager注入personService。
原因可能是jar包的版本问题,我这里用的所有jar包应该都是最新版本,但官方例子是几个月前的了。因此有些jar包在我找不到(jdbc2_0-stdext.jar , jboss-archive-browsing.jar),但根据出错提示,应该不是少了这两个jar包所致。最后在Google上查了一下,并根据出错提示,另外又加入了几个jar包:log4j.jar,hibernate-commons-annotations.jar,slf4j-log4j12.jar
slf4j-api.jar。

3.Struts2的验证框架:没有了ActionForm,验证是对Action中的POJO对应的Form进行验证。
方法:只需要写验证的配置文件。名称必须是"ActionName-alias-validation.xml"的形式,比如"PersonAction-save-validation.xml",而且该配置文件必须放在对应Action所在的包中,不需要在struts.xml中作任何设置,相当简洁。

与Struts1+Spring+Hibernate的比较:
以前用Struts1+Spring+Hibernate的时候,一般都是采用分层思想,呈现层,业务逻辑层,数据访问层。在业务逻辑层中不直接访问数据库,而是调用DAO层访问。另外为了降低耦合性,严格区分了PO和VO。PO是Hibernate映射类 + xxx.hbm.xml 映射文件,VO一般是ActionForm。由于VO和PO大部分属性是相同的,因此在业务逻辑层就经常进行PO和VO之间的转换,显得非常繁琐。
采用Struts2之后,废弃了ActionForm,直接在Action中定义VO。在Struts2+Spring2+JPA的架构中没有必要再区分VO和PO,把它们就看成POJO,好像这样做会造成各层之间的耦合,但其实在实践中发现这并不会有太大影响,反而减少了PO与VO转换这样繁琐而意义不大的一步。另外DAO层也可以合并到业务逻辑层中,在进行业务逻辑处理时,可以直接写QL语句。


学完官方例子程序后,我又用该架构自己写了个程序——Student_Team,希望通过该程序巩固所学知识,同时也发现新了问题:
1.action的路径问题,在struts1中,action都有一个path属性,但在struts2中,只有name属性了,这意味着不管在哪个路径下,请求了action,都会执行action的相应方法。但返回的result如果用相对路径,就会随请求路径的不同而不同。如有以下action的配置:
<action name="student" class="edu.suse.struts2.action.StudentAction">
    <result name="success">listStudent.jsp</result>
</action>
在地址栏中输入http://localhost:8080/Student_Team/student.action 或 http://localhost:8080/Student_Team/page /student.action,都会请求到StudentAction,并执行其execute()方法,区别是返回的页面,前者将返回
http://localhost:8080/Student_Team/listStudent.jsp,而后者则返回
http://localhost:8080/Student_Team/page/listStudent.jsp。这是相对与请求时的路径的,为使两种方式的返回页面路径相同,在<result>中需要用绝对路径。 注意在struts1中<forward>指定的路径必须用绝对路径。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值