教学材料《JSP设计与开发》-第9章 Spring框架应用_第1页
教学材料《JSP设计与开发》-第9章 Spring框架应用_第2页
教学材料《JSP设计与开发》-第9章 Spring框架应用_第3页
教学材料《JSP设计与开发》-第9章 Spring框架应用_第4页
教学材料《JSP设计与开发》-第9章 Spring框架应用_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1第9章Spring框架应用学习要点Spring的设计模式Spring的控制反转原理Spring实现MVC的机制MyEclipse中的Spring开发Spring的典型应用29.1Spring简介Spring是一种优秀的轻量级企业应用开发框架,能够大大简化企业应用开发的复杂性。Spring通过控制反转(IoC)和面向切面变成(AOP)这两种核心技术,统一了对象的配置、查找和生命周期的管理,从而实现了业务层中不同基础服务的分离,简化了企业应用开发的复杂性。39.1.1Spring的起源和背景传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现WriteOnce及RunAnywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而与它们无缝地整合。总结起来,Spring有如下优点:低侵入式设计,代码污染极低独立于各种应用服务器,可以真正实现WriteOnce,RunAnywhere的承诺Spring的DI机制降低了业务对象替换的复杂性Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。49.1.2Spring的组成模块59.1.3案例一:应用MyEclipse搭建Spring开发环境

【案例功能】在MyEclipse中运行第一个Spring实例【案例目标】学习在MyEclipse中搭建Spring开发环境【案例要点】Spring框架的搭建、Spring实例的开发步骤【案例步骤】(1)创建第9章源码文件夹ch09。(2)为项目添加Spring属性(3)在ch09中编写JavaBean源代码文件ShowMessage.java。(4)在src中编写配置文件applicationContext.xml。(5)在ch09中编写测试程序MyTest.java。(6)运行测试程序结果如图9-5所示。69.2Spring的控制反转Spring框架本身提供了很多功能,这些功能之所以能组合成为一个整体,就是因为使用了控制反转技术(IoC:InversionofControl)。控制反转是Spring的核心技术之一,其实质就是由容器控制程序之间的关系,而不是在程序中直接使用代码控制。控制权由程序代码转移到外部容器,控制权的转移就是所谓的反转。由于程序组件之间的依赖关系是由容器控制的,在程序运行期间,由容器动态地将依赖关系注入到组件之中,因此控制反转还有一种称呼叫依赖注入(DI:DependencyInjection)。79.2.1理解反转控制控制反转是Spring的核心技术之一,在任何Java应用系统中,要实现具体的业务逻辑,都需要很多Java类的协同工作才能完成。程序运行期间,每个Java对象必须在得到所需调用的对象之后才能继续运行,这种对象之间的关系就是依赖。在传统的应用系统中,这种依赖关系是通过在代码中调用其他类来完成的,这样就增加了耦合度,从而给系统带来种种隐患;而在IoC中,对象之间的依赖关系在统一的配置文件中进行描述,不会在程序中用代码直接调用其他类的对象。在程序运行期间,IoC容器负责把对象之间的依赖关系注入,使各个对象之间协同工作,从而实现系统的功能。不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。89.2.2Spring中注入依赖的方法赋值注入在JavaBean的规范中,可以使用属性对应的getter和setter方法来获得和设置Bean的属性值,这种方法在普通的JavaBean中已经被大量使用。同样,在Spring中,每个对象在配置文件中都是以<bean>的形式出现的,而子元素<property>则指明了使用JavaBean的setter方法来注入值。在<property>中可以定义要配置的属性及要注入的值,可以给属性注入任何类型的值,可以是基本的Java数据类型,也可以是其他的Bean对象。构造器注入在使用赋值注入方式时,可以通过<property>元素注入属性的值。构造器注入的方法与这基本类似,不同指出在于,使用构造器注入的时候,是通过<bean>元素的子元素<constructor-arg>来制定实例化Bean的时候需要注入的参数,同时在Bean中需要提供对应的构造器,而不是提供属性的setter和getter方法。99.2.3案例二:使用赋值注入依赖存取学生信息

【案例功能】存取学生信息【案例目标】掌握赋值注入对象之间依赖关系的方法【案例要点】JavaBean对象属性的注入、集合类型属性的注入【案例步骤】在ch09目录下编写School.java作为Student类的一个成员属性。在ch09目录下编写JavaBean:Student.java。在src中编写配置文件applicationContext.xml。在ch09中编写测试程序StudentTest.java。109.2.3案例三:使用构造器注入依赖存取学生信息

【案例功能】存取学生信息【案例目标】掌握构造器注入对象之间依赖关系的方法【案例要点】使用<constructor-arg>标签进行构造器诸如以来【案例步骤】在ch09目录下编写JavaBean:StudentC.java。在src中编写配置文件applicationContext.xml。119.2.4两种注入方式的对比赋值注入的优点:与传统的JavaBean的写法更相似,程序员更容易理解、接受,通过setter方式设定依赖关系显得更加直观、明显;对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致死你功能下降。而使用赋值注入,则避免这些问题;尤其在某些属性可选的情况下,多参数的构造器更加笨拙。构造注入的优点:构造注入可以再构造器中决定依赖关系的注入顺序,优先依赖的优先注入;对于依赖关系无须变化的Bean,构造注入更有用处;因为没有setter方法,所有的依赖关系全部在构造器内设定,因此,不用担心后续代码对依赖关系的破坏。依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则;129.3在Spring中实现MVC在Spring中可以非常方便地与其他MVC框架集成,例如Struts、WebWork等都可以集成在Spring中,而且在Spring中也实现了自身的MVC框架。在Spring的MVC框架中,可以透明地将Web参数绑定到业务对象中,同时在Spring中还可以使用现存的多种视图技术,Spring解决了传统MVC框架中的不足。139.3.1Spring中MVC的实现原理149.3.2案例四:在Spring中实现简单MVC

【案例功能】实现页面信息输出【案例目标】掌握在Spring框架下实现MVC的流程【案例要点】使用DispatcherServlet配置文件把用户请求映射到控制器,并配置视图解析器把结果展示给用户在web.xml中配置DispatcherServlet。在ch09目录下编写请求控制器IndexController.java。在WEB-INF中创建配置文件springMVC-servlet.xml在WebRoot中创建index.jsp模板文件。部署并启动Tomcat服务器后,在浏览器地址栏输入http://localhost:8080/JSPClass/index.do,运行结果如图9-8所示。159.4Spring中的数据库操作数据库操作是Spring独具特色的地方,在Spring的数据库操作中,不用再担心数据库资源释放的问题,Spring中提供了常用的数据库操作模板,用户可以专注于书写自己的数据库操作业务代码,而不再过多考虑数据库链接的取得与释放。169.4.1在Spring中配置数据源【源码】/WEB-INF/applicationContext.xml<beanid="dataSource"class="org.springframework.jdbc.datasource.DrivermanagerDataSource"> <propertyname="driverClassName"> <value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value> </property> <propertyname="url"> <value>jdbc:sqlserver://:1433;DatabaseName=ClassDB</value> </property> <propertyname="username"> <value>数据库登录名</value> </property> <propertyname="password"> <value>数据库登录密码</value> </property></bean><beanid="dbTest"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"> <reflocal="dataSource"/> </property></bean>179.4.2使用JdbcTemplate进行数据库的CRUD操作

创建好JdbcTemplate对象后就可以调用其中的方法对数据库进行CRUD(Create、Retrieve、Update、Delete,即对数据库的增、删、改、查)操作了。在设计中,一般都将对数据库的CRUD操作封装在DAO(DataAccessObject)对象中。189.4.2使用JdbcTemplate进行数据库的CRUD操作

使用JdbcTemplate对象向ClassDB数据库中的courses表插入数据:publicvoidadd(Stringname,intmark,Stringdep, HttpServletRequestrequest)throwsException{Stringsql="insertintocourses(name,mark,dep)values('"+name+"','"+mark+"','"+dep+"')";ServletContextservletContext=request.getSession().getServletContext();ApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(servletContext);JdbcTemplatetemplate=(JdbcTemplate)ctx.getBean("dbTest");template.execute(sql);}199.4.2使用JdbcTemplate进行数据库的CRUD操作

使用JdbcTemplate对象删除ClassDB数据库中的courses表中指定数据:publicvoiddelete(intid,HttpServletRequestrequest)throwsException{ Stringsql="deletefromcourseswhereid="; ServletContextservletContext=request.getSession().getServletContext(); ApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(servletContext); JdbcTemplatetemplate=(JdbcTemplate)ctx.getBean("dbTest"); template.execute(sql+id); }209.4.2使用JdbcTemplate进行数据库的CRUD操作

使用JdbcTemplate对象修改ClassDB数据库中的courses表中指定数据:publicvoidupdate(intid,Stringname,intmark,Stringdep, HttpServletRequestrequest)throwsException{ServletContextservletContext=request.getSession().getServletContext();ApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(servletContext);JdbcTemplatetemplate=(JdbcTemplate)ctx.getBean("dbTest");Stringsql="updatecoursessetname=?,mark=?,dep=?whereid=?";template.update(sql,newObject[]{name,mark,dep,id});}219.4.2使用JdbcTemplate进行数据库的CRUD操作

使用JdbcTemplate对象罗列出ClassDB数据库中的courses表所有数据:publicListlistAllCourses(HttpServletRequestrequest)throwsException{ServletContextservletContext=request.getSession().getServletContext();ApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(servletContext); JdbcTemplatetemplate=(JdbcTemplate)ctx.getBean("dbTest"); finalList<CourseInfo>list=newArrayList<CourseInfo>(); template.query("select*fromcourses",newRowCallbackHandler(){ publicvoidprocessRow(ResultSetrs)throwsSQLException{ CourseInfocourseInfo=newCourseInfo(); courseInfo.setId(rs.getInt("id")); courseInfo.setName(rs.getString("name")); courseInfo.setMark(rs.getInt("mark")); courseInfo.setDep(rs.getString("dep")); list.add(courseInfo); } }); returnlist; }229.4.2使用JdbcTemplate进行数据库的CRUD操作

使用JdbcTemplate对象按课程代码查出ClassDB数据库中的courses表内数据:publicCourseInfofindById(intid,HttpServletRequestrequest) throwsException{ServletContextservletContext=request.getSession().getServletContext();ApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(servletContext); JdbcTemplatetemplate=(JdbcTemplate)ctx.getBean("dbTest"); finalCourseInfocourseinfo=newCourseInfo(); Stringsql="select*fromcourseswhereid=?"; finalObject[]params=newObject[]{id}; template.query(sql,params,newRowCallbackHandler(){ publicvoidprocessRow(ResultSetrs)throwsSQLException{ CourseInfocourseInfo=newCourseInfo(); courseInfo.setId(rs.getInt("id")); courseInfo.setName(rs.getString("name")); courseInfo.setMark(rs.getInt("mark")); courseInfo.setDep(rs.getString("dep")); } }); returnuserinfo; }239.4.2使用JdbcTemplate进行数据库的CRUD操作

使用JdbcTemplate对象按课程名称查出ClassDB数据库中的courses表内数据:publicListfindByName(Stringname,HttpServletRequestrequest) throwsException{ServletContextservletContext=request.getSession().getServletContext();ApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(servletContext); JdbcTemplatetemplate=(JdbcTemplate)ctx.getBean("dbTest"); finalList<CourseInfo>list=newArrayList<CourseInfo>(); Stringsql="select*fromcourseswherenamelike?"; finalObject[]params=newObject[]{"%"+name+"%"}; template.query(sql,params,newRowCallbackHandler(){ publicvoidprocessRow(ResultSetrs)throwsSQLException{ CourseInfocourseInfo=newCourseInfo

温馨提示

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

评论

0/150

提交评论