SSH(Struts+Spring+Hibernate)三层架构.doc_第1页
SSH(Struts+Spring+Hibernate)三层架构.doc_第2页
SSH(Struts+Spring+Hibernate)三层架构.doc_第3页
SSH(Struts+Spring+Hibernate)三层架构.doc_第4页
SSH(Struts+Spring+Hibernate)三层架构.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

目录目录1一、SSH整体介绍21. 简介2(1)Struts用于表现层,负责页面数据提取,页面动作响应。3(2)Spring是一种轻量级的框架模型,主要负责业务逻辑层的对象创建,表现层的Action的创建,以及持久层的DAO的创建。3(3)Hibernate负责把内存中的数据对象保存到数据库中。32. 框架集成说明31)Struts与Spring的集成32)Spring与Hibernate的集成33. 程序的包结构41)表现层的类包42)持久层的类包43)业务层的类包4二、核心的配置文件的说明:51. Web.xml文件工程初始化配置文件51)Servlet配置52)init-param设置63)servlet-mapping配置74)Spring配置文件配置75)Spring的Bean工厂配置76)Filter配置87)欢迎页面配置92. struts-config.xmlStruts的配置文件9(1)Form的配置9(2)Action的配置9(3)全局异常处理类配置10(4)全局转发配置10(5)action配置10(6)资源文件配置113. applicationContext-common.xmlSpring公共配置文件11(1)Session工厂配置11(2)事务配置124. applicationContext-beans.xmlSpring中Bean的配置文件125. hibernate.cfg.xmlHibernate的配置文件13(1)Hibernate中Session工厂的配置13(2)hbm.xml配置文件14(3)DAO实现类说明15三、Demo实例说明151、demo.jsp:152、addRate.jsp163、rateList.jsp164、rateinfoAction175、rateinfoAction 的配置(struts-config.xml)176、配置spring文件187、比例列表(rateList.jsp):20一、SSH整体介绍1. 简介本Demo程序采用的是SSH(Struts+Spring+Hibernate)三层架构。(1)Struts用于表现层,负责页面数据提取,页面动作响应。(2)Spring是一种轻量级的框架模型,主要负责业务逻辑层的对象创建,表现层的Action的创建,以及持久层的DAO的创建。(3)Hibernate负责把内存中的数据对象保存到数据库中。2. 框架集成说明在SSH三层架构中,主要用Struts来实现对页面的响应及页面跳转。当用户向服务器发送某一个请求,这个请求会被服务器(Tomcat)接收到,服务器会根据请求的内容,将这个请求发送给相应的Servlet实例进行处理。Servlet会根据其内容,去生成相应的Action实例。本程序中,Struts将Action的创建工作交给了Spring的代理类来完成,创建这个实例后,将这个实例注入,由Struts调用Action中的相应方法。Action中可以配置一个或多个Service对象,Action调用Service中的方法进行业务处理。Service中通常会有一个或多个DAO的对象,DAO继承了Hibernate的接口,用来处理数据库的操作。而Action,Service,DAO的创建与注入,都是由Spring的Bean工厂来实现的。1) Struts与Spring的集成 在Web.xml中配置Struts的配置文件 在Web.xml中配置Spring的配置文件,Bean工厂及过滤器 在Struts配置文件中集成Spring的代理类 在Spring配置文件中配置Action2) Spring与Hibernate的集成 在Web.xml中配置Hibernate延迟过滤器配置 在Web.xml中配置Spring的配置文件,Bean工厂及过滤器 在Spring配置文件中配置DAO 在Hibernate配置文件中配置数据库信息 在DAO的实现类中继承HibernateDaoSupport类3. 程序的包结构1) 表现层的类包com.ra.web.actionform与com.ra.web.action这两个包,分别用来存放表现层的Form与Action。2) 持久层的类包此文件夹下放置模型类,以及对应的Hibernate配置文件。com.ra.dao包为DAO层的接口类,com.ra.dao.Impl包用来放对应的dao的接口实现类。3) 业务层的类包这个包用来放置相应的Service,用来处理相应的业务逻辑。二、核心的配置文件的说明:1. Web.xml文件工程初始化配置文件1) Servlet配置在WebRoot文件下的Web.xml文件,是WebProject工程配置文件,Tomcat服务器在启动时,会自动加载所有工程中的Web.xml文件。服务器会根据Web.xml中的配置信息,生成相应的Servlet的实例对象,用来处理客户端发送来的请求。本程序的Servlet是使用的Struts中的ActionServlet,它是继承的HttpServlet类。ActionServlet支持多线程,目前的Struts框架只允许在应用中配置一个ActionServlet。它是Struts中的控制器,系统的指令由其中转,它从struts-config.xml中读取配置信息,并在服务器后台自动启动一个线程。2) init-param设置Init-param设置ActionServlet运行参数,对Servlet的运行环境进行初始化配置。实际上param-name的值是与ActionServlet中的属性相对应的。ActionServlet在创建时会调用init函数,函数会用配置文件中param-value值来设置相应的属性。A)Struts配置文件设置以相对路径的方式指明Struts应用程序的配置文件位置,在ActionServlet中默认值为/WEB-INF/struts-config.xml,所以如果是默认情况,在这里也可以不用配置。如果有多个配置文件可以用逗号分隔符。B)debug设置设置Servlet的debug级别,控制日志记录的详细程序。默认为0,记录相对最少的日志信息。C)detail设置设置Digester的debug级别,Digester是Struts框架所使用的用来解析xml配置文件的一个框架,通过该设置,可以查看不同详细等级的解析日志。默认为0,记录相对最少的日志信息。D)load-on-startup设置这个标记指示Web应用服务器在启动时加载这个Servlet(实例化并调用init方法),标记的内容必须使用一个整数指定Servlet的加载顺序。如果这个整数是负值,或者这个值没有出现,那么窗口任意选择Servlet加载。如果这个整数大于等于零以,那么窗口必须按照部署的顺序加载他们。容器必须保证,拥有小的load-on-startup值的Servlet必须先被加载,如果Servlet有相同的load-on-startup值,那么,容器将自动选择这些Servlet的加载顺序。3) servlet-mapping配置这里*是通配符,表示服务器只要接收到的形如*.do的请求,就会把这个请求交由名为action的servlet实例来处理。请求的形式可以由开发者自己定义,Struts中通常都用do来做为后缀。而此处的servlet-name与上面servlet定义中的servlet-name是相对应的。4) Spring配置文件配置context-param是application范围内的参数,存放在servletcontext中。此所设定的参数,在JSP内页中可以使用$initParam.param_name来取得,若在Servlet可以使用String param_name = getServletContext().getInitParamter(“param_name”);来取得。在此程序中,参数contextConfigLocation用来定义要装入的Spring配置文件。如果想装入多个配置文件,可以在标记中用逗号作为分隔符。默认情况Spring的配置文件为applicationContext.xml。此程序是因为改变了spring配置文件名字,所以才需要在Web.xml中配置。如果是默认情况则不需要配置。5) Spring的Bean工厂配置listener元素用来定义Listerner接口,ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。它实现了ServletContextListener这个接口,在Web.xml配置这个监听器,启动容器时,就会默认执行它的实现的方法,加载相应的Spring类,以使当对象调用时,实现其相应的注入。这是一个Spring的重要类,在ContextLoaderListener中关联了ContextLoader类。所以整个加载配置过程由ContextLoader来完成,它创建的是XmlWebApplicationContext这样一个类,这个类实现了BeanFactory接口,所以Spring中的所有的bean都由这个类来创建。6) Filter配置filter元素用来声明filter的相关设定。过滤器就是一个Servlet,只是比较特殊而已,可以用它来对客户端请求以及发出的响应进行部分的过滤操作。filter-name是过滤器的名称,filter-class为对应的类。filter-mapping元素的两个主要子元素为filter-name与url-pattern,用来定义filter所对应的url。”/*” 形如这样的url都会发送给相应的过滤器。A)Spring中文乱码过滤器配置在web开发中常常遇到中文乱码的问题,解决的方案常常是在Web.xml中配置一个过滤器,Spring为我们的web开发提供了一个过滤器,可以解决中文乱码的问题。B)Hibernate延迟过滤器配置Hibernate的session的生命周期横跨Servlet和Jsp,当我们的Jsp需要用到某个延迟属性的时候,发现session已经关闭了,就会发生延迟加载例外。这段配置就是使用Spring中的类解决hibernate因session关闭导致的延迟加载例外问题。7) 欢迎页面配置指定首先访问的页面,当客户访问Web应用时,如果仅仅给出Web应用的RootUrl,没有指定具体文件名,Web容器会自动调用Web应用的欢迎文件。2. struts-config.xmlStruts的配置文件(1)Form的配置form-bean用来映射页面上的某个之中的数据,对应的FormBean类一般是继承ActionForm类。(2)Action的配置其中,name要与对应的form中的字段名相同。容器在创建对应的Form的实例时,会将对应页面中同名的字段值,通过Set方法赋给Form。所以Form中的字段一定要有对应的SetXXX方法。否则就无法赋值。(3)全局异常处理类配置用来配置全局的异常处理类。(4)全局转发配置global-forwards用于配置全局转发,struts首先会在元素中找对应的,若找不到,则到全局转发配置中找。它包含0个或多个元素,格式如下所示:。元素还有一个redirect属性,其默认值为false,如果redirect设为true的时候,则用HttpServletResponse.sendRedirect()方法,否则用RequestDispatcher.forward()方法,缺省为false。sendRedirect产生新的请求与响应,相当于在页面中重新输入一个URL,只是自动完成而已,forward是共用同一请求,浏览器中的URL不变。(5)action配置该元素用于将Action元素定义到ActionServlet类中,它含有0到多个元素,其格式如下:此程序中,action的对应类,为Spring提供的一个Struts的代理类。因此,Struts中的Action将由Spring来创建,而不是Struts。本程序中Spring配置action的文件为:applicationContext-actions.xml。可以看到,在Spring的配置文件中,bean的那么与Struts配置文件中Action的path是相对应的。那么程序运行中,此Action的对应类实际上为,com.ra.web.acton.RateinfoAction。可以看到RateinfoAction这个类实际上继承了DispatchAction类,所以Action的转发机制依然还是用的Struts提供的方法。Spring只是负责创建一个RateinfoAction的实例而已。这是一种松散,低耦合的结合方式。(6)资源文件配置该元素用来定义资源文件,能够为ActionServlet同时指定多个xml配置文件,文件之间以逗号分隔,把ApplicationResources放到struts-config.xml就可以定义多个了。3. applicationContext-common.xmlSpring公共配置文件(1)Session工厂配置session工厂节点,将Hibernate的session工厂注入到Spring的配置文件中,其中configLocation定义了Hibernate配置文件名。(2)事务配置Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的trycatchfinally代码。定义事务管理器,设置事务代理类,并将session工厂对象引入事务中。REQUIRED:业务方法需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么 就加入该事务,否则自己创建一个新的事务。这是Spring默认的传播行为。Save*表示save开头的方法上都使用这种事务。指定那些类的哪些方法参与事务。4. applicationContext-beans.xmlSpring中Bean的配置文件Id为bean的名称,其它的bean可以通过这个名称引用它。Class为该bean对应的类。为类中的属性,如果在此配置了,那么对应的类中这必须有相应的属性。其中name与类中的属性字段名相同,类中一定要有相应的Set方法。ref为引用其它的bean。5. hibernate.cfg.xmlHibernate的配置文件(1)Hibernate中Session工厂的配置A)连接字符串数据库连接url定义。Localhost处是设置ip地址,端口默认为3306,localhost表示是本地的IP。ReverseAuction为数据库名,useUnicode表示字符使用unicode码。characterEncoding为字符编码格式。B)数据库登录名与密码C)加载hibernate自动更新数据库结构D)驱动配置mysql数据库对应的jdbc驱动类。一个Hibernate Dialect类允许Hibernate针对特定的关系数据库生成优化的SQL.E)资源文件配置加入资源文件,这里把对应于model下的hbm.xml文件加入。通常一个模型类都会对应于一个hbm.xml文件,一个文件对应于一个数据库中的表。(2)hbm.xml配置文件其中,catalog对应于数据库,table对应于表名,而class则对应于相应的模型类。表示主键字段,表示其它字段,其中的name对应于类中的属性名,而column中的name则对应于数据库中的字段名。A)字段为自增类型B)字段非空C)有效位数配置Precision表示数字中的有效位数,而scale表示小数点后的有效位数。D)字段长度E)字段的类型(3)DAO实现类说明在对应的Dao类中,要继承HibernateDaoSupport类,因为在这个类中有一个sessionFactory属性,所以在配置继承了Hibernate的Dao类中,一定要添加sessionFactory属性。三、Demo实例说明以下我们用对换比例添加与列表的例子来描述整个流程的开发过程:1、demo.jsp:demo添加比例比例列表说明:包含“添加比例”和“比例列表”2个链接。第一个链接链接到addRate.jsp第二个链接向rateInfoAction这个servlet发送请求。command=getAll会调用rateinfoAction 对象的getAll方法.2、addRate.jspaddRate添加比例scope:rate:bz:说明:在该页面中,有一个表单,action=rateinfoAction.do?command=save 表示由rateinfoAction这个servlet来处理请求。并调用rateinfoAction 中的save方法.3、rateList.jsprateList比例列表idscopetimeratebz $rate.id $rate.scope$rate.time$rate.rate$rate.bz 说明这里用到了JSTL的标签,其中用到了一个 forEach 循环,将rateList中的每一个对象赋予rate,然后取得rate对象的属性值在页面中显示出来。(如果对JSTL不懂,可以看看相关资料)4、rateinfoAction具体代码可以在工程里面看,但是这里说明一点,一定要有set方法,用于spring的依赖注入.RateinfoService rateService;public void setRateService(RateinfoService rateService) this.rateService = rateService;5、rateinfoAction 的配置(struts-config.xml)在struts-config-xml 文件中配置RateinfoActionPath是指页面中请求的路径command参数指定调用RateinfoAction中的save方法type属性设置成“org.springframework.web.struts.DelegatingActionProxy”,此类由spring提供。Name属性配置的是由哪个表单接受数据.这里页面上的数据由rateForm收集。配置如下(struts-config-xml):Name属性是form的标识,这里的name属性值要和上面action配置的 name属性值一致.type指

温馨提示

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

评论

0/150

提交评论