Spring+hibernate
- 格式:doc
- 大小:85.50 KB
- 文档页数:8
SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。
另外spring的aop,事务管理等等都是我们经常⽤到的。
Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。
mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。
mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。
在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。
使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。
Hibernate+Spring多数据库解决方案我以前在项目中的探索和实践,写出来与大家分享。
大家有其他好的方式,也欢迎分享。
环境:JDK 1.4.x , Hibernate 3.1, Spring 2.0.6, JBOSS4.0, 开发模式: Service + DAO我们项目中需要同时使用多个数据库. 但 Hibernate 不能直接支持,为此我们对比了网上网友的方案,自己做了一点探索。
1. Demo需求我们的项目使用一个全省的公共库加十多个地市库的架构。
本文主要说明原理,将需求简化为两库模型。
主库:User管里,主要是系统管理,鉴权等数据;订单库:Order 管理,存放订单等业务性数据。
2. 原理:1) Hibernate 的每个配置文件对应一个数据库,因此多库需要做多个配置文件。
本文以两个为例:主库 hibernate_sys.cfg.xml,订单库 hibernate_order.cfg.xml每个库,Hibernate 对应一个 sessionFactory 实例,因此Hibernate 下的多库处理,就是在多个 sessionFactory 之间做好路由。
2) sessionFactory 有个 sessionFactory.getClassMetadata(voClass) 方法,返回值不为空时,表示该 VO 类在该库中(hbm.xml文件配置在了对应的hibernate.cfg.xml中),该方法是数据路由的核心和关键所在。
因此, User.hbm.xml 配置在 hibernate_sys.cfg.xml ,Order数据位于配置到 hibernate_order.cfg.xml3)多库处理时,需要使用 XA 事务管理。
本例中使用 Jboss4.0 来做JTA事务管理;用JOTM,其他应用服务器原理相同。
3. 实现1)为做多 sessionFactory 实例的管理,设计 SessionFactoryManager 类,功能就是做数据路由,控制路由的核心是 sessionFactoryMap 属性,它按dbFlag=sessionFactory 的方式存储了多个库的引用。
Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
达梦Hibernate Spring集成开发示例DM是武汉华工达梦数据库有限公司推出的新一代高性能、高安全性的数据库产品。
它具有开放的、可扩展的体系结构,高性能事务处理能力,以及低廉的维护成本。
DM是完全自主开发的数据库软件,其安全级别达到了国内所有数据库产品中的最高级---B1级。
在这里我准备用时下比较流行的开发工具,Hibernate和Spring,达梦数据库。
以及MyEclipse来完成一个简单的应用。
数据库采用达梦5.01、用达梦创建一个test数据库,再创建一个user表,再创建两个字段username和password。
脚本如下create database test datafile 'test.dbf' size 100;set current database testcreate login test identified by test123 default database test;create user test related by test;grant resource to test at test;以上脚本为创建test数据库,并且创建一个登陆名为test 密码是test123drop table xt_user;create table xt_user(user_id varchar(30) not null,user_name varchar(20) not null,user_pwd varchar(30) not null,primary key(user_id));2、打开myeclipse的database explore透视图,右键单击左侧的空白区域,点击new 按钮单击“configure database driver”来配置数据库的驱动。
完成以后,做如下操作:然后测试数据库是否连接成功。
如果测试成功显示如下图:1.新建一个web项目testSpring 2.引入Spring包注意:这里为了省得以后再添加spring的相关包,所以一次性的选中了所有的包。
JavaWeb开发框架的对比与应用案例JavaWeb开发框架是当前Web应用开发中非常重要的一环。
随着互联网的发展,JavaWeb开发框架的种类也越来越多,其中比较知名的有Spring、Struts、Hibernate等,本文将对这些框架进行对比,并给出一些开发案例。
一、Spring框架Spring是一款轻量级的Java开发框架,它是目前最为流行的框架之一。
Spring提供了一系列可重用代码,让JavaWeb应用的开发更加容易和高效。
Spring的主要特点包括控制反转、依赖注入、面向切面编程等。
Spring框架可以被用于开发各种类型的Web应用,如社交网络、企业应用等。
Spring的优点在于它所提供的灵活性和可扩展性,同时也支持多个不同的程序设计模式。
举个例子,Spring MVC框架可以支持Web应用程序的开发,并且提供多种不同的视图技术,如JSP和Thymeleaf模板等。
Spring的使用可以大大简化JavaWeb应用程序的开发难度,并且降低代码的复杂性。
此外,开发者可以很容易地使用Spring提供的工具来管理和维护应用程序。
二、Struts框架Struts是一款基于MVC模式的开发框架,它是最早的JavaWeb框架之一。
Struts的特点在于它所提供了应用程序组件的相对简单易用性,从而使得应用的开发变得更加快速和高效。
Struts的核心是其控制器,它可以将Web请求分配给各个组件,并且可以自动地处理必要的转换和数据验证。
对于大部分JavaWeb应用程序来说,Struts是一个理想的开发框架。
Struts的优点在于它所提供的模板功能,这可以让开发者通过简单地定义模板和组件的形式,来开发应用程序。
三、Hibernate框架Hibernate是一款完全由Java编写的Object-RelationalMapping(ORM)框架。
它允许Java开发人员使用对象方式访问数据,这意味着开发者不需要编写复杂的SQL查询,并且可以使用Hibernate进行简单的数据库操作。
使用spring的hibernateTemplate的方法分类:Struts+Hibernate+Spring2009-05-22 15:486178人阅读评论(6)收藏举报使用spring的hibernateTemplate的方法- [spring]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明/logs/24775065.html1.管理SessionFactory使用Spring整合Hibernate时我们不需要hibernate.cfg.xml文件。
首先,在applicationContext.xml中配置数据源(dataSource)bean和session工厂(sessionFactory)bean。
其中,在配置session工厂bean 时,应该注入三个方面的信息:●数据源bean●所有持久化类的配置文件●Hibernate的SessionFactory的属性Hibernate的SessionFactory的属性信息又包括两个内容,一,Hibernate的连接方法;二,不同数据库连接,启动时的选择。
2.为HibernateTemplate注入SessionFactory对象,通过HibernateT emplate来持久化对象Spring提供了HibernateTemplate,用于持久层访问,该模板无需打开Session及关闭Session。
它只要获得SessionFactory的引用,将可以只能地打开Session,并在持久化访问结束后关闭Session,程序开发只需完成持久层逻辑,通用的操作(如对数据库中数据的增,删,改,查)则有HibernateTemplate完成。
HibernateTemplate有三个构造函数,不论是用哪一种构造,要使HibernateTemplate能完成持久化操作,都必须向其传入一个SessionFactory的引用。
HibernateTemplate的用法有两种,一种是常规的用法,另一种是复杂的用。
java框架调研报告Java框架调研报告一、引言随着Java语言的不断发展,各种Java框架也日益增多,开发人员可选择的框架越来越多,但这也对开发人员选择框架时提出了更高的要求。
本报告将对几种主流的Java框架进行调研,分析它们的特点、优缺点以及适用场景,以便开发人员能够根据具体需求选择合适的框架。
二、Java框架调研概述目前,Java开发常用的框架有Spring、Hibernate、Struts、MyBatis等,它们都有自己的特点和适用场景。
接下来,我们将对这几种框架进行详细介绍和比较。
三、Spring框架Spring框架是目前Java企业应用开发中最常用的框架之一。
它提供了一种轻量级的解决方案,通过依赖注入和面向切面编程等技术,简化了企业应用开发的复杂度。
Spring框架具有以下优点:1. 轻量级:Spring框架的核心容器非常轻巧,不需要依赖大量的第三方依赖,使得应用程序的部署和启动更加高效。
2. 面向切面编程:Spring框架提供了AOP(Aspect-Oriented Programming)的支持,可以在不修改原有业务逻辑的情况下,增加横切关注点,如事务管理、安全控制等。
3. 依赖注入:Spring框架支持依赖注入,可以将对象的创建和组装交给框架处理,大大提高了代码的可维护性和扩展性。
然而,Spring框架也存在一些缺点,例如配置文件繁琐、学习成本较高等,对于小型项目可能显得过于臃肿。
四、Hibernate框架Hibernate框架是一个开源的对象关系映射(ORM)框架。
它可以将Java类和数据库中的表进行映射,以面向对象的方式操作数据库。
Hibernate框架的优点如下:1. 数据库无关性:Hibernate框架可以适配多种主流数据库,使得应用程序在不同数据库之间的平滑切换和迁移成为可能。
2. 对象映射:Hibernate框架将数据库表中的记录转化为Java对象,提供了一种更面向对象的方式进行数据库操作。
主要讨论Spring与Hibernate集成中的session问题1.通过getSession()方法获得session进行操作Java代码利用这种方式获得的session在方法执行结束之后不会自动关闭连接,也就是说我们必须通过session.close()或者releaseSession(session)来手动进行关闭,否则会造成内存泄露或者连接耗尽等问题。
手动关闭:Java代码如果对上述方法进行事务控制,那么spring框架会自动为我们关闭session,此种情况下再执行上述代码,会抛出如下异常:Java代码提示session已经关闭。
但是如果在代码中通过releaseSession(session)的方法来关闭session,则不会抛出异常。
releaseSession(session)方法的代码如下:Java代码也就是说它是通过SessionFactoryUtils的releaseSession方法来实现的:Java代码可见它内部会先进行判断。
查看getSession()方法的源码:Java代码getSession()方法内部通过它的一个重载方法getSession(boolean allowCreate )来实现,变量allowCreate是HibernateTemplate中的变量,默认值为true,也就是创建一个新的session。
如果我们调用getSession(false)来获得session,那么必须对其进行事务控制,原因是:(spring文档)Java代码也就是说,getSession()方法从当前事务或者一个新的事务中获得session,如果想从一个新的事务中获得session(也就意味着当其不存在事务控制),则必须使HibernateTemplate中的allowCreate变量的值为”true”,而现在设置allowCreate变量的值为”false”就意味着无法从新的事务中获得session,也就是只能从当前事务中获取,所以必须对当前方法进行事务控制,否则会抛出如下异常:Java代码同时,如果对getSession()所在的方法进行事务控制,那么类似如下的代码:只会打开一个session,因为事务控制必须确保是同一个连接,spring会确保在整个相关方法中只存在一个session。
(问答题+选择题(在55页))Java工程师(程序员)面题Struts,Spring,Hibernate三大框架1.Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作6.提交事务7.关闭Session 8.关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many4.Struts1流程:1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被ActionServlet接收。
3、根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。
Java语言应用中的常见技术和框架介绍Java语言是一门广泛应用的高级编程语言,自推出以来就一直受到程序员们的青睐。
由于其平台无关性、可移植性以及强大的生态系统,Java语言在大型企业级应用开发、云计算、数据科学、Web开发等领域得到广泛应用。
在Java语言技术的基础上,还有很多重要的技术和框架,下面就来简单介绍一下Java常见的技术和框架。
一、Spring框架Spring是目前最流行的开源Java框架之一,它提供了一个全面的编程和配置模型,可以解决开发企业级应用中遇到的各种问题。
Spring框架提供了一个轻量级的容器,其中可以管理对象的生命周期,控制依赖注入和AOP(面向切面编程)等关键特性。
此外,Spring还提供了一系列的插件和扩展,用于支持持久化、web开发、缓存、安全、集成和测试等方面的功能。
二、Hibernate框架Hibernate是一个流行的ORM(对象关系映射)框架,它是Java持久化的事实标准。
Hibernate的主要目标是简化数据访问并提高开发人员的生产力,它通过在代码中使用对象来处理数据库中的数据,将对象映射到关系数据库中的表和列。
Hibernate提供了一系列的API和工具,支持查询、缓存、事务管理和数据库连接池等特性。
Hibernate还支持多种关系型数据库,包括MySQL、Oracle和SQL Server等。
三、Struts框架Struts是一个流行的MVC(模型-视图-控制器)框架,它可以帮助开发人员组织和管理Web应用程序。
Struts的核心组件是Action,它处理来自浏览器的请求并根据请求内容执行相应的动作。
Struts还提供了一些其他的功能,包括表单数据验证、错误处理、邮件和文件上传等。
Struts具有很高的可扩展性,可以与其他框架和工具一起使用。
四、Java EEJava EE(Java Enterprise Edition)是一个广泛使用的Java应用程序平台,这个平台包含了许多基本的技术和API,用于构建企业级应用。
课程内容1.面向接口(抽象)编程的概念与好处2.IOC/DI的概念与好处a)inversion of controlb)dependency injection3.AOP的概念与好处4.Spring简介5.Spring应用IOC/DI(重要)a)xmlb)annotation6.Spring应用AOP(重要)a)xmlb)annotation7.Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)a)opensessionInviewfilter(记住,解决什么问题,怎么解决)8.Spring JDBC面向接口编程(面向抽象编程)1.场景:用户添加2.Spring_0100_AbstractOrientedProgramminga)不是AOP:Aspect Oriented Programming3.好处:灵活什么是IOC(DI),有什么好处Dependecy Injection (依赖注入)依赖UserDAOa)IOC (inversion of control)控制反转,交给容器来控制1.把自己new的东西改为由容器提供a)初始化具体值b)装配2.好处:灵活装配Spring简介1.项目名称:Spring_0200_IOC_Introduction2.环境搭建a)只用IOCi.spring.jar , jarkata-commons/commons-loggin.jar3.IOC容器a)实例化具体beanb)动态装配4.AOP支持a)安全检查b)管理transactionSpring IOC配置与应用1.FAQ:不给提示:a)window – preferences – myeclipse – xml – xml catalogb)User Specified Entries – addi.Location:D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\sprin g-beans-2.5.xsdii.URI:file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resource s/spring-beans-2.5.xsdiii.Key Type: Schema Locationiv.Key:/schema/beans/spring-beans-2.5.xsd2.注入类型a)Spring_0300_IOC_Injection_Typeb)setter(重要)c)构造方法(可以忘记)d)接口注入(可以忘记)3.id vs. namea)Spring_0400_IOC_Id_Nameb)name可以用特殊字符4.简单属性的注入a)Spring_0500_IOC_SimplePropertyb)<property name=… value=….>5.<bean 中的scope属性a)Spring_0600_IOC_Bean_Scopeb)singleton 单例c)proptotype 每次创建新的对象6.集合注入a)Spring_0700_IOC_Collectionsb)很少用,不重要!参考程序7.自动装配a)Spring_0800_IOC_AutoWireb)byNamec)byTyped)如果所有的bean都用同一种,可以使用beans的属性:default-autowire8.生命周期a)Spring_0900_IOC_Life_Cycleb)lazy-init (不重要)c)init-method destroy-methd 不要和prototype一起用(了解)9.Annotation第一步:a)修改xml文件,参考文档<context:annotation-config />10.@Autowireda)默认按类型by typeb)如果想用byName,使用@Qulifierc)写在private field(第三种注入形式)(不建议,破坏封装)d)如果写在set上,@qualifier需要写在参数上11.@Resource(重要)a)加入:j2ee/common-annotations.jar springframework下b)默认按名称,名称找不到,按类型byNamec)可以指定特定名称name=“u”d)推荐使用e)不足:如果没有源码,就无法运用annotation,只能使用xml12.@Component @Service @Controller MVC controller@Repository—>DBa)初始化的名字默认为类名首字母小写b)可以指定初始化bean的名字13.@Scope14.@PostConstruct = init-method; @PreDestroy = destroy-method;什么是AOP1.面向切面编程Aspect-Oriented-Programminga)是对面向对象的思维方式的有力补充2.Spring_1400_AOP_Introduction3.好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码a)Filterb)Struts2的interceptor4.概念:a)JoinPoint 连接点b)PointCut 切入点,是joinpoint的是个集合c)Aspect(切面)LogIngetceptor类即aspectd)Advice 建议,可理解为@before @after 指的是一些加在切入点上的建议e)Target 被代理对象f)Weave 织入Spring AOP配置与应用1.两种方式:a)使用Annotationb)使用xml2.Annotationa)加上对应的xsd文件spring-aop.xsdb)beans.xml <aop:aspectj-autoproxy />c)此时就可以解析对应的Annotation了 @aspect @befored)@component//必须写,进行初始化e)建立我们的拦截类f)用@Aspect注解这个类g)建立处理方法h)用@Before来注解方法i)写明白切入点(execution …….)j)让spring对我们的拦截器类进行管理@Component3.常见的Annotation:a)@Pointcutb)@Beforec)@AfterReturningd)@AfterThrowinge)@Afterf)@Around4.织入点语法a)void !voidb)参考文档(* ..)5.xml配置AOPa)把interceptor对象初始化b)<aop:configi.<aop:aspect …..1.<aop:pointcut2.<aop:beforeSpring整合Hibernate1.Spring 指定datasourcea)参考文档,找dbcp.BasicDataSourcei.c3p0ii.dbcp database connection pooliii.proxoolb)在DAO或者Service中注入dataSourcec)在Spring中可以使用PropertyPlaceHolderConfigure来读取Properties文件的内容2.Spring整合Hibernate //不成功,去掉readonly就可以a)<bean .. AnnotationSessionFactoryBean>i.<property dataSourceii.<annotatedClassesb)引入hibernate 系列jar包c)User上加Annotationd)UserDAO或者UserServie 注入SessionFactorye)jar包问题一个一个解决3.声明式的事务管理a)事务加在DAO层还是Service层?b)annotationi.加入annotation.xsdii.加入txManager beaniii.<tx:annotation-driveniv.在需要事务的方法上加:@Transactionalv.需要注意,使用SessionFactory.getCurrentSession 不要使用OpenSessionc)@Transactional详解i.什么时候rollback1.运行期异常,非运行期异常不会触发rollback2.必须uncheck (没有catch)3.不管什么异常,只要你catch了,spring就会放弃管理4.事务传播特性:propagation_required5.read_only //如果要进行插入或修改时,不能正常运行d)xml(推荐,可以同时配置好多方法)******i.<bean txmanagerii.<aop:config1.<aop:pointcut2.<aop:advisor pointcut-ref advice-refiii.<tx:advice: id transaction-manager =e)HibernateTemplate、HibernateCallback、HibernateDaoSupport(不重要)介绍i.设计模式:Template Method 模板ii.Callback:回调/钩子函数iii.第一种:(建议)比较重要组合方式1.在spring中初始化HibernateTemplate,注入sessionFactory2.DAO里注入HibernateTemplate3.save写getHibernateTemplate.save();iv.第二种:1.从HibernateDaoSupport继承(不重要) 可以写个SuperDAO,然后继承,在子类初始化的时候调用SuperDAO是进行初始化注入2.必须写在xml文件中,无法使用Annotation,因为set方法在父类中,而且是final的(抽象的)f)spring整合hibernate的时候使用packagesToScan属性,可以让spring自动扫描对应包下面的实体类Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2a)将这些所有的jar包保存到一个位置,使用的时候直接copy3.步骤a)加入jar包b)首先整合Spring + Hibernatei.建立对应的package1.dao / dao.impl / model / service / service.impl/ testii.建立对应的接口与类框架1.S2SH_01iii.建立spring的配置文件(建议自己保留一份经常使用的配置文件,以后用到的时候直接copy改)iv.建立数据库v.加入Hibernate注解1.在实体类上加相应注解@Entity @Id等2.在beans配置文件配置对应的实体类,使之受管vi.写dao service的实现vii.加入Spring注解1.在对应Service及DAO实现中加入@Component,让spring对其初始化2.在Service上加入@Transactional或者使用xml方式(此处建议后者,因为更简单)3.在DAO中注入sessionFactory4.在Service中注入DAO5.写DAO与Service的实现viii.写测试c)整合Struts2i.结合点:Struts2的Action由Spring产生ii.步骤:1.修改web.xml加入struts的filter2.再加入spring的listener,这样的话,webapp一旦启动,spring容器就初始化了3.规划struts的action和jsp展现4.加入struts.xmla)修改配置,由spring替代struts产生Action对象5.修改action配置a)把类名改为bean对象的名称,这个时候就可以使用首字母小写了b)@Scope(―prototype‖)不要忘记多例,每一个请求都会产生一个iii.struts的读常量:文件顺序,都可以添加struts的一些配置文件1.struts-default.xml2.struts-plugin.xml3.struts.xml4.struts.properties5.web.xmlDTO = Data Transfer ObjectVO = Value ObjectStruts和spring插件中,autowire默认按名字,把Action注入Resource (name=”userManager”)省去,自动注入解决办法:改component的名iv.中文问题:1.Struts2.1.8已经修正,只需要改i18n.encoding = gbk2.使用spring的characterencoding3.需要严格注意filter的顺序4.需要加到Struts2的filter前面zyInitializationException1.OpenSessionInViewFilter 必须在struts2的filter前面******一般自己的filter都在struts的filter前面,道理相同2.Struts2.1.6用filter解决乱码问题struts2.1.8用i18n解决<filter><filter-name>openSessionInView</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionI nViewFilter</filter-class></filter><filter-mapping><filter-name>openSessionInView</filter-name><url-pattern>/*</url-pattern></filter-mapping>可以保证整个访问期间session有效2需要严格顺序问题3需要加到struts2的filter前面如果在beans.xml中不叫sessionFactory,那么在web.Xml中必须配置参数<init-param><param-name></param-name><param-value>sf</param-value></init-param>用spring来做注意@Scope(―prototype‖)而且要注意必须注入。