本帖最后由 我是楠楠 于 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整合hibernateDao编写如何在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口出
|