SSH框架介绍培训目标SSH基本概念认识框架认识SSH框架开发入门认识框架大奔先生汽车之父和奔驰汽车奔驰汽车KarlFriedrichBenz汽车基本结构就是一个框架底盘车身发动机电气设备保时捷飞机汽车水上汽车框架是什么?框架是前辈们多年以来总结出的一些开发标准;让后辈可以以成功的经验模式来开发自已的系统。使用优秀框架的好处1.易于开发:框架对底层的API进行了封装,开发者不需要直接接触底层的API,只需要写一些必须的代码。2.结构清晰:清晰的结构使得各模块功能明确,更易于阅读,从而使其他开发者能够更快加入,也降低了后期维护成本。3.易于测试:采用成功的框架的代码比自己的代码容易测试。4.缩短周期:采用成功的框架能缩短项目的设计、开发周期。Struts2SpringMVCHibernateSpring页面展示管理数据库MyBatis认识SSH框架SpringMVCHibernateSpringSSHJava文件结构数据库连接、SQL语句SSH各部分技术负责工作JSP文件结构HTML跳转Java文件结构业务逻辑代码Servlet文件结构页面逻辑HibernateSpringMVCJavaBeanSpring管理认识SpringMVC什么是MVC电视节目电视信号电视机ModelView1ControllerView2View3模型控制视图是一种软件设计典范,通过业务逻辑、数据、界面显示分离的方法来组织代码什么是SpringMVC?SpringMVC是一个典型的教科书式的MVC框架,作用是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。即简化WEB前端开发的工具。同类竞争对手Struts2SpringMVC工作原理认识Hibernate什么是Hibernate?Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。即把对象操作转成SQL语句同类竞争对手MybatisHibernate原理Java应用程序Hibernate持久化对象JNDIJDBC数据库SQL1.Java应用程序直接对持久化对象作增、删、改、查操作。2.Hibernate会把这些操作解释成SQL语句。3.通过JNDI、JDBC提交SQL到数据库。123Hibernate的优点对象/关系数据库映射(ORM),简化了DAO层编码工作,使开发更对象化了支持透明持久化(TransparentPersistent)它没有侵入性,即所谓的轻量级框架移植性会很好,能支持不同类型的数据库系统缓存机制,提供一级缓存和二级缓存认识Spring什么是Spring?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,创建的目的是解决企业应用开发的复杂性。什么是IOC?控制反转(InversionofControl,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。控制反转还有一个名字叫做依赖注入(DependencyInjection),简称DI。一个生活中的IOC例子何金水在某家公司任职,老板要求他负责公司职员日常的饮水问题。老板对金水可以有两种形式的要求:第一种是必须只能购买A公司的水。第二种是只要有水喝就行不管哪家都行。如果是第一种情况,那么当金水发现不能在和A公司合作而想转向购买B公司的水的时候,金水必须要做的一件事情是向老板请示并且征得其同意方可更改卖主。如果是第二种情况,则金水完全不用关心老板的意见就可以决定并且控制这个更改。老板只对金水提出一个接口要求那就是水,至于从什么地方来,这个过程的更改控制权反转给了金水。类AAInterfaceaAInterfaceImpA代码片段:类A{AInterfacea;A(){}aMethod(){a=newAInterfaceImpA();}}类AAInterfaceaAInterfaceImpB代码片段:类A{AInterfacea;A(){}aMethod(){a=newAInterfaceImpB();}}类A和AinterfaceImplA耦合性太强ClassAAInterfaceaAInterfaceImpAAInterfaceImpBAinterface工厂AInterfacecreate(Objectcondition)根据条件condition返回不同的实现类代码片段:类InterfaceImplFactory{AInterfacecreate(Objectcondition){if(condition=condA){returnnewAInterfaceImpA();}elseif(condition=condB){returnnewAInterfaceImpB();}else{returnnewAInterfaceImp();}}}AinterfaceImplA、B和Ainterface工厂耦合性太强IOC容器类AAInterfaceaIOC工厂XML配置AInterfaceImpA1231.IOC工厂自动从XML获取类描述。2.实例化描述中的类。3.把实例化的类注入到指定的接口上。可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java的“反射”编程,根据XML中给出的类名生成相应的对象。XML配置片段:beansbeanid=Aclass=Apropertyname=aref=aInterfaceImpA“//beanbeanid=aInterfaceImpAclass=AInterfaceImpA/beanid=aInterfaceImpBclass=AInterfaceImpB//beans代码片段:类A{AInterfacea=null;A(){}}类AInterfaceImpA{}类AInterfaceImpB{}WEB容器SpringIOC容器如何使用SpringIOC把SpringMVC和Hibernate整合HinterfaceImplHibernate数据接口实现类SInterfaceImpl业务逻辑实现类Hinterface数据接口Controller对象Sinterface业务逻辑接口Hibernate对象注入JavaBean对象注入浏览器http请求http返回开发入门1、开发环境搭建–jdk1.7–sts3.6.22、项目环境搭建–导入相关jar包(spring包,Hibernate包,数据库驱动,数据源包,测试包等)–web.xml配置–spring配置文件配置–springMVC配置文件配置3、编程开发•配置文件介绍–web.xml配置1、要正常的使用spring必须在web.xml中开启spring监听器,同时如spring配置文件名称、位置不是默认,则需要进行配置2、为避免Hibernate延时加载时因session关闭所产生的异常,通过openSessionInViewFilter配置,将session的开关交由spring进行管理3、进行DispatcherServlet配置,保证springMVC的正常使用,同时如springMVC配置文件名称、位置不是默认,则需要进行配置4、另外还可以进行字符编码过滤器配置,避免出现乱码现象等web.xmlweb.xml•配置文件介绍–属性文件(config.properties)数据库连接相关配置信息通常存储在属性配置文件中。•配置文件介绍–spring配置文件默认名称:applicationContext.xml。默认位置:/WEB-INF/applicationContext.xml。如果名称、位置不是在默认位置需在web.xml中进行配置。在该文件中可以进行如下配置:1、扫描包目录配置(同时开启基于注解方式)2、属性文件的导入配置3、注册需要spring来管理的类(整合Hibernate,对数据源对象与SessionFactory对象进行描述和属性配置)4、事务管理配置等spring-hibernate.xmlspring-hibernate.xmlspring-hibernate.xml•配置文件介绍–springMVC配置文件默认名称:servletName-servlet.xml。默认位置:/WEB-INF/servletName-servlet.xml。如果名称、位置不是在默认位置需在web.xml中进行配置。在该文件中可以进行如下配置:1、扫描包目录配置(同时开启基于注解方式)2、HandlerMapping、HandlerAdapter注册3、viewResolver配置4、异常页配置5、文件上传配置6、拦截器配置等springMVC.xml注解•@Component(不推荐使用)•@Repository(value=userDao)•@Service(userService)•@Constroller•@Resource(name=userDao)•@Autowired•@Qualifier(userDao)(不推荐使用)beansbeanid=userDaoclass=com.shy.ssh.dao.UserDao//beansbeansbeanid=userServiceclass=com.shy.ssh.service.UserServicepropertyname=userDaoref=userDao//bean/beansUserBean.java@Entity@Table(name=tb_user,catalog=db_ssh)//DB2数据库schema=DBpublicclassUserBean{privateintid;privateStringuserName;privateStringpassword;privateDatecreateDate;publicUserBean(){}publicUserBean(StringuserName,Stringpassword,DatecreateDate){this.userName=userName;this.password=password;this.createDate=createDate;}@Id@GeneratedValuepublicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}@Column(name=create_date,nullable=false,length=7)publicDategetCreateDate(){returncreateDate;}@JsonFormat(timezone=GMT+08:00,pattern=yyyy-MM-ddHH:mm:ss)publicvoidsetCreateDate(DatecreateDate){this.createDate=createDate;}}UserDao.java@Repository(userDao)publicclassUserDaoimplementsIUserDao{privateSessionFactorysessionFactory;publicSessionFactorygetSessionFactory(){returnsessionFacto