郭克华J2EE框架实战教学课件_23Spring和Struts的整合
系列七:整合Struts+Spring+HibernatePPT教学课件

系列七:整合Struts+Spring+Hibernate
课程安排
• 程序分层的设计思想 • 三个框架各司其职
– Hibenrate做持久层 – Struts做表现层 – Spring负责业务逻辑及其层次之间的整合
• 领域模型 • SSH开发用户登录实例
1-2
程序分层的设计思想
1-7
PPT精品课件
谢谢观看
Thank You or Watching
1-8
高内聚、低耦合的思想 持久层 业务层 表现层
1-3
程序分层的设计思想
• 持久层是对数据的管理,它直接与数据库打交道。Java的数 据持久化方式有多种,最常用的就是JDBC和ORM两种,所 以持久层往往包含了对象与关系的映射,保证领域模型的实 体与数据库的数据同步。它对上层提供的是数据访问接口, 业务逻辑层看到的往往是实体,而不是单独的数据,例如, 增加一个用户是saveUser(),删除一个用户是deleteUser() 。因此,持久层的对象往往被称为数据访问对象(DAO对象 ),也称为DAO层
• 顾名思义,业务层是专门用来写业务逻辑代码的。这一层的 代码是最敏感,最容易改动的,因为它实质上是由一个一个 的功能方法组成的,例如,用户登录功能,添加商品到购物 车功能等。业务层暴露给上层的是一个一个的接口,每一个 接口都代表了一组操作,例如,用户的增删查改4项操作
• 表现层的作用在于接收用户输入,调用业务逻辑层的方法, 根据处理结果做出相应的数据展示。听起来是不是有一点像 MVC呢,的确,表现层往往就是由一个MVC框架组成的,如 Struts。表现层存在的必要就在于它可以专门负责与用户打 交道,让数据的展示可以尽善尽美,而不必关系具体的业务 逻辑是如何实现的
郭克华J2EE框架实战教学课件_38设计模式(1)

Factory -工厂模式小结
客户类和工厂类分开.消费者任何时候需 要某种产品,只需向工厂请求即可.消费 者无须修改就可以接纳新产品. 缺点是当产品修改时,工厂类也要做相应 的修改.怎样克服?Spring可以克服 工厂模式主要应用于模块间调用时模块可 调用接口较多的情况;实例化一个对象可 能要进行复杂操作的情况 练习:有一个复杂的Frame,一个复杂的 Jframe,现在客户传入参数1,2来决定得到 Frame还是Jframe,要求客户不关心Frame 和Jframe的生成过程,怎么设计?
J
oy Java!
guokehua@
38设计模式(1)
郭克华J2EE框架实战教学视频
J 什么是模式
降低耦合性 增加灵活性
guokehua@
模式提供了一个解决方案,它是一种设计 方法,而不是一种编程技术
Spring提供了降低耦合性的一种工具 设计模式提供了常见应用中降低耦合性的设计 思想
郭克华J2EE框架实战教学视频
J 建造模式
guokehua@
在Windows里面打开计算器,如果要 你编写这个应用,你如何做? 写一个类,在构造函数里面将各个控 件加上去? 考虑如下问题 将数字键全部改颜色 将最左边四个键放在最右边 很明显,事情变得非常麻烦
郭克华J2EE框架实战教学视频
郭克华J2EE框架实战教学视频
J
guokehua@
工ቤተ መጻሕፍቲ ባይዱ模式
场景:在Action里面,我们要调用CustomerDAO的 login方法,传统情况下你用什么代码?
CustomerDAO cdao = new CustomerDAO(); cdao.login();
考虑以下情况:
郭克华J2EE框架实战教学视频
J2EE项目实训Struts框架技术——第1 章 Struts框架技术(第2部分)

第1 章Struts框架技术(第2/3部分)1.1.1Strust框架系统核心组件Struts的体系结构实现了MVC设计模式的概念,因此分别在模型(M)、视图(V)和控制器(C)三个方面提供了对应的技术支持组件,从而构成Strust框架系统中的核心功能组件。
1、Struts框架中与MVC设计模式相关的各个层组件1)Struts框架中各个层组件下图1.11所示为Struts框架所对应的MVC各个层中组件类之间的关系图,是对Web MVC 系统架构模式的标准实现。
从上图1.11中可以了解到Struts框架中的表示层中主要有下面的各个组件类——JSP 页面(包含表单)、表单数据的包装ActionForm组件和响应结果的JSP页面组件类;而在控制层中有前端控制器ActionServlet组件、ActionMapping组件、ActionForward组件和业务调度Action组件等;在模型层中没有提供基础性的功能组件,完全由开发者自己开发实现。
2)Strust框架的系统工作原理Struts框架的工作流程充分地体现了MVC系统的表示层和业务处理相互分离的特点,下图1.12所示为完成某个特定的请求处理的顺序图。
各逻辑层中的各个功能组件各司其职、但互相配合,并通过struts-config.xml文件中的各个配置项目来降低系统中的各个逻辑层之间的耦合性。
某个操作者用户在Web页面中假如发出/showInfo.do的Http表单请求,该请求将被前端控制器ActionServlet组件所接收;而ActionServlet组件将表单中的各个请求参数首先包装到ActionForm组件中,然后再根据在struts-config.xml文件中的<action-mapping>标签中所定义的Action 类的配置获得目标Action组件,并对该目标Action组件中的execute方法进行调用。
目标Action组件再从ActionForm组件中获得请求的参数、检查数据的合法性,并对具体业务功能组件中的业务方法进行调用,由业务功能方法完成特定的业务功能;业务方法返回执行后的结果,目标Action组件根据业务方法返回的结果再创建出包装目标页面的ActionForward组件,并将该ActionForward组件返回给前端控制器ActionServlet组件。
J2EE项目实训Struts框架技术——第10章 整合Struts和其他框架技术(第3部分)

第10章整合Struts和其他框架技术(第3/3部分)1.1整合Struts和JFreeChart框架在开发企业应用系统时,开发人员经常会遇到必须提供交互式图表的应用要求——也就是要求应用系统能够用比如饼图、柱形图或XY散点图等二维图形直观地描述和显示出数据。
但由于Web应用系统程序的用户界面不及桌面应用程序(Application)的图形用户界面(GUI)丰富和友好,这为实现Web方式下的图表技术带来了一定的复杂性。
而为了能够实现Web图表,一般可以采用下面的各种实现技术:1)使用Java Applet小程序同时利用Java本身对图形编程实现的支持来显示一个图表2)直接在Web服务器端生成好图表图片文件后,再发送到前端的浏览器中显示输出3)使用Java的图表引擎JFreeChart框架技术JFreeChart是Java平台中的一个开源图表绘制框架,可生成饼图、柱状图、散点图、时序图、甘特图等多种图表,并且可以产生PNG和JPEG等格式的图像输出文件。
基本上能够解决目前的企业应用系统中对图表方面的功能需求。
1.1.1开源JFreeChart图表框架1、开源JFreeChart图表框架1)JFreeChart图表框架技术简介JFreeChart框架是JFreeChart公司在开源网站上的一个开源项目,该公司目前的主要产品有如下的几种:1)JFreeReport:报表解决工具2)JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)3)JCommon:JFreeReport和JFreeChart的公共类库4)JFreeDesigner:JFreeReport的报表设计工具JFreeChart框架主要用来开发各种形式的二维图表,并且是目前比较好的Java图表解决方案、并且能够应用在J2EE Web应用环境(如Servlet、JSP和Applet)和J2SE 的Java 应用程序等环境。
Spring学习之Spring与Struts2的整合

Spring学习之Spring与Sturts2的整合●单个Struts2操作:通常web客户端访问web服务器要经过拦截器到达action,然后在action中进行一系列的操作,比如访问数据库,转发到目标页面:例如:定义一个TestAction extends ActionSourpport{}⏹需要在struts.xml文件中配置:<action name=”test” class=”TestAction的全限定名称”><result name=”success”>/test.jsp</result></action>⏹在web.xml文件中需要配置struts2的核心过滤器:<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2></filter-name><url-pattern>/*</url-pattern></filter-mapping>●单个Spring操作Spring和Struts2整合操作:由Spring定义TestAction:<bean id=”test”class=”TestAction类的全限定没名称”></bean>当然,在测试的时候,在Spring容器中获取一个对象需要先获取Spirng的IOC容器,然后在容器中获取目标对象首先获取Spring的IOC容器ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”);//然后获取TestAction对象TestAction ta = (TestAction) ac.getBean(“test”);然后就可以使用这个对象了,但是,在一个web应用中,只能使用一个Spring的IOC 容器,如何才能使web的多个业务层使用同一个IOC容器呢,这就需要在web.xml文件中配置Spring的初始化IOC容器的监听器:是在整个web应用中都可以使用<listener><listener-class>org.springframework.web.context.ContextLoaderListener></listener-class> </listener><context-param><param-name>contextConfigLoaction></param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value>这里是applicationContext.xml位置</context-param>在web.xml文件中配置Spring的初始化IOC容器的监听器,就可以使整个web应用中都共享一个Spring的IOC容器,这样使用注解就可以定义一个bean,如果一个对象需要属性,就使用@Resource给对象注入属性这样,如果需要属性的时候,就可以拿来直接使用:当然也可以这样使用:配置web.xml文件:<?xml version="1.0"encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><!-- 配置Spring的IOC初始化容器配置IOC初始化容器就是为了是整个web应用共用一个Sprig的IOC容器,因为整个容器只能有一个,并且可以在整个web应用中使用--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param>采用注解,在applicationContext.xml文件中只要配置组件扫描在TestAction中属于控制层:使用@Controller(“prototype”)多例形式package com.workit.acton;import javax.annotation.Resource;import javax.servlet.ServletContext;import org.apache.struts2.ServletActionContext;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import org.springframework.web.context.support.WebApplicationContextUtils;import com.opensymphony.xwork2.ActionSupport;import erService;@SuppressWarnings("serial")@Controller("testAction")@Scope("prototype")public class TestAction extends ActionSupport{@Resource //给TestAction注入userService属性private UserService userService; //前提是这个UserService类要交给Spring容器管理@Overridepublic String execute() throws Exception {System.out.println("TestAction.execute()");System.out.println("\n============================\n");System.out.println(userService);userService.printInfo();//获取ServletContextServletContext application = ServletActionContext.getServletContext();//获取Spring的ioc容器ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(application);System.out.println("在整个应用中使用Spring的IOC的容器");UserService us = (UserService) ac.getBean("userService");System.out.println(us);return "success";}}因为TestAction这个类已经交给Spring的ioc容器管理,所以在<action >中的class中不需要写类的全限定名。
J2EE项目实训Struts框架技术——第10章 整合Struts和其他框架技术(第1部分)

第10章整合Struts和其他框架技术(第1/3部分)1.1整合Struts和Spring 框架在Struts框架中通过提供ActionFrom组件类来封装与用户互动的数据元素,同时通过提供Action组件类来接受用户请求、并对请求进行处理;另外还可以利用ValidatorPlugIn 技术来对Struts框架进行扩展以提供可配置的表单验证技术的支持。
能否将Struts框架与Spring框架相互整合呢?1.1.1将Struts框架整合到Spring框架中1、为什么要整合Struts 和Spring框架1)将Struts框架与Spring 框架相互整合能够给Struts应用带来多方面的优点1)首先,Spring 框架提供控制反转(IoC)技术进行对象的生命周期的管理、并倡导由容器为应用系统提供基础功能服务,从而可以降低应用系统在开发过程中所涉及的复杂性,提高系统的性能和可测试性。
2)其次,Spring 框架中还提供了面向切面编程技术(AOP)的支持和实现。
一旦将两者相互整合后,不仅可以在Struts框架中应用IoC技术,也还可以将Spring AOP有关的各种拦截器组件技术应用在Struts框架的应用系统中。
3)Spring MVC框架组件对控制器的请求配置相对比较复杂,同时表示层也没有提供丰富和完整的标签库技术的支持,而Struts框架则能够弥补这些在表示层中的不足。
因此,有必要将两者相互整合,从而能够充分地发挥各自的技术优势和特性。
2)能够适应开发团队的目前技术水平从而减少技术培训的成本因为在目前的企业应用开发中,熟悉Struts框架的人员相对比Spring 框架的人员要多,这在组建开发团队时比较容易、同时也降低了人员的成本;另外,这样的系统设计也有利于人员的分工,不同技术层次和特长的人员可以完成系统中的不同开发任务。
3)能够充分发挥各种开源框架的优点2、可以采用三种方法实现将Struts 与Spring 框架相互整合每种整合实现技术都有自己的优点和应用场合,通过掌握这三种相互整合的实现技术都能够使读者加深对 Struts框架和 Spring 框架各自的技术及具体应用方面的理解。
Struts2 +Spring +Hibernate三大框架整合开发技术精讲培训教学课程

1.1Struts2 +Spring +Hibernate三大框架整合开发技术精讲培训教学课程1、为什么推出此课程应用开放源码技术构建灵活健壮的轻量级架构。
更有效地应用标准J2EE组件和J2EE 服务;最后建立一个支持可伸缩、灵活、可扩展、可个性化的J2EE架构的应用系统。
本课程主要讲授J2EE平台中目前比较主流的轻量级开源框架技术及应用,主要包括J2EE Web和表示层的Struts/Struts2、应用层Spring和数据持久层中的Hibernate框架等内容。
2、培训对象具备Java语言基础、J2EE Web开发编程技术,有两年以上软件开发项目实践经验,从事软件开发或软件管理的人员:软件项目经理、软件开发经理、软件设计师、软件开发员。
3、教学特色(1)授课方式采用学员人手一机,采用“做中学和学中做”的教学,以保证最佳的学习效果。
(2)案例教学:教学过程中辅以大量的教学案例,循序渐进地引导学员迅速掌握相应的知识和技能。
(3)注重实用:任课教师具备多年的软件开发经验,他们不仅精通所讲授的课程有关的技术及知识,而且具备丰富的项目经验,在教学的过程中会将自己的项目经验、心得体会、错误处理的方法等传递给学员。
(4)把握J2EE多层体系架构,重点讲解J2EE Web/轻量级开源框架技术在实际应用开发中所涉及的各种开发技术等方面的知识。
4、课程简介及培训目标本课程结束后,学员应能够掌握J2EE的技术体系结构、同时也能够系统地掌握J2EE Web及轻量级开源框架技术,能使用J2EE平台技术开发多层架构的Web应用系统及典型的MIS应用系统。
从而使学员更深入地掌握J2EE Web轻量级服务器的应用开发技术以最终编程实现多层、松耦合和可重用的Web应用组件,最后建立一个支持可伸缩、灵活、可扩展、可个性化和支持国际化的J2EE架构的Web应用系统。
5、培训内容下面的各个课程项目只是一个计划,实际上课时可根据具体学员的基知识础进行适当地调整,以便达到最佳的教学效果。
J2EE项目实训Struts框架技术——第10章 整合Struts和其他框架技术(第2部分)

第10章整合Struts和其他框架技术(第2/3部分)1.1整合Struts和OSCache框架1.1.1Web表示层的缓存技术1、利用高速缓存页面技术提高系统响应的速度1)在应用系统页面中一般包括有固定的和变化的两部分内容由于在应用系统的页面中总有一些信息是相对固定的,而另外一些信息是经常变化的(随着时间、不同的访问者以及不同操作方式等)。
为了能够提高系统中页面的响应速度,此时开发人员应该使用静态的HTML标签来描述或者存储页面中那些相对固定不变化的显示内容。
这样在客户端的浏览器中就可以对它们进行高速缓存,不同的客户或者同一个客户多次访问这些页面内容时,系统只需要更新变化的部分而减少返回的总页面内容的数据量,也就相应地能够提高访问时的响应速度。
2)缓存(Cache)是一种用于提高系统响应速度和改善系统运行性能的技术尤其是在Web应用系统中,通过缓存系统中输出的页面内容,可以明显地提高页面在请求响应时的速度。
因为Web缓存技术是将应用系统中需要频繁访问的Web页面内容保存在客户端程序所在的系统内存中。
当用户再次访问这些页面内容对象时,由于直接从客户端的内存中获取,也就能够相应地提高页面响应的性能。
3)使用缓冲技术可以大大地提高系统的整体响应能力在应用系统运行过程中,需要经常重复地访问相同的数据或者重复地创建相同的对象,而这些数据来自数据库或者文件系统,为了能够获得这些数据也就需要频繁地访问数据库或文件系统;而对象的创建和销毁也会造成系统的性能损耗。
因此,应该要避免重复地进行对象的创建和销毁而带来的系统开销,减少访问数据库以及文件系统的次数,也就能够提高系统的响应能力。
这只需要将那些频繁使用的对象或者数据保存在缓存中,当然就能大幅度地提高应用系统的性能。
2、为什么要应用高速缓存页面技术1)页面中的内容或者部分内容不会发生改变在Web应用系统的开发中,系统中需要处理的某些数据在短时间内是不会发生变化的,但是在一个相对长的时间中,它却可能是动态增加或者减少的——比如在某个网上商城系统中的商品内容,可能在短时间内不会发生变化或者对不同的浏览者而言也都是相同的商品内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
郭克华J2EE框架实战教学视频
J
oy Java!
guokehua@
扩展方法2
整合点在哪里? Struts的Action中,调用了UserDAO,我们 希望Action和UserDAO的耦合性降低,你 想采用什么办法? 利用Spring框架,将Spring框架的配置文 件配置好,然后让Action来读. 我们更加希望自动注入. 最直观的想法是在配置文件里面配置 Action!!
郭克华J2EE框架实战教学视频
J
oy Java! 1,2整合
guokehua@
Spring
郭克华J2EE框架实战教学视频
J
oy Java! 3,4整合
guokehua@
org.springframework.we b.struts.DelegatingAct ionProxy,Spring
J
oy Java!
guokehua@
总结:ApplicationContext
ApplicationContext主要是用于查找bean,使 用getBean的方法返回容器中实例化的对象. 在网站的情况下怎么办? 通过WebApplicationContext WebApplicationContext是ApplicationContext 的子接口
郭克华J2EE框架实战教学视频
பைடு நூலகம்
�
郭克华J2EE框架实战教学视频
J
oy Java!
guokehua@
WebContext:Spring WEB
(1)建立一个Web项目,在web.xml中加入: <servlet> <servlet-name>context</servlet-name> <servlet-class> org.springframework.web.context.ContextLoaderServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> 这样,系统自动读取/WEB-INF/applicationContext.xml,如果自己 定义文件名,则还需要增加: <context-param> <param-name>contextConfigLocation</param-name> <param-value>/文件路径</param-value> </context-param> 通过 WebApplicationContextUtils.getWebApplicationContext( application) 得到Bean
郭克华J2EE框架实战教学视频
J
oy Java!
guokehua@
扩展方法1
让Action具有Spring的一些功能: 让Action继承: – org.springframework.web.struts. ActionSupport – org.springframework.web.struts.DispatchActionSupport – org.springframework.web.struts.MappingDispatchActionSupport – org.springframework.web.struts.LookupDispatchActionSupport 它们有一个共同的方法: protected WebApplicationContext getWebApplicationContext()
郭克华J2EE框架实战教学视频
J
oy Java!
guokehua@
项目实例:Struts+Spring
3:编写applicationContext.xml <beans> <bean name="/query" class="class"> 你可以在这里通过属性注入任何东西 </bean> </beans> Struts内Action是单态,以多线程运行请求,代价 是:线程的不安全性,可以通过Spring控制Action 的单态性,非单态,类似CGI,代价:内存消耗
郭克华J2EE框架实战教学视频
J
oy Java!
guokehua@
原理
将Action看作Spring里面的一个Bean 首先将提交用Spring截获(到达 ActionServlet之后,生成Action之前),然 后由Spring生成Action对象,这样Action 类就成了Spring里面的一个JavaBean 此时,这个Action可以被动态注入
郭克华J2EE框架实战教学视频
J
oy Java!
guokehua@
项目实例:Struts+Spring作模糊查询
1:建立Struts工程,要求导入Spring库,建立ActionForm,jsp 将Spring作为插件载入到Struts:struts-config.xml中增加如下部分 <plug-in className="org.springframework.web.struts.Context LoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" /> </plug-in> 2:将action的type属性改动:保证提交的内容能被Spring截获 type="org.springframework.web.struts.Delegating ActionProxy" path= "/query" 增加转发
郭克华J2EE框架实战教学视频
J
oy Java! 另一种方法:用Listener接口(Servlet2.3以上使用)
guokehua@
(1)建立一个Web项目,在web.xml中加入: <context-param> <param-name>contextConfigLocation</ param -name> <param-value>路径</param-value> </context-param > <listener> <listenerclass>org.springframework.web.context.ContextLoderLi stener</listener-class> </listener> 通过 WebApplicationContextUtils.getWebApplicationContext( application) 得到Bean
J
oy Java!
guokehua@
23Spring和Struts的整合
郭克华J2EE框架实战教学视频
J
oy Java!
guokehua@
场景
Struts登陆,调用Dao,,要求Dao内能够 显示登陆的信息
Struts
Dao
DB
郭克华J2EE框架实战教学视频