整合SSH框架学习笔记
- 格式:docx
- 大小:1.16 MB
- 文档页数:12
SSH2框架整合详细步骤内部资料2019年7月目的:通过一个简单的注册登录来学ssh框架的整合1 准备工作1.1工具准备Mysql5.5 , JDK 1.6, Myeclipse 6.5,tomcat6.0等辅助工具1.2整合类库集Struts-2.3.1.2, Hibernate 3.2,Spring 2.5(后两类库可以在myelcipse中有自带)2开始搭建平台1.启动myeclipse,建一个Web工程,如图所示:图中的需要输入项目名称即可,其余可以没必要选择,除非有需2.导入Struts2开发的必备类库说明:(此版本的myeclipse没有需要的struts2类库,所以选择手工导入)需要导入的类库常见8个:导入之后,还别忘了导入一个和spring整合需要的类文件这些工作之后还需配置web.xml文件,为它配置过滤器,配置文件详细如下:<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4"xmlns="http://java.sun/xml/ns/j2ee"xmlns:xsi="/2019/XMLSchema-instance"xsi:schemaLocation="http://java.sun/xml/ns/j2eehttp://java.sun/xml/ns/j2ee/web-app_2_4.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecute Filter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>配置好该处后,还需要在src下面建立一个struts.xml文件,关于该配置文件可以到你下载的struts2文件中,找个项目中,有这样的模版可以拷贝过来一个,这样配置strust2暂时解决了3.导入Hibernate类库文件,选择myeclipse进行导入单击你选择的项目,点击右键,按如图所示选择hibernate的支持选中点击之后得到如下界面,只需改JAR Library Installation如图所示点击next,得到如下,不需改动,继续点击next即可之后到该界面,因为后续来配置,此处就不选,不勾上,点击next接下来也是把勾去掉,不选择,点击finish即可就这样hibernate的支持也完成了3。
ssh基础知识整合Struts,Hibernate,Spring经典面试题收藏第一章Spring概述1、轻量级框架1)框架:Hibernate、Struts、Spring1. Struts:web层的框架2. Hibernate:持久层的框架3. Spring:综合框架;2)SSH:Struts + Spring + Hibernate 三个框架的集成2、EJB1)使用EJB的好处:1. 分布式处理2. 对象的生命周期都是由EJB容器来管理的3. 可以通过声明的方式使用容器提供的服务(比如事务服务)Spring可以提供声明型事务,引用了EJB的事务特性。
2)EJB3.0的思想:1. IOC:依赖注入2. AOP:拦截器、FilterSpring也具有这两大思想。
3、Sping的主要内容:1)IOC(Inversion of Control,控制反转):提供依赖注入。
2)AOP(Aspect-Oriented Programming,面向方面编程):解决非业务逻辑功能的实现。
3)事务和数据访问4)SSH4、Sping提供了一个轻量级容器:IOC容器1)管理javabean对象的生命周期2)维护对象跟对象之间的依赖关系===> 依赖注入重量级容器与轻量级容器的比较:1. 重量级容器通常可以独立运行;轻量级容器通常不能独立运行,必须依赖其他容器。
2. 重量级容器包含的服务大而全,所有应用的服务都必须购买;轻量级容器包含的服务可以由开发人员自己选择。
3. 重量级容器直接管理线程调度;轻量级容器不关注线程调度问题。
5、为什么使用Sping?1)提供依赖注入(通过依赖注入的方式组装对象),使得开发的系统中的组件之间的耦合性降低(松耦合);2)不使用J2EE中的技术,也可以通过声明的方式来获得一些服务;3)spring是一个扩展性非常强的框架,很容易跟其他的框架进行集成,而且可以简化被集成的框架的使用。
【SSH学习笔记】浅谈SSH框架说在前⾯本学期我们有⼀门课叫做Java EE,由陈⽼师所授,主要讲的就是Java EE 中的SSH框架。
由于陈⽼师授课风格以及⾃⼰的原因导致学了整整⼀学期不知道在讲什么,所以才有了⾃⼰重新学习总结的博客,其中可能会有⼀些错误和描述解释不恰当的地⽅,望读者能及时提出。
什么是SSH框架官⽅的说法:SSH是 struts+spring+hibernate的⼀个集成框架,是⽬前较流⾏的⼀种web应⽤程序开源框架。
SSH不是⼀个框架,⽽是把多个框架(Struts、Spring以及Hibernate)紧密的结合在⼀起,⽤于构建灵活、易于扩展的多层Web应⽤程序。
Java EE架构⼤致分为以下⼏个层次:实体层(POJO层)数据访问层(DAO层)业务逻辑层(Service层)控制器层(Controller层)表现层(View层)其中SSH框架的系统从职能上分⼤致可以分为四层:表⽰层、业务逻辑层、数据持久层和域模块层(实体层)。
由SSH构建系统的基本业务流程是:1、在表⽰层中,⾸先通过JSP页⾯实现交互界⾯,负责传送请求(Request)和接收响应(Response),然后Struts根据配置⽂件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。
2、在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
3、在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
采⽤上述开发模型,不仅实现了视图、控制器与模型的彻底分离,⽽且还实现了业务逻辑层与持久层的分离。
这样⽆论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,⼤⼤提⾼了系统的可复⽤性。
SSH三大框架复习笔记by:ZoeXin 2010.03.22Struts:基于MVC设计模式的Java Web FrameWork,提高Java Web开发速度(Model:实现业务逻辑的JavaBean或EJB组件;View:一组JSP文件组成;Control:ActionServlet 和Servlet)Struts组件:1、ActionServlet extends HttpServlet,接收请求信息,根据配置文件struts-config.xml中<action>元素path属性的值将请求交给对应的action对象处理(ActionServlet创建action对象)2、Action 命名对象,接收ActionServlet请求,调用JavaBean对请求做具体处理并将响应信息返回给ActionServlet3、ActionForm 对表单数据自动封装、验证、重置4、Struts-config.xml 配置文件,对ActionForm,数据源,Action以及跳转路径的配置;网站国际化信息资源的配置;框架、插件的配置Struts工作流程:1、当web server启动时,实例化ActionServlet,调用其init方法,server通过解析struts-config.xml 文件获取配置信息(SAX解析),将配置信息存放在各种配置对象中2、Client发送一个*.Do的请求时,ActionServlet查找ActionMapping配置信息<action>元素path 属性值,判断是否存在该路径请求,if false:404 error3、If TRUE:判断<action>元素是否有name属性,if false:创建Action,调用execute方法响应Client 请求4、If TRUE:创建对应的ActionForm对象(ActionForm对象仅默认创建一次),通过反射机制自动封装数据,创建Action,调用execute方法响应Client请求MVC设计模式浅析:强制将application的输入,处理和输出分开,分为Model-View-ControlModel:业务数据和业务逻辑,模型能为多个视图提供数据,提高应用可重用性View:视图是与用户交互的界面,显示相关数据并接收用户的输入数据,视图不进行任何实际的业务处理,查询模型的业务状态,但是不能更改模型,接收模型处理的信息,动态显示结果Control:接收用户请求,并调用对应的模型和视图响应请求优点:1、多个视图能共享一个模型,提高应用的可重用性2、模型是自包含的,和视图、控制器保持相对独立,可以方便地改变数据层和业务逻辑实现,构成良好的松耦合系统3、控制器提高了application的可配置型和灵活性Struts2:Action变化:1、简单pojo业务处理对象;2、String execute(),可以脱离web容器运行,方便测试;3、action表单数据的封装和验证进行处理vaildate,XWork;4、Struts 2使用JSTL,但是框架也支持更强大和更灵活的表达式“对象图形符号语言”(OGNL);5、其核心为webWork,Struts 使用了大量的拦截器处理请求,从而允许业务逻辑实现和servlet-api脱离,非侵入式开发;6、Struts线程安全,一个对象创建一个实例;Spring:轻量级的容器(lightWeight container),为application开发提供全方位的应用程序框架,非侵入式框架;对Struts、Hibernate技术更容易实现;Spring不依赖于特定的容器来运行;组件化的编程思想,类似于模块之间的粘合剂控制反转IOC(Inverse of Control):Spring核心概念;实现了对象之间关系的反转,对象之间的直接依赖关系由IOC容器控制;IOC为设计模式上的概念,分为Dependency Injection(依赖注入)和Service Locator(服务定位器)面向切面编程AOP(Aspect oriented programing):Spring的核心特色;切面:代理对象为真实对象提供的某个服务于业务核心的领域服务;Advice:Spring中切面编程的真实实现JoinPoint:连接点,某个方法被执行时需要提供切面服务的point,根据通知织入到连接点的时间可以分为:方法调用前,调用后,调用的前后,抛出Exception时·Hibernate:解决数据库平台的移植,对JDBC API作轻量级的封装,ORM思想(对象----关系型映射)以面向对象的形式完成对数据库的操作:1、对象和数据库表的映射关系;2、对象的属性和表的字段需要建立映射关系;3、对象之间对应数据库表之间的映射关系‘事务:原子性,一致性,隔离性,持久性hibernate.cfg.Xml:代表整个application全局配置,<session-factory>对应一个数据库连接信息的配置;配置文件中包含了通过Dialect接口实现数据库方言机制;Pojo:持久化的一个对象,类似于java V o对象;pojo类必须实现Serializable接口,否则序列化异常;需要提供默认的无参构造函数;SessionFactory:重量级缓存(二级缓存),包含了hibernate所有映射文件的源程序;对于数据库表的基本操作语句进行预定义;充当application和DB之间的代理,一个数据源仅对应一个sessionfactory,支持并发访问,支持线程安全;Session:轻量级缓存(一级缓存);缓存了当次操作的pojo对象;减少运行时间,提高性能;缓存hibernate生成的sql语句;非线程安全;session不能共享,每次操作需要开启关闭session;监视pojo对象的状态,当pojo对象数据发生变化,hibernate自动更新数据库保证pojo和DB同步;Pojo:临时状态,持久化状态,游离状态;检索策略:配置class元素中lazy属性;立即检索:执行查询动作时会,hibernate立即生成sql语句;延时检索:执行查询动作,但对象的检索工作会延后,等操作该pojo对象时才会检索对象(对session 缓存的性能考虑);Get查询方法会忽略类级别的检索策略,始终采用立即检索;load查询方法受lazy属性值影响;当采用延时检索策略时,返回的对象不为null,为代理对象,当使用代理对象非主键属性时会完成代理对象所有属性的初始化,且必须在session关闭之前,否则LazyInitializationException异常;判断pojo对象是否为代理对象的方法:Hibernate.isInitialalized(Pojo pojo),返回true表示对象已经初始化;Hql语句查询时同样会忽略类级别的检索策略,采用立即检索;受<set>元素lazy属性的影响;1、JSP标准动作:JSP共有以下6种基本动作jsp:include:在页面被请求的时候引入一个文件。
基于myeclipse 8.6M1 的三大框架整合(spring3.0+strut 2.1+hibernate 3.3+mysql)Xiangyun2019-4-9目录1、编写目的 (2)2、搭建环境 (2)3、配置数据源 (2)4、开始创建工程 (3)5、增加Spring框架: (3)6、增加Hibernate框架: (4)7、增加strut2 框架 (5)8、配置Web.xml (5)9、映射实体类 (5)10、编写service和action (6)11、在applicationContext.xml 配置service、action和配置 (7)12、创建index.jsp 和welcome.jsp (7)13、测试(此测试版本如下图) (7)14、总结 (7)1、编写目的最近在学习spring3.0+strut 2.1+hibernate 3.3整合,这期间出现了很多问题,在网上找了若干的实例均有不同程度的问题,为了让想要学习这个整合的人少走弯路,特写下这篇文章,希望对大家有所帮助,如果有很么问题可以与我联系,Email:237567685@qq测试版本代码地址:/detail/goumin1818/5241012(建议先按照此文档自己动手搭建以下,有需要再下载完整的例子)2、搭建环境Myeclipse 8.6M1Tomcat 6.0Mysql 5.2JDK 1.6数据库脚本程序CREATE TABLE `user` (`id` int(20) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`password` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)insert into `user`(`id`,`username`,`password`) values(1,'admin','admin'),(2,'zhangsan','zhangsan');3、配置数据源在myeclipse 右上角打开Myeclipse Database Explorer 数据库管理视图右键鼠标,弹出框,选择New 新建Database Driver如下图:在Driver Template 中选择:在Driver name :写上名字可以随便写(这里测试写的是:mysql )在Connection URL 填写好链接地址:jdbc:mysql://localhost:3306/text填好自己数据库用户名和密码增加mysql驱动jar包在Driver JARs 点击Add JARs 找到mysql驱动jar 包(此测试使用的驱动jar 包是:mysql-connector-java-5.1.5-bin.jar)需要填写的东西都填写好后,最后进行测试下,是否可以链接成功。
SSH: (框架)Spring + Struts + Hibernate(框架)以前.java的文件要使用,总是要编译,那么我们可以将不变的写入.java文件,将会变的写入txt文件网站:变-----.txt不变-----.javaSpring:依赖注入,类似我们的接口类型的面向对象。
Struts:界面,Hibernate:后台数据库。
单单学会ssh里面的任意一门,都可以做网站项目。
当我们把他们的有点整合起来之后,开发网站会更加方便更加快捷。
修改起来也更加有层次Struts------hibernate---------springStruts1Struts2:当前类继承Action的5个接口的常量:Public static final String SUCCESS = “success”; ----- 成功页面--------------------------------NONE = “none”; ------------- 空页面--------------------------------ERROR = “error”; -------------- 错误页面,错误信息------------------------INPUT = “input”; -------------- 也是用于错误跳转–跳回原来的登录页面-------------------------------LOGIN = “login”; -------------- 常量Validateable:该接口提供了一个Validate (),方法用于校验表单数据,在实际应用中只要重写该方法就可以了。
该方法是在执行execute()方法之前执行的。
ValidationAware:该接口定义了一些方法来对Action执行过程中产生的信息进行处理,提供了一个addFieldError(String fieldname,String errorMessage )用于验证出错时保存错误信息。
已经经过本人测试第一步:准备工作MyEclipse 6.0------T omcat6.0所需jar文件:(所有jar文件已整理ssh_jars文件夹)注意:ssh_test项目中采用的是MySql 数据库。
而本文档中配置的是Oracle数据库,注意其中配置的不同之处哦(在相应的地方有注明)第二步:(建立项目,包结构,导入所需jar文件)新建一个web project:建立包结构如下:各包功能说明:com.ssh.config : 配置文件(*.properties),如数据库配置信息com.ssh.resource : 资源文件m : 公共工具(util)包com.ssh.util.orm.hibernate : hibernate DAO 模板com.ssh.model : 各实体类文件com.ssh.service : 业务逻辑包相当于bizcom.ssh..test : 测试包com.ssh.action : struts Action包结构可以根据自己需要自行划分导入jar文件:新建一个User Library: sshJars添加jar文件:将新建的User Library: sshJars加入到项目中:第三步:撰写资源文件jdbc.properties在jdbc.properties 里写上连接数据库的配置信息,此文件的配置信息用于在spring的配置文件中使用,数据库的配置信息也可以写到Spring 的配置文件中,这在一个jdbc.properties文件中是为了方便更改.在com.ssh.resource包中新建下列文件:各文件详细内容及说明如下:----------------------------------------------------------------------------------------------------------------------------------------- applicationContext.xml:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:jee="/schema/jee"xmlns:tx="/schema/tx"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd/schema/jee/schema/jee/spring-jee-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd"default-lazy-init="true"><description>Spring公共配置文件</description><!-- 属性文件读入 --><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"><list><value>classpath*:com/ssh/config/jdbc.properties</value></list></property><!-- 数据源配置,主要用于开发测试环境 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${ername}" /><property name="password" value="${jdbc.password}" /></bean><!-- 数据源配置,在生产环境使用应用服务器的数据库连接池 --><!-- <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/store" />--><!-- Hibernate配置 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBea n"><!—此处hibernate 的映射采用的是.xml 配置则应设置为:class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”--> <property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop><prop key="hibernate.show_sql">true</prop><prop key="e_query_cache">true</prop><propkey="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> <propkey="hibernate.cache.provider_configuration_file_resource_path">/ehcache-hiberna te.xml</prop></props></property><property name="annotatedClasses"> <!—此处hibernate 的映射采用的是.xml 配置同则应设置name=”mappingResource”--><list><value>er</value><!—此处hibernate 的映射采用的是.xml 配置同则应设置<value>具体配置文件名(*.hbm.xml)</value>--></list></property></bean><!-- 事务配置 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /><!--JTA环境的事务配置 <bean id="transactionManager"class="org.springframework.transaction.jta.JtaTransactionManager orWebLogicJtaTransactionManager"/>--><!-- 使用annotation定义事务 --><tx:annotation-driven transaction-manager="transactionManager" /><!-- 保证POJO中标注@Required的属性被注入 --><beanclass="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostPr ocessor" /></beans>----------------------------------------------------------------------------------------------------------------------------------------- applicationContext-security.xml:<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="/schema/security"xmlns:beans="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/security/schema/security/spring-security-2.0.xsd"default-autowire="byType" default-lazy-init="true"></beans:beans>此文件用于AOP的安全验证,也可不添加----------------------------------------------------------------------------------------------------------------------------------------- applicationContext-service.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd"default-autowire="byType" default-lazy-init="true"><bean name="userService" class="erService"></bean><bean name="/hello" class="com.ssh.action.HelloAction"></bean></beans>Service(业务逻辑类)的注入----------------------------------------------------------------------------------------------------------------------------------------- ehcache-hibernate.xml:<ehcache><diskStore path="d:\cache" /><!-- Object cache --><!-- 特别设定User类的Cache,内存中最多只保存5000个User实例,而且idle 600秒过期而Role类没有设置,则使用defaultCache中的默认设定 --><cache name="er" maxElementsInMemory="4" eternal="false" overflowToDisk="true"timeToIdleSeconds="600" /><defaultCache maxElementsInMemory="100000" eternal="true"overflowToDisk="true" /></ehcache>Hibernate 缓存的配置(可以不做配置,如果需要才使用缓存才做配置,建议配置上)----------------------------------------------------------------------------------------------------------------------------------------- 第四步:在m 包下添加下列文件此包为hibernate DAO模板中用到的各种工具类,各文件可以在打包的ssh_test项目中找到.第五步:添加hibernate DAO 模板此包为hibernate DAO模板,SimpleHibernateTemplate.java 中包含了对各实体(增,删,改,查,分页查等)的泛形方法。
SSHBy fydstudio@StrutsStruts MVC Java Web FrameWork Java WebModel JavaBean EJB View JSP Control ActionServlet Servlet Struts1 ActionServlet extends HttpServlet struts-config.xml <action> path action ActionServlet action2 Action ActionServlet JavaBean ActionServlet3 ActionForm4 Struts-config.xml ActionForm ActionStruts1 web server ActionServlet init server struts-config.xml SAX2 Client *.Do ActionServlet ActionMapping <action> path if false 404 error3 If TRUE <action> name if false Action execute Client4 If TRUE ActionForm ActionForm Action execute ClientStruts21 Servlet Tomcat2 Filter ActionContextCleanUp Struts2 SiteMesh Plugin3 FilterDispatcher FilterDispatcher ActionMapper Action4 ActionMapper Action FilterDispatcher ActionProxy5 ActionProxy Configuration Manager Action6 ActionProxy ActionInvocation7 ActionInvocation Action Intercepter8 Action ActionInvocation struts.xml Action JSP FreeMarker Struts2 ActionMapperStruts1 web.xmlStrutsPrepareAndExecuteFilter Struts<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter>2 struts.xmlstruts.xmlResult dispatcher JSP 3 ActionAction ( action name )name actionclass:method: Actionexecute4struts-default.xmlstruts2 struts2 bean (included) struts.xml ( <package extends="struts-default">)5struts.properties struts-plugin.xmlnamespacerequest session application responseStrutsURL Form ActionIoC Inversion of ControlHttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();ServletContext application = ServletActionContext.getServletContext();HttpSession session = request.getSession();IoC Action Request<package name="tt1" namespace="/test " extends="struts-default"><action name="test " class="com.asm.Test1Action"><result name="success">/forward/test.jsp</result> </action></package>public class MemberAction extends ActionSupport implements ServletRequestAware{HttpServletRequest request;…public void setServletRequest(HttpServletRequest arg0) {this.request=arg0;}…}1.ServletRequestAware2.ServletResponseAwaresetServletResponse(HttpServletResponse response)1.SessionAwaresetSession(Map session)session (setAttribute)StrutsJavaScriptActionSupport validateInterceptor AbstractInterceptorstrutx.xmlAction Actionjavaservlet servletactionaction request responseactionAction ..MVCapplication Model-View-ControlModelViewControl123 applicationHibernateHibernate JDBC API ORM ----Persistence Object Relational Mapping ORMORM ORM java123hibernate.cfg.Xml application <session-factory> DialectPojo java Vo pojo SerializableSessionFactory hibernate application DB sessionfactorySession pojo hibernate sql session sessionpojo pojo hibernate pojo DBSession123 SessionSessionSession session = sessionFactory.openSession();Session session = sessionFactory.getCurrentSession();session.beginTransaction();//session.getTransaction().commit();Hibernategetter setter(Student.hbm.xml)<hibernate-mapping package="com.fyd.entity"><class name="Student" table="stu_info" lazy="false"> <--! Lazy --><id name="stu_id" column="stu_id"><--! type --><generator class="assigned"/><--! generator --></id><--! Id <id></id> --><property name="stu_name" column="stu_name" /><property name="stu_address" column="stu_ address " /><many-to-one name="classes" column="classNo" lazy="false" not-null="true"/><--! many-to-one one-to-many --></class></hibernate-mapping>Hibernatesrc Hibernate Hibernate.cfg.xml<mapping resource="com/hibernate/Student.hbm.xml" /> Hibernateload(Object load Class entityClass,Serializable idSession getgetObject get Class entityClass,Serializable idSession nullSpringSpring (Inversion of Control ,IoC) (AOP)IOC Inverse of Control Spring IOC IOC Dependency Injection Service Locator ”AOP Aspect oriented programing SpringAtomic Consistency Isolation DurabilityStruts SpringJar struts2-spring-plugin-2.1.8.jar spring.jar commons-logging.jarSpring web.xml , Spring<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>Servlet<servlet><servlet-name>context</servlet-name><servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class></servlet>Spring beanRegisterBean.xml RegisterAction bean<bean id="registerService" class="bwork1.RegisterServiceImpl" ><property name="rdao"><ref bean="registerDAO"/></property></bean><bean id="registerDAO" class="bwork1.RegisterDAOImpl" /><bean id="registerActionBean" // Struts2 Actionclass="bwork1.RegisterAction" scope="prototype"><property name="rs"><ref bean="registerService"/></property></bean>Struts2 Action Action class Spring bean id<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="register" namespace="/register" extends="struts-default">---------- <!-- Struts2 --><!--<action name="register_*" method="{1}" class="bwork3.RegisterAction"><result name="success">/labwork3/register_detail_xhtml.jsp</result></action>-->---------- <!-- Struts2 Spring --><action name="register_*" method="{1}" class="registerActionBean"><result name="input">/sshLabwork1/register_xhtml.jsp</result><result name="success">/sshLabwork1/register_detail_xhtml.jsp</result></action></package></struts>Spring ApplicationContext.xml, WEB-INF<context-param> // web.xml<param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/spring/applicationContext.xml</param-value></context-param>SSHlog4j Weblog4jLog4jLogger -Appender -Layout-Log4j TRACE DEBUG INFO WARN ERROR FATALLog4jjarlog4j jar commons-logging.jar log4j-1.2.15.jarsrc classesxml log4j.xmllog4j.properties<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="/log4j/" debug="false"><appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"><errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/><param name="Target" value="System.out"/><param name="Threshold" value="DEBUG"/><layout class="org.apache.log4j.PatternLayout"><!-- The default pattern: Date Priority [Category] Message\n --><param n ame="ConversionPattern"v alue="%d{ABSOLUTE}%-5p[%c{1}]%m%n"/> </layout></appender><category name="com.student.web"><priority v alue="WARN"/><appender-ref ref="CONSOLE"/></category></log4j:configuration>Logger logger = Logger.getLogger(this.getClass().getName());logger.warn("----helloo json");Ajax Asynchronous JavaScript and XML WebAjaxXHTML(HTML) CSSDOMXML XSLTXMLHttpRequestJavaScriptAjax1.2.3. Ajax XMLHttpRequest XMLHttpRequest Ajaxopen()send()onreadystatechangereadyState HTMLstatusresponseTextreadyState 0= 1= 2= 3= 4= responeTextresponeXML XMLstatus 404 200200 404 500statusText。
[一Hibernate与Spring整合的目标]
1-使SessionFactory能够在IOC容器中进行托管。
a-我们将不再需要edu.zqu.dao.util.HibernateSessionFactory类去打开Session和关闭数据库资源,sessionFactory和Session
都由Spring容器托管。
b-Hibernet.cfg.xml中的配置选项都可以在Spring的applicationContext.xml中进行配置,但为了不使Hibernate框
架和Spring框架产生深度耦合,我们依然保留了
Hiberante.cfg.xml文档用户配置Hiberante框架自身的基础配
置,只是将数据源及C3P0连接池的配置交给了Spring。
2-并利用AOP特性,在service层实现声明式事务。
a-可以删掉dao层所有跟事务相关的代码,service层也无需编写事务
b-可以通过注解配置及XML配置两种类型的方式,实现Spring 容器的事务处理机制
3-应用注解,实现MVC各层对象在Spring IOC容器中的声明和注入。
[二Struts2与Spring整合的目标]
1-使所有的Action能够在IOC容器中托管,并且实现Service层对象的自动匹配(AutoWired)。
a-Struts框架中的对象必须在Tomcat应用服务器启动时就能提供服务,所以:必须在Tomcat服务器启动时也将IOC容器启动。
(web.xml中配置Listener)
b-Action层对象自动加载Service层对象,自动实现依赖注入。
注意:Eclispe实现SSH框架整合,导入相关SSH框架的jar包,还需要根据Eclipse的版本下载struts插件、hibernate插件、spring插件,以便于项目开发。
[三SSH整合步骤]
1-导入所有jar包:
struts2框架+Hibernate框架+Spring框架+C3P0数据库连接池+JSTL+数据库驱动(mysql、oracle)+struts2-spring-plugin-2.3.15.3.jar (struts2框架专门为了整合Spring创建的jar包,在Struts2.3的jar 包找)
2-在Spring框架的applicationContext.xml中配置sessionFactory 对象:
首先将hibernate框架基础配置依然保留在hibernate.cfg.xml中,删除关于数据库连接及C3P0连接池的配置:
编写db.properties属性文件,因为在服务器集群的情况下,使用属性文件更改服务器设置更安全、更高效。
在applicationContext.xml中,使用“EL表达式”读取属性文件中的设置,生成DataSource,由DataSource配置SessionFactory:
此时,Spring IOC容器实现了对sessionFactory对象的托管,PG得到Session对象,不用考虑其线程及关闭问题。
3-在Spring框架中应用注解方式配置事务机制transaction,此时,只需要将Service层实现类的方法前加入@Transactional注解,即可由Spring框架托管事务
4-在Spring框架中配置并使用注解annotation
在applicationContext.xml中实现自动扫描组件的功能:
5-形成的完整的Spring配置文档内容如下:
6-在M层使用注解实现IOC容器组件的声明及自动注入(举例):dao层:
service层:
7-配置Struts与Spring整合的web.xml文档,实现web服务器启动时,能够同时开启IOC容器,以便为C层提供组件服务
8-在Action中使用Controller注解,此时,必须设置@Scope("prototype"),否则Action无效。
9-struts.xml配置后,直接从IOC容器中获得Action类对象,该对象实现C层的取值和处理功能。
配置action标签中class属性,IOC容器可根据名称提供Action对象。
10 –运行效果。