A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2017-12-19 11:14 编辑

【郑州校区】JavaEE三大框架课堂笔记之Spring-day11(下)【郑州校区】JavaEE三大框架课堂笔记之Spring-day11(上)

Spring整合struts2框架前期准备创建一个addUser.jsp页面
创建UserAction类
Struts.xml文件中配置
Spring整合struts2原理分析
1. spring整合struts2框架必须导入一个jar包
struts2-spring-plugin.jar
2. struts2框架配置文件加载顺序
a. default.properties
b. struts-default.xml
c. strtus-plugin.xml
3. 在struts2框架中所有的action interceptor  result全是bean,在struts2框架中默认是使用strtus2自己bean初化操作.
4. 当我们在工程中导入struts2-spring-plugin.jar文件
就会加载这个包下的strtus-plugin.xml
这时bean的创建由spring来管理。
5. 这时在创建Action时它执行的代码
上述代码,在执行时,首先会从spring容器中来获取,如果获取不到,会buildBean
通过上述分析,spring整合struts2框架它的方式有两种
1. spring管理action(简单说就是在applicationContext.xml文件中来声明action)
2. action自动装配service
spring整合struts2框架方式一(掌握)
这种方案是基于spring管理action
1. 在applicationContext.xml文件中配置
2. 在action类中
3. 在struts.xml文件
Class的值就是bean的id值
注意:必须在web.xml文件中配置struts2框架的Filter
Spring整合struts2框架方式二(action中自动注入service)
Struts.xml文件中
Class还是类的全名
这时就会将action类中需要的注入servcie自动注入
在default.properties中有一段配置
这时就会根据名称进行autoWires
我们可以修改注入的方式
我们在struts.xml文件中修改了注入的方式,根据type进行注入
Spring整合struts2框架总结
1. 如果在struts.xml文件中<action class=”cn.itheima.action.UserAction”>如果写的是全类名,我们使用action自动装配service方案
2. 如果在struts.xml文件中<action class=”userAction”>这时,在applicationContext.xml文件中要配置<bean id=”userAction” class=” cn.itheima.action.UserAction”>
3. 以上操作的前提是必须导入struts2-spring-plugin.xml文件
在这个文件中它改变struts2的bean工厂
4. 默认情况下如果采用action自动装配service方案,这时每一次请求都会新创建一个action,并且service的装配类型是by name
5. 如果我们采用的是spring管理action这种方案我们必须在<bean>声明中添加scope=prototype”,原因是struts2框架的action每一次请求都应该是一个新的action
关于annotation整合方式Jar包导入
在原来的xml基础上在多导入一个jar包
只有导入这个jar包后,我们才能使用struts2框架的注解  @Namespace @Action
配置文件
Web.xml文件中要配置
Spring的配置文件 applicationContext.xml
Struts2的配置文件 struts.xml
使用JPA注解来定义PO类
@Entity 定义实体类
@Table 定义表
@Id 主键
@GeneratedValue 生成主键策略
@Column 定义列
Spring整合hibernate
Dao编写
如何在dao中得到HibernateTemplate对象,原来是在applicationContext.xml文件中通过配置方案注入了一个SessionFactory对象,UserDao的父类HibernateDaoSupport,会帮助我们根据SessionFactory来得到HibernateTemplate
Service编写
问题:service需要事务管理,怎样处理?
Action编写
使用@Controller  @Scope   
以上注解的作用是由spring管理action,它是一个多例的。
问题:如何完成struts2框架的流程?
基于annotation的ssh整合总结
在ssh的annotation整合时,必须要多导入的一个包
对于dao,service,action我们使用
@Repository  @Service  @Controller来完成bean注册。
在dao中我们使用以下方案将SessionFactory注入,在dao中就可以使用HibernateTemplate
在service及action中使用@Autowire来注入dao及service
一定要在applicationContext.xml文件中开启注解扫描
对于PO类我们使用JPA的注解 @Entiry @Table  @Id  @GeneratedValue  @Column
要在applicationContext.xml文件中配置SessionFactory时来确定扫描包
对于Struts2框架,我们需要@Namespace @Action @ParentPakcage @Result来定义struts2流程
要求action类必须是在action actions struts struts2这样的包中才会扫描struts2相关注解
SSH整合延迟加载问题解决
1. 修改UserDao中的findById
2. 添加一个user.jsp页面
3. 在UserAction中处理user_findById请求
以上程序在执行后,报错
解决no session问题:
1. 不使用延迟加载
2. 手动将延迟加载初始化 Hibernate.initialize(延迟对象)
3. 使用spring提供的一个OpenSessionInViewFilter来解决
基本的原理就是将session的关闭操作不在service层完成,而是在web层才关闭session.
注意:openSessionInViewFilter一定要在Struts2 Filter前配置.


传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出


2 个回复

倒序浏览
赞一个
回复 使用道具 举报
{:8_507:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马