Download presentation
Presentation is loading. Please wait.
1
基于SSH的web开发 AND 企业级WEB应用开发新技术
目标: (1)能了解基本的SSH框架结构,能开始用SSH进行开发,当然需要自己去自学一些东西 导师:王千祥 姓名:吴凌
2
OUTLIne SSH整体结构 STRUTS HIBERNATE SPRING Demo 类似淘宝电子商务网站的后台的一个产品分类功能模块
Servlet VS Struts 实例 MVC Struts的MVC实现 Struts的核心技术 显示层Web框架选型 HIBERNATE 非Hibernate VS Hibernate实例对比 Hibernate 概念及其优势 Hibernate 核心知识 Hibernate注意事项 SPRING 不用Spring 和实用Spring实例对比 Spring AOP实现 Spring 主要用途 Demo 类似淘宝电子商务网站的后台的一个产品分类功能模块 企业级Web 应用 开发新技术 今天主要分这四个部分讲 (1)也就是先讲实例,然后再讲点相关概念 (2)因为我只有一个小时的演讲时间,所以不可能把所有概念都讲一遍,这三个框架每个都是一本书,所以我在这里主要讲的是它们究竟能比传统不基于框架的开发带来哪些好处, 这一个小时的目标是掌握思想 (3)可能有些同学已经学过了SSH了,那这里就当做复习一下,同时可以仔细听听显示层web框架选型这部分,还是挺有用的 总之呢,我就是按照这个大纲的步骤一一和大家共同讨论下SSH这个框架
3
SSH整体结构 Struts主要用于显示层和控制层,会涉及到这么些东西 业务逻辑层用Spring的AOP和DI进行事物管理和对象管理
持久层用Hibernate进行数据库操作
4
Struts outline Struts VS servlet实例 MVC Struts的MVC实现 Struts的核心技术
显示层Web框架选型 (1)首先讲个servlet和struts的实例,看看struts对传统的基于servlet的开发究竟有啥不同,这里讲的主要是struts1.x,现在公司用得多的还是struts1.x,但是都推荐用struts2.0,实际上struts2.0是webwork的升级,而不是struts1.本质改变了 (2)在讲之前让我们看看这个实例究竟要做啥事情? 有个登录界面->然后当用户点击登录->后台验证用户名密码是否正确->正确的话跳到一个界面显示登录成功否则跳到登录失败的界面
5
Struts VS servlet实例 (一)
Login.jsp 这是一个简单的登录的jsp页面 代码主要由一个表单构成 有username和password两个属性
6
Struts VS servlet实例 (二)
Login_success.jsp Login_error.jsp 里面就几个文字
7
Struts VS servlet实例 (三)
刚才不是说了提交表单后后台要验证 我们看看servlet是怎么实现验证的 (1)获得名字密码 (2)调用业务逻辑层验证函数,一般是去数据库验证 (3)成功跳到success.jsp (4)失败跳到error.jsp、 这个就是servlet的做法,下面看看struts是怎么做的
8
Struts VS servlet实例 (四)
Action ActionForm 核心是有个actionForm和一个Action 所有表单属性都在actionForm中存着 Action调用model层的函数进行业务逻辑进行处理,然后进行转向 大家是否发现struts和servlet十分像,没错,struts本质上就是对servlet的一层封装,更加规范和框架化
9
Struts VS servlet实例 (五)
Struts-config.xml 要实现那些得配置一下Struts-config.xml 主要要配置: (1)action:path是地址,type表示当输入这个地址时调用哪个action,这个action和那个form关联 (2)forward :转向 (3)form-bean:存属性用的 由以上这几步就实现了一个简单的struts应用了,简单吧
10
Struts outline MVC Struts VS servlet实例 Struts的MVC实现 Struts的核心技术
显示层Web框架选型 为了更好的理解struts,在具体介绍Struts概念前,先说说MVC,java永恒的经典框架
11
MVC MVC是这么一个东西: M-model模型层,这个是广义的模型,业务逻辑处理也在里面,而不仅仅是对象模型
C-Controller,控制层,用于控制业务的流转的 View-显示层,用于呈现给用户看的东西 B->C发送请求,控制层调用M的函数进行一些运算,记住运算都是在model层中实现的,然后转向到某个view页面,view页面显示model中的数据->B
12
Struts outline MVC Struts VS servlet实例 Struts的MVC实现 Struts的核心技术
显示层Web框架选型 实际上Struts这个框架就是MVC的一个具体实现
13
Struts的MVC实现 结合刚才那个实例来讲讲struts的mvc实现(事件驱动、请求驱动) 用户通过B看到登录页面
提交后数据存在actionform中 从struts-config.xml中确定交给哪个action处理 Action调用model层方法进行处理 再根据struts-config.xml转向到相应界面
14
Struts outline MVC Struts VS servlet实例 Struts的MVC实现 Struts的核心技术
显示层Web框架选型 看看一些struts的名词,关键是掌握前面的思想,后面的具体实现每种技术有自己实现的差异罢了,这里时间有限也没法具体讲所有概念,仅仅是过一遍,前面思想最重要
15
Struts的核心技术 ActionForm Action Strut-config.xml Struts Taglib JSTL I18N
Struts Taglib:是为了更好的显示,而提供的一些struts专有的tag JSTL:提倡用,是通用的TAG,不仅仅是struts能用 I18N:应用国际化 当然这些不是所有,只是嘴核心的部分,还有很多比如说userType等等也是struts的东西,如果要细致学习就可以这么学
16
Struts1 VS Struts2的区别 Action 类 线程模式 Servlet 依赖 可测性 捕获输入 表达式语言
绑定值到页面(view) 类型转换 校验 Action执行的控制 Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去 实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。 线程模式: • Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 • Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题) Servlet 依赖: • Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 • Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测性: • 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。 • Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入: • Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经 常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。 • Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。 表达式语言: • Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 • Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL). 绑定值到页面(view): • Struts 1使用标准JSP机制把对象绑定到页面中来访问。 • Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 类型转换: • Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。 • Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验: • Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。 • Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性 Action执行的控制: • Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 • Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
17
Struts outline MVC Struts VS servlet实例 Struts的MVC实现 Struts的核心技术
显示层Web框架选型 这个我觉得非常有用,因为现在显示层技术有好几百个,太多太多了,如何选择这些技术,听完我说的这部分应该就能有个思路了!
18
显示层Web框架选型 JSF Spring MVC Stripes Sturts1.x Struts2.0 Tapestry Wicket
Flex GWT Seam Extjs 显示层框架大概有几百个,不可能每个都学,所以要有所选择,主流的框架主要有这几个! 各有各的特色,比如有的是富客户端技术flex,ext,比如有的是纯java编程wicket,比如有的是通过写java 代码来实现JavaScript:GWT,gmail就是用它写的 我先说说他们的优势和劣势吧 JSF Pros: Java EE 的标准,很多职位和需求 初期很如意开发 很多组件库 Cons: 一大堆的tag要学 Rest架构不好,而且安全性不好 Spring MVC 验证框架不错 无缝的集成了许多可选的东西: JSP/JSTL, Tiles, Velocity, FreeMarker, Excel, XSL, PDF 天生IOC,容易测试 控制反转了,导致了很多xml文件,这个有好有坏了 太灵活了 – 不像struts有统一的父控制层 本生没有内建ajax支持 Stripes 没有xml- 符合我们原本习惯 有很好的文档方便学习 有个非常热情的社区 社区太小 本生发展不是那么活跃 ActionBeans中是硬编码的urls Struts 2 架构简单- 容易扩展 标签库容易定制 文档组织得很差 过于关注新特性 Google出来的都是Struts 1.x 的东西 Tapestry 一旦你学懂他,非常具有生产力 它的模板是html的 – 对设计者有好处(非jsp) 各个版本很多创新 文档都是概念,实例少 学习成本高 Wicket 非常是和java开发者(全java开发) 活跃的社区 但html模板就在java代码边上,混在一起 需要非常好的掌握OO设计 OO 只能用它的方式,所有东西都是用java编写 Flex 是是漂亮的FlashUI(有时候你会发现前台比后台重要) Adobe支持(大公司支持) 对搜索引擎不友好 对html渲染不太好 默认的显示不是很好 GWT 写java代码产生JavaScript代码 用java标准就很容易学会和开发 很多工具支持 在现存代码上很难增添GWT支持 不支持java 5 这些就是他们的优缺点
19
选择? 是否你开始感觉迷惘了? 迷惘时对的,各个技术都有自己的好处,不可能全部学! 人是聪明的,思考下如何选择吧
20
选择的因素 Ajax支持 维护性 可测试性 你项目的特性 国际化支持 社区和支持 可用的现成工具 就业机会
Ajax支持:现在如果不支持Ajax就是落后了 维护性:选择的技术一定要能后期非常好的维护,否则你就给自己找了个大麻烦 可测试性:就是你的项目必须有很好的测试支持,否则项目一旦变大,就不可维护了 国际化支持 社区和支持:一个活跃的社区能很好的带动一个技术的发展,没有活跃社区支持,这个技术必定会死亡 可用的现场工具:要有好的IDE环境,有很多现成可用的东西,比如jar包 就业机会:这点不用我说了
21
HIBERNATE Outline 非Hibernate VS Hibernate实例对比 Hibernate 概念及其优势
因为Hibernate是目前功能最好的持久层框架,所以选择框架时候就选它就行了,如果想简单点的框架可以选择ibatis,还有Toplink和JPA
22
非Hibernate VS Hibernate实例对比
这个实例要说的就是项目中我要存和读取一个对象时候的问题,最近在为一片论文写一个svnmining的小系统,这里是它的一个对象的存储和读取时候的例子…. 首先看看JDBC存在的缺陷 (1)一些莫奇妙的句子,每次都要加驱动,而且事物不太好管理 (2)对象中夹杂这sql这种关系型数据库的东西,就没那么面向对象了 (3)而且你肯定是先设计了数据库表再来设计对象的,很多缺陷缺陷,比如继承问题,你会如何解决?
23
Hibernate实例(一) LogMessage.java 下面看看hibernate如何改进的
(2)你对象中的继承关系等各种关系都会在表中表示出来
24
Hibernate实例(二) LogMessage.hbm.xml 每个对象都要对应这样一个xml文件 除此外还有annotation的方式
25
Hibernate实例(三) hibernate.cfg.xml 这个文件是对整个项目的连接配置,最下面加入了刚才新添加的user对象
26
Hibernate实例(四) LogMessageDAOImpl.java
你会发现,再也见不到那些sql语句了,取得的都是对象,你就能直接操作这个对象,save的时候直接save对象就可以,纯对象操作
27
HIBERNATE Outline 非Hibernate VS Hibernate实例对比 Hibernate 概念及其优势
28
Hibernate 概念及其优势 优势: 完全屏蔽sql,你操作的都是对象,面向对象的思想 得到了很好体现
对象中的继承等各种关系都可以表示出来,生成数 据库时候自动生成,数据库可以最后才有 通过hibernate层你可以进行很多优化,比如缓存, 懒加载等等 结论:Hibernate给我们提供了利用面向对象的思想 来操作关系型数据的接口,简单说就是一个O/R映 射框架 看了那么多,总结一下hibernate的优势 总结出来hibernate概念就是:
29
HIBERNATE Outline 非Hibernate VS Hibernate实例对比 Hibernate 概念及其优势
30
Hibernate 核心知识(一) Interceptor:拦截器,用于一些拦截检查等工作
UserType:用于一些数据库和对象中数据类型转化 Session:session操作,事物操作和一些如何查询操作,sessionFactory是用来创建session的,configurantion是用来读配置文件的,下面三个是访问数据库的方式,JNDI命名目录接口,JDBC是java访问单个数据库方式,JTA是跨数据库访问
31
Hibernate 核心知识(二) Hibernate的对象生命周期 Hibernate基本映射 Hibernate高级映射
一对多 一对一 多对一 多对多 组合主键 集合映射 Hibernate的lazy和级联 Hibernate的继承策略 Hibernate悲观锁和乐观锁 HQL Hibernate的缓存策略 Hibernate的Fetch策略 对象生命周期:持久,游离,临时 基本映射:就是刚才我们看到的映射 高级映射:只对象之间的关系,student和group,persion和idcard,课程和学生,多于一个主键的,list,set,map Hibernate的lazy属性:懒加载,用的时候再加载,比如一,我只想知道这支股票的创建时间,没必要把购买者对象加载过来个股票对象对应无数个购买者 级联:存对象的时候把其关联的也存
32
HIBERNATE Outline 非Hibernate VS Hibernate实例对比 Hibernate 概念及其优势
33
Hibernate注意事项(一) 千万注意对象化编程思想,先有对象,数据库 最后才有
SessionFactory的创建非常消耗资源,整个应 用一般只要一个SessionFactory就够了,只有 多个数据库的时候才会使用多SessionFactory。 在整个应用中,Session和事务应该能够统一管 理。(Spring为Hibernate提供了非常好的支持) 将所有的集合属性配置设置为懒加载 (lazy=”true”)。在hibernate2.x版本中, lazy默认值是“false”,但hibernate3.x已经将 lazy的默认改为“true”了。 思想第一,这些注意事项只有你实践了才能体会到,时间有限,所以只能点到为止
34
Hibernate注意事项(二) 在定义关联关系时,集合首选Set,如果集合中 的实体存在重复,则选择List(在定义配置文 件时,可以将List定义为bag),数组的性能最 差。 HQL子句本身大小写无关,但是其中出现的类 名和属性名必须注意大小写区分。 如果要精通Hibernate,熟练掌握关系数据库理 论和SQL是前提条件
35
Spring outline 不用Spring 和使用Spring实例对比 Spring AOP和IOC DI Spring 主要用途
此外还有guice也是有spring类似功能的
36
不用Spring(一) 对象多了,其dao的实现也多了,DAO的意思就是data access object数据访问对象,专门访问对象数据的,对应数据库就是那些表, 而每个dao实现都有很多的CRUD,CRUD的意思就是增删改查,而所有增删改查都要进行事物管理,也就是你所看到的,先要开启session,事物等等,你想想我做的这个svnmining中那么多对象都要进行这些操作,是不是太冗余了呢? 当你频繁地进行ctrl+c,ctrl+v的操作的时候,你就得考虑你代码中肯定出现了很多缺陷,涉及模式中式叫bad smell, 我们看看spring是怎么处理的
37
加Spring进行改进(一) 在配置文件中配置一下,所有dao的实现中都 可以省略掉一些相同代码
配置一处,就能多出插装上这些事物session操作的代码 从而使编码如此简单 这里用到的就是spring的AOP插装技术
38
不用Spring(二) 在看看这个,每个service dao都有借口和实现 无穷无尽的接口和实现
39
不用Spring(二) 你一旦要用的话就得new一下,new到后来你对你的代码都没有自信了,太多new了,这个时候spring的IOC就产生作用了,不用你new了,spring给你完成
40
Spring 的AOP实现(一) Crossing cutting concern Aspect Advice JoinPoint
pointcut 最后来讲一个spring的AOP实现吧,这个是学spring关键功能之一,关键是掌握思想,思想有了,应用学起来很快,很多概念要掌握
41
Spring 的AOP实现(二) IUserManager.java IMySecurityManager.java
我们的应用场景是这样的,要在给所有add开头的函数都加上一个检查的操作,也就是看这里
42
Spring 的AOP实现(三) MySecurityManagerImpl.java
横切关注点是,刚才关注的那项功能叫横切关注点:我们关注的是所有add加上个验证功能,只有验证了才能add 这个类是对横切关注点的实现,叫做切面,正如你所看到的这个类 哪些方法要加入验证,需要统一一个标志,叫做切点,比如这里要在以…加入验证,你给个统一标志,所有这些都用这个表示 切点要加入的校验叫做通知 这样写好了那么就会在你所有的这些规定的方法前加入验证功能,只要写一处,所有都自动给你加上,就像前面我说的事物的功能给每个DAO的类都加上 Add*这个叫做连接点
43
Spring 主要用途 利用Spring来创建对象(JavaBean工厂) 利用Spring构建业务逻辑层 利用Spring进行事务处理
管理依赖关系 适应需求变更 利用Spring进行事务处理 这是spring的主要用途
44
Demo 类似淘宝电子商务网站的后台的一个产品分类功能模块
几点技巧: 包结构 增删改查的改进
45
Web 新技术带来另类开发体验 (一个企业级的web系统您还需要以下技术)
47
做一个企业级开发需要用到的技术 Extjs、Jquery、Struts Velocity & Freemaker Oscache DWR
Hibernate & Ibatis Spring JBPM Lucene & Compass Junit 第三方库
48
Web 新技术之 Extjs 演示:Sample与实际系统演示 优点: 缺点: 适用:OA,ERP,CRM,MIS(北大很多系统都 用它)
css样式不用自己写,其界面美观程度,一直在榜首 , UI组件非常丰富,直接使用即可 跨浏览器支持好,基本上所有浏览器都支持 分层分得好,后台代码可以是Java,C#,PHP 动画效果非常不错 缺点: 速度性能调优需要丰富经验 适用:OA,ERP,CRM,MIS(北大很多系统都 用它) 不适用于:门户,内容页面
49
Web 新技术之 Freemaker & OSCAche
例子:邮件群发 及 页面缓存 OSCACHE:主要做缓存,常应用于一些不变的 页面,或者变化非常少的页面 Freemaker:思想是:模板+数据=输出,常用 于静态化页面或者一些邮件等群发的内容。 每次读数据库,很花时间
50
Web 新技术之 DWR 演示:Online IDE & 反向Ajax演示 特点: 缺点:
直接可以在Javascript中调用后台java代码 无刷新页面切换 反向Ajax 缺点: 配置文件增多
51
Web 新技术之 JBPM 演示:实际系统中的JBPM应用 优点:
解耦系统流程:以往编写web 程序只能有一个 流程,现在流程可以自己定义(最终是一个 xml文件),具体流程处理可以写相应模块完 成。 适用范围: 项目流程比较多,流程复杂的项目 系统运行和维护、升级时,流程可能需要修改、调 整和跟踪、控制的项目
52
Web 新技术之 JPA 代码展示 优点: JDK规范 底层ORM框架自由切换 缺点: 有些ORM框架特性不支持
53
Web 新技术之 Lucene Compass
演示:搜索引擎&Eclipse Help 搜索引擎 = 网络爬虫+文本处理+信息检索(Lucene)
54
Web新技术之终极CODE GEN 演示:自主开发的一个辅助工具,目前还在完 善功能中。 优点: 缺点: 项目规范化 加速项目开发
不容易出错 减少一些黏贴复制操作 缺点: 需要为每个项目特别定制
55
Appfuse 框架集大成者 集成了框架:Hibernate、Struts、Spring、 DBUnit、Ant、Log4J、Struts Menu、Xdoclet 、SiteMesh、Velocity、JUnit、JSTL、 WebWork 优势:无需自己去配置集成,初学者可以阅读 缺点:可控性差,一般企业自己的项目不可能 采用其开发
56
总结 云计算和手机3G网络的提出使得越来越多程序软 件开始迁移到web中去,web中拥有无限的学术价 值和商业价值,掌握好web技术,您的机会也无限。 前面都说了 扩展一下,中间件可以带来更多好处,比如。。。比你自己写的会好很多很多,省了你很多事情,所以你要实现一个功能的时候,先上网看看有没有什么现成的jar包,框架之类的东西
Similar presentations