SSH框架整合学习文档(struts1).docx_第1页
SSH框架整合学习文档(struts1).docx_第2页
SSH框架整合学习文档(struts1).docx_第3页
SSH框架整合学习文档(struts1).docx_第4页
SSH框架整合学习文档(struts1).docx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SSH框架整合学习文档SSH三大框架,它是基于MVC设计模式,是Web开发流行架构。由Struts,Spring,Hibernate组成。下面分别介绍一下Struts Struts2采用了WebWork内核和处理机制,1.Struts2体系结构 a.控制器:FilterDispacther(2.1.8之前), StrutsPrepareAndExecuteFilter(2.1.8) b.Action组件:普通的Java Class c.Result组件:用于整合第三方视图技术 d.拦截器组件:用于拦截Action中的业务方法,通常封装通用性较强的功能 2.Struts2基本使用 a.引入jar包 struts2-core-2.1.8.jar xwork-core-2.1.6.jar ognl-2.7.3.jar freemarker-2.3.15.jar commons-fileupload-1.2.1.jar b.Struts2配置文件 struts-default.xml:默认配置,内部有一个名为struts-default的package元素, package元素中配置了框架提供的Result类型、拦截器、拦截器栈 struts.xml:开发者配置,用于定义开发者编写的Action组件、自定义的Result类型和拦截器 perties:默认配置,用于指定框架的属性配置,比如框架采用编码、资源文件的指定、请求的扩展名。 perties:开发者配置,用于覆盖perties中的默认配置项 struts-plugin.xml:整合配置文件。提供整合其他技术时使用的Result类型和拦截器 c.Struts2基本配置 1)package元素中可以使用namespace属性限定action请求 /工程名+namespace+action请求名.请求后缀 2)param元素的使用 param主要充当action、result、interceptor-ref等元素的子元素, 在struts2框架创建action对象和result对象时为对象属性传入值. 3)通配符*的使用 action请求名属性可以使用*通配符,其他属性使用1方式引用*代表的字符信息 4)动态方法调用,请求格式如下: 请求名!业务方法名.请求扩展名 Spring一、Spring简介1、Spring是一个轻量级的J2EE框架目标简化J2EE(企业级)开发2、Spring的优势1)Spring提供了丰富的基础服务(包括 事务、IOC、AOP、安全、Web等)。2)使软件结构良好。耦合度大大降低,降低软件的复杂度(AOP)。3)使我们养成面向接口编程的良好习惯二、Spring入门1、Bean定义文件 可以使用MyEclipse工具生成2、IoC概念 - 控制反转Inversion of Control IoC = DI (DI是IoC的另一个名称) DI(Dependency Injection - 依赖注入) 依赖:对象A调用对象B,则A依赖于B 依赖注入:将对象A所依赖的对象B通过 属性Setter的方式注入。 IoC容器-Spring3、属性的注入方式1)setter方式 属性设置器 【掌握】形式 注意:用“value=xxx”只限于基本类型的属性String、int等2)构造器方式 【了解】Spring调用合适的构造器来创建实例4、属性的数据类型1)基本类型:int、String、Class等2)集合类型:List、Set、Map1234注:其他类型的集合请参考手册3) 对象类型 关联属性案例:BookService - BookDAO写法: 关联属性注入的几种写法i、ii、整理于2011-8-11iii、局部beaniv、1、依赖检查2、自动注入1)xml方式Spring基本方式“autowire=byName|byType”2)Autowired写在属性的Setter上面对应于byTypeResource(name=bookDao)3、工厂装配相对于构造器方式作用:进行较为复杂的对象创建1)工厂方法i、静态工厂方法ii、实例工厂方法共同特点:通过指定一个方法来创建对象2)工厂Bean实现Spring的FactoryBean接口getObject()getObjectType()4、Bean的作用域Scope 【特别注意】学习要点:定义Bean后,在获取这个Bean时,每次获取的Bean是否相同。1)singleton:单例每次获取同一个Bean它和Spring的生命周期相同。2)prototype:原型 (非单例)每次getBean时都创建新的对象。对象1、数据对象:Book、User2、行为对象:UserService、ServiceFactory提供具体功能的对象业务对象(实现订单管理等业务功能)、服务对象(提供某些特定服务-事务、数据库服务 如Hibernate的Session)在Bean文件中定义的一般为 行为对象,行为对象一般没有状态(状态 即数据)结论:Bean文件中定义的bean一般为单例方式的。所以,Spring默认把Bean当做singleton的。如何判断该用哪种scope?标准:看该Bean有无状态。 有状态Prototype5、Bean的生命周期1)创建:调用构造器生成实例2)Setter:给属性赋值3)init-method:初始化回调方法(会被Spring自动调用)4)准备就绪: 在getBean()之前5)destroy-method:销毁前回调方法(善后工作)6)JVM回收bean例 MyFileLogger打开文件init method中处理关闭文件destroy method中处理两种指定方式1)xml方式:2)注解PostConstruct(“创建后”)、PreDestroy(“销毁前”)注意:用“”启用注解3、延缓初始化(Lazy init)针对于单例让Spring不预先创建Bean,而是在getBean时再创建。4、模板装配先定义一个模板Bean,然后再定义bean时引用这个模板Bean,这样就可以使用模板Bean中的配置信息;也可以在bean中覆盖掉模板Bean中的属性等配置信息。子Bean不能从模板bean继承哪些信息:主要为autowire、dependency-check、lazy-init、scope。5、BeanPostProcessor 后置处理器在Bean创建并初始化完毕之后,对Bean进行进一步的初始化处理。特点:它可对所有的Bean进行处理。例子:目录的预先创建在Spring中有一些预定义的后置处理器:RequiedAnnotationBeanPostProcessorAutowiredAnnotationBeanPostProcesorCommonAnnotationBeanPostProcessor后置处理器执行顺序 Ordered, PriorityOrdered ,setOrder/getOrder从0开始,数字越小就越靠前。扩展机制 增加功能6、属性文件 perties将系统配置信息(与客户领域相关的)单独放在一个属性文件中,而在Bean定义文件中只放置属性名,然后由Spring将属性值引入。引入属性文件:使用属性文件:形如 “$propName”7、资源-Resource程序所用到的如文件等设施。Resource接口ClassPathResource文件放置classpath中格式:classpath:myspring/bean/banner.txtclasspath:banner.txt:banner.txt放在根路径下FileSystemResource文件放在任意目录下格式:“file:d:/myspring/banner.txt”UrlResource文件放在Web项目中格式:“/resource/banner.txt” 通过ResourceLoader来获取Resource如何获取ResourceLoader?需要应用程序实现ResourceLoaderAware接口setResourceLoader(ResourceLoader loader)三、AOP基础1、AOP Aspect-Oriented ProgrammingAspect:切面解决什么问题?横切关注点:横越多个模块的业务关注点,如 事务、日志、身份验证等。2、AOP的解决方案拦截1)谁来拦截?代理代理模式:代理类与本类实现同一接口。2)拦截过程i、将Proxy(如 UserServiceProxy)交给调用方(如 UserAction);Action调用UserService接口(如调用save() )ii、Proxy先拦截save方法,执行拦截逻辑iii、然后执行UserServiceImp的save()。3)核心概念:a、拦截器(Interceptor):实现拦截逻辑的对象。b、目标对象(Target):即Proxy所代理的对象c、代理对象(Proxy)以上三个类组成一个“金三角”Proxy-Interceptor-Target3、代理如何实现?两种方式1)JDK动态代理由JDK自带的动态代码生成技术可以对实现了接口的类进行处理2)CGLib对没有实现任何接口的类进行处理动态字节码生成(动态代码生成)定义:在程序运行期间,动态的生成代码并进行动态编译和加载(Load)JDK动态代理的实现:获得代理对象:Proxy.newProxyInstance(, 拦截器+Target) 二、Spring AOP之基本方式Spring v1.0 AOP实现1、通知(Advice):对方法进行拦截的时机1)Before Advice:方法执行之前进行拦截2)AfterReturning Advice:方法正常结束之后3)AfterThrowing Advice:方法异常结束之后4)Around Advice:环绕通知拦截逻辑放在Advice类中Advice将拦截器分解为4个类按照时间进行分解2、用ProxyFactoryBean创建代理对象1)拦截器:Advice2)创建Proxy:ProxyFactoryBean注意:1、AroundAdvice应单独使用,不要和前三种混合。2、AroundAdvice中勿忘调用目标方法。即 methodIceed()Hibernate1、Hibernate的优点1) jdbc是通过sql驱动(访问)数据库,而通过sql来处理复杂表的话会很繁琐Hibernate通过帮我们生成sql来使编程变得轻松2)表的关联(如 Order表+item+user表)可以用Hibernate来方便的处理3)性能优化(关键环节-数据库的性能优化)Hibernate可以帮我们进行比较大的数据库性能优化2、O-R Mapping(“对象-关系”映射)Object-Relation MappingObject到Record的转换(或反之)就叫做ORM3、Hibernate发布包 3.2 :hibernate3.jarlib:Hibernate运行所需要的包docapi:关于Hibernate的类的参考reference:教我们如何去用Hibernatesrc:所有源代码一、Hibernate入门1)Hibernate编程步骤(三步走)a、准备工作:建表(t_user);建实体类(User类)b、写映射文件和配置文件(数据库连接信息等)配置文件:配置Hibernate的整体信息(全局性的)映射文件:对实体类与相关表的对应关系(即映射)进行说明c、调用API(Hibernate的核心类)2)目标:实现单个类的持久化(即单表操作)实体映射3)映射文件 文件中放的是映射信息 映射:就是一种对象和表之间对应关系具体表现在以下两个方面(层面):User user表1、类名和表名 2、类的属性和表的字段4)get和load的区别get:a、在调用时就访问数据库并把记录读出来b、如果没有找到记录,get返回nullload:a、 在调用时没有对数据库进行查询,而是在使用实体对象的时候再去读取数据库。即延缓加载。延缓加载的作用:提高系统性能。b、如果没有找到,当访问实体对象时,会抛出异常(实体未找到)1、实体映射映射两个层面1、类名和表名的对应2、属性和字段的对应实体映射:单个实体类与表的对应解决的问题:对于实体进行持久化2、Hibernate编程步骤1)准备(前提):表和类建好2)映射文件(配置文件)每一个类写一个映射关键:抓住映射文件的内容3)调用核心APISessiona、Session的创建b、持久化方法:与数据库操作相关:CRUDC-Create, R-Retrieve,U-Update,D-Delete二、实体映射进阶1、Hibernate的数据类型integer/long/string/double/big_decimal/date/time/timestamp/布尔date-年月日 yyyy-mm-ddtime-时分秒timestamp-年月日时分秒布尔:yes_no, true_false2、id的生成方式Generator1)identity:auto-creamentMySQL MS-SQLServer2)sequence:需要指定用哪一个序列(user_seq)Oracle3)native:根据数据库类型智能判断 用identity或sequence三、关联映射之多对一关联-是实体之间的一种关系1、经典案例Emp和DeptEmpid,name,Dept deptDeptid,name,loc2、多对一映射的实现 关键掌握映射文件的写法的含义:跟一样,都是指属性(如 dept);特指对象类型的属性(关联属性);进一步讲,指多对一的关联。多对一的特点:在中, column必定是外键(如 emp中的dept_id)3、级联更新Cascade在保存实体A(如Emp)的时候,同时去保存实体B(如Dept),就叫做级联更新save-update4、关联读取fetchfetch代表读取,取值如下:1)select:默认。串行的读取两个实体2)join:如果需要关联查询,就用它。5、关联处理总结:1)关联地更新(级联更新)- Cascade2)关联读取(关联抓取)- fetch6、HQL 1)HQL总体特点:a、与Sql相比较而言:i、把表名换成类名ii、把字段名换成属性名b、“.”(点号):如 e.dept代表关联(join),进一步讲,代表inner join例如 pany.group四、如何在Web中使用Hibernate?要求:把Hibernate.cfg.xml放到默认路径classpath - WebRootWEB-INFclasses解决方法:在开发时(在Web工程中),把配置文件放到src目录下通过以上介绍对SSH有了初步的了解。对整合SSH框架有一定的帮助。下面介绍SSH的整合方式:Struts和Spring的整合方式有两种:一种是有Spring容器来管理Action,另一种方式是Action处于容器之外。注意中文问题:设置过滤器,设置页面编码,数据库编码。下面来看一个实例:新建一个web项目操作:File/New/Web Project添加Struts功能支持操作:项目右键MyEclipseAdd Struts Cap abilities 创建ActionForm类操作:Ctrl+N MyEclipse/Web-Struts/Struts 1.2 Form(show All Wizards) 类名:LoginForm在“Form Properties”选项卡为LoginForm新增两个属性:username、password;在 “JSP” 选项卡钩选 “Create JSP form” 选项,将新建路径改为 “/login.jsp”(login.jsp文件将被自动创建)。创建Action类操作:Ctrl+N MyEclipse/Web-Struts/Struts 1.2 Action类名 LoginAction在“Form”选项卡的“Name”项选择“loginForm”,“Input Source”项输入“/login.jsp”。在 index.jsp 文件中添加一个指向 login.jsp 的链接:Login。创建Forword类操作:Ctrl+N MyEclipse/Web-Struts/Struts 1.2 Forword类名:indexForword“Name” 项输入 “indexForword” ,”Path” 项输入 “/index.jsp” 。修改LoginAction.java文件修改LoginAction 类的execute方法:public class LoginAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) LoginForm loginForm = (LoginForm) form;String username=loginForm.getUsername();String password=loginForm.getPassword();if(username.equals(”test”)|password.equals(”test”) return mapping.findForward(”indexForword”); else return mapping.getInputForward(); 在login.jsp中加入 标签:。测试操作: Run/Run,选择 MyEclipse Server Application 方式运行。添加Spring功能支持操作:MyEclipse/ Add Spring Capabilities Spring 版本( Spring version )选择 “Spring 1;开发包(libraries)选择 “Spring 1.2 AOP Libraries、Spring 1.2 Core Libraries、Spring 1.2 Persistence Core Libraries、Spring 1.2 Persistence JDBC Libraries” 四项;JAR Library Installation 选择 “copy checked” ,”Library Folder” 项选择 “/WebRoot/WEB-INF/lib”(这样的话所需的类库都将拷贝到项目目录,方便以后的布署)。点击 “下一步(Next)” 创建配置文件,修改文件路径(Folder)到 “WebRoot/WEB-INF” 目录(以便和Struts配置文件一起管理),文件名称为默认的”applicationContext.xml”。点击 “完成(Finish)” 。配置 struts-config.xml 文件添加 Spring 插件(在 标签后面添加):修改 LoginAction 的配置(只需修改 type 属性):绿色字体部份为被修改过的内容,这里将使用 spring 的代理器 DelegatingActionProxy 来对 Action 进行控制。修改 Spring 配置文件 applicationContext.xml绿色字体是关于接受和处理 Action 控制权的配置内容,”com.login.struts.action.LoginAction” 即为原 struts 里的配置。测试同上一次测试。测试成功证明 Spring 运行正常。添加 Hibernate 功能支持操作:MyEclipse /Add Hibernate CapabilitiesHibernate 版本(Hibernate Specification)选择 “Hibernate 3.1 ,开发包(libraries)选择 Hibernate 3.1 Core Libraries 一项;JAR Library Installation 选择 “copy checked” ,”Library Folder” 选择 “/WebRoot/WEB-INF/lib” 。点击 “下一步(Next)” 设置配置文件,选择 “Spring configuration file (applicationContext.xml)” 。如图:“下一步(Next)” 设置 Spring-Hibernate,选择 “Existing Spring configuration file” ,”SessionFactory ID” 项输入 “sessionFactory” 。“下一步(Next)” 创建数据源对象,在 Bean Id 中输入 dataSource,”DataSource” 项选择 “Use JDBC Dirver” ,DB Driver 项选择 “login-conn” ,其余项会自动填充;记得选中 “Copy DB driver jar(s) to project and add to buidpath” 项,以便将数据连接的库文件复制到项目,方便以后的布署。“下一步(Next)” 创建 SessionFactory 类,”Java package” 项设置为 “com.login.Hibernate” (没有则点击”New”按钮添加),”Class name” 项修改为”SessionFactory” ,Java Compliance Level选择和创建项目时选择的Java版本。(本例中并没有用到SessionFactory类,留作今后扩展)点击 “完成(Finish)”。创建对象关系映射(ORM)的相关文件操作: Window/Open Perspective/MyEclipse Database Explorer选中 user_table 表,点击右键,在出现的菜单中选择 “Hibernate Reverse Engnieering” 。在弹出的窗口中保持 “Java package” 项为 “com.login” ;选中 “Hibernate mapping file (*.hbm.xml) for each databases table” ,并保持 “Update hibernate” 项选中;选中 “Java Data Object” 项,并保持 “Create abstract class” 选中;“Base persistent class” 项留空;取消 “Java Data Access Object” 项和 “Use custom templates” 项。点击 “下一步(Next)” ,再点击 “下一步(Next)” ,在 “Configure reverse engineering details” 页选中 “user_table” 表,在右边出现的 “Class Name” 项中输入 “com.login.User”,其它不变。点击 “完成(Finish)”。完成此操作,会在 “com.login” 包下创建三个文件:AbstractUser.java、User.java、User.hbm.xml。创建 UserDAO.java 接口和 UserDAOImpl.java 类UserDAO 和 UserDAOImpl 通过 Hibernate 访问数据库。UseDAO.java 内容如下:package com.login;public interface UserDAO public abstract boolean isValidUser(String username, String password);UserDAOImpl.java 内容如下:package com.login;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class UserDAOImpl extends HibernateDaoSupport implements UserDAO private static String hql = “from User u where u.username=? “;public boolean isValidUser(String username, String password) / 验证用户List userList = this.getHibernateTemplate().find(hql, username);if (userList.size() 0) re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论