springHibernateStruts组建轻量级架构.docx

上传人:b****7 文档编号:8692075 上传时间:2023-02-01 格式:DOCX 页数:49 大小:49.17KB
下载 相关 举报
springHibernateStruts组建轻量级架构.docx_第1页
第1页 / 共49页
springHibernateStruts组建轻量级架构.docx_第2页
第2页 / 共49页
springHibernateStruts组建轻量级架构.docx_第3页
第3页 / 共49页
springHibernateStruts组建轻量级架构.docx_第4页
第4页 / 共49页
springHibernateStruts组建轻量级架构.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

springHibernateStruts组建轻量级架构.docx

《springHibernateStruts组建轻量级架构.docx》由会员分享,可在线阅读,更多相关《springHibernateStruts组建轻量级架构.docx(49页珍藏版)》请在冰豆网上搜索。

springHibernateStruts组建轻量级架构.docx

springHibernateStruts组建轻量级架构

spring、Hibernate、Struts组建轻量级架构

作者:

NetFetch日期:

2006-07-20

版本0.1版权©2005成湘均

--------------------------------------------------------------------------------

目录

前言

1.整体框架

1.1.UI层

1.2.业务层

1.3.数据持久层

1.4.域对象层

2.Struts

2.1.概述

2.2.快速入门

2.3.ActionForm

2.4.Action

2.5.客户端验证

3.springFramework

3.1.概述

3.2.为什么使用Spring

3.3.快速入门

3.4.搭建Web应用环境

3.5.SpringIOC

3.6.SpringAOP

4.hibernate

4.1.概述

4.2.为什么使用Hibernate

4.3.快速入门

4.4.工具的配合使用

4.4.1.生成影射文件

4.4.2.生成映射对象

4.4.3.根据映射对象生成映射文件

4.5.专用词

4.5.1.cascade(级联)

4.5.2.inverse(反转)

4.5.3.LazyLoading(延时装载)

4.6.一对一表关联操作

4.7.多对一表关联操作

4.8.一对多表关联操作

4.9.多对多表关联操作

4.10.与spring的结合使用

4.11.HibernateDAO

5.log4j

5.1.概述

5.2.快速入门

前言

在java的应用领域,有许多成熟的开源软件,利用它们一样可以打造优越、灵巧的应用框架,本文首先将先介绍所要构建的系统结构和借助的开源产品。

然后逐一讲解各开源软件的具体运用。

希望本文能给那些正在学习这些开源软件的同行提供参考。

续该文之后笔者将结合这些开源软件,借助实际项目,做更深入的应用讲解。

本文中涉及到的例子、源代码均经过本人调试,且正常运行的,但是不否定这其中有不合理的使用。

运行环境:

win2000adivanceserver+tomcat5.0.25+mysql-4.0.14-nt

第1章整体框架

笔者在项目中所搭建的架构参考了“MarkEagle”的《WiringYourWebApplicationwithOpenSourceJava》一文中所阐述的架构思想。

图1.1.架构图:

引用《WiringYourWebApplicationwithOpenSourceJava》一文

从架构图中可以看出系统分为四层:

UI层:

借助Struts实现

业务层:

借助SpringFramework进行业务组件的组装关联。

数据持久层:

借助Hibernate实现

域对象层:

将所有域对象划分在一个层面

为什么采用这样的四层架构?

通过成熟的开源产品实现各层,同自己编写代码实现,相比之下能缩短开发周期,且架构所用到的开源产品均有很广泛的用户群,经受过实践的考验,质量和性能更有保障。

层与层之间松散耦合,增加代码重用率。

各层分工明确,这样也利于团队的明确分工。

1.1.UI层

UI是UserInterface的缩写,这一层是面向用户的界面,是用户与系统之间交互的媒介。

如,用户在界面发送请求,系统接收请求,进行处理,然后通过界面将结果呈现于用户。

这一过程包括了用户动作、数据传递、界面显示。

大家熟悉的MVC模式就是将这三者分离,减少三者耦合。

我们在该层借助了Struts来实现:

用ActionForm类封装与用户互动的数据元素。

用Action类实现业务逻辑、动作处理、链接转向。

实现MVC中的C

借助Struts标签来完成数据呈现。

实现MVC中的V。

关于struts具体的应用请参考相关章节。

1.2.业务层

在实际的项目开发中,每个领域都会有自己独特的业务逻辑,正因为这样,致使项目中代码高度耦合,原本有可能被重用的代码或功能,因为与具体的业务逻辑绑定在一块而导致很难被重用。

因此我们将实现这些具体逻辑的代码抽取出来分为单独的一层,其目的是希望通过层,来降低它与系统其他部分的耦合度。

现实中世界是变化的,既然该层实现的是现实中具体的业务逻辑,那该层的实现代码不可避免的会发生变更。

怎样让该层适应最大的变化,做到最小的改动?

通常我们在编码的时候会尽量考虑到同一业务多种实现的兼容和可扩展的能力。

因此我们在该层借助了Spring,通过依赖注入、AOP应用、面向接口编程,来降低业务组件之间的耦合度,增强系统扩展性。

关于Spring的具体使用请参考相关章节。

1.3.数据持久层

开发中与数据库进行数据交互必不可少,通常我们归为CRUD(添加、读取、修改、删除),这些操作占据了系统开发中大部分的时间,同时我们还需要考虑与数据库交互的性能问题,如连接池、数据缓存等等。

因此该层实现我们借助了Hibernate。

Hibernate是一个ORM工具,它不仅仅是实现了数据库访问性能优化和与数据库交互的常用操作(CRUD),还将数据表与对象进行了关联,让我们可以脱离数据表,而直接针对对象来与数据库交互,我们不再需要用字符串去描述表中字段,不再需要一个个”+“号去组装Sql语句。

这使得编码中可书写性提高。

该层的具体实现,请参看Hibernate相关章节。

1.4.域对象层

该层应该说是ORM思想的产物,ORM用对象关联数据表,我们将这些对象的集合归为一个专门的层即DomainLayer。

域对象是各层之间数据通信的载体。

实际上域对象也是一个完完全全的业务对象,如User对象、Book对象。

通过对业务的对象化,这有利于业务逻辑的重用。

第2章Struts

2.1.概述

Struts是用于实现Web项目中UI层的开源产品,是MVC模式的经典实现案例。

它属于Apache组织中的开源产品之一,我们可以从官方网站http:

//struts.apache.org得到其所有资料及源码。

为什么使用Struts?

Struts将业务数据、页面显示、动作处理进行分离,这有利各部分的维护。

Struts采用FrontController模式来实现动作处理,让所有的动作请求都是经过一个统一入口,然后进行分发。

这样方便我们在入口中加入一些全局控制代码的实现,如安全控制、日志管理、国际化编码等。

通过Struts提供的ActionForm封装webform中的元素,使重用web表单成为可能。

借助StrutsValidator框架帮助完成web层的验证工作,通常情况下我们不用再去为每个web页面写其验证代码,只需通过配置即可实现。

这也减少了我们的开发量,由于验证代码的集中管理,也为维护带来便利。

2.2.快速入门

1、下载Struts,将其相关jar包引用到Web项目。

2、在web项目的web.xml中配置Action影射,将相应请求动作交给Struts提供的ActionServlet类进行统一控制。

例2.1.web.xml

 action

 org.apache.struts.action.ActionServlet

 

 config

 /WEB-INF/struts-config.xml

 

 

 debug

 2

 

 2

action

*.do

   

在web.xml中定义了所有带.do后缀的文件请求都会触发ActionServlet类。

在url-pattern节点可以灵活定义适合自身的映射表达式,如,对某个目录下请求的映射:

/myDirectory/*.do

在配置org.apache.struts.action.ActionServlet类时设置一些参数其含义如下:

config:

制定Struts配置文件路径,默认为/WEB-INF/struts-config.xml

debug:

设定日志记录级别。

3、在web.xml配置所需要用到的的Struts标签文件

例2.2.web.xml

struts-bean.tld

/WEB-INF/struts-bean.tld

struts-html.tld

/WEB-INF/struts-html.tld

struts-logic.tld

/WEB-INF/struts-logic.tld

struts-template.tld

/WEB-INF/struts-template.tld

struts-tiles.tld

/WEB-INF/struts-tiles.tld

c.tld

/WEB-INF/c.tld

Validate.tld

/WEB-INF/Validate.tld

   

4、建立ActionForm、Action。

例2.3.struts-config.xml

 

 

  

   

  

 

 

  

  scope="request"input="/HelloWorld.jsp"validate="false"/>

   

例2.4.HelloWorldForm.java

publicclassHelloWorldFormextendsActionForm{

 privateStringname=null;  

 publicStringgetName() {

  returnthis.name;

 }

 publicvoidsetName(Stringname) {

  this.name=name;

 }

}

      

例2.5.HelloWorldAction.java

publicclassHelloWorldActionextendsAction{

 publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,

   HttpServletResponseresponse)throwsException {

  HelloWorldFormloginForm=(HelloWorldForm)form;

  Stringname=loginForm.getName();

  request.setAttribute("HelloWorldForm",loginForm);

  returnmapping.getInputForward();

 }

}

   

5、视图呈现

例2.6.HelloWorld.jsp

<%@pagelanguage="java"contentType="text/html;charset=GBK"%>

<%@tagliburi="struts-html.tld"prefix="html"%>

<%@tagliburi="struts-tiles.tld"prefix="tiles"%>

<%@tagliburi="struts-bean.tld"prefix="bean"%>

 

  

formaction="helloWorld.do"method="post">

  

   

    

     

     

    

    

     

    

   

用户名:

textproperty="name"/>

submitproperty="show"value="提交"/>

  

  

form>

 

writename="name"/>

   

6、演示效果

图2.1.访问Helloworld.jsp

本章演示了一个简单的示例,在文本框输入内容,提交后显示其内容。

功能虽然很简单但是涉及到了struts应用的大部分知识:

在web.xml中配置Action影射规则,如,*.do文件的请求触发Action。

ActionFrom中的属性对应到表单域中表单元素,如,jsp页面名为name的Text,对应到ActionForm中name属性。

继承Action类后即可实现具体的控制器,如,HelloAction类接受到请求后将ActionForm对象存放到request范围,然后转发给配置的链接地址。

借助struts提供的标签进行视图呈现。

如,bean:

write标签访问ActionForm对象的属性值。

2.3.ActionForm

ActionFrom是用来传输表单数据的对象,通过配置文件可以关联到对应的Action,实现在UI层与业务层之间的数据传输。

实现机制如下:

Struts提供了一个org.apache.struts.action.ActionForm类,里面实现了将请求表单中的元素赋值给其具体的实现类属性。

因此自定义ActionForm类时,只需继承该类即可。

在自定义ActionForm类时请保证其属性名称与所对应表单名称一致。

当触发Action时,通过配置文件匹配到对应的ActionFrom实例,以参数形式传入。

ActionForm的实现虽然简单,但是随着界面的增加,ActionForm类也会增加,造成代码膨胀。

在Struts1.1以上版本提供了ActionForm的另一个实现类,org.apache.struts.action.DynaActionForm,该类充当所有ActionForm的代理类,只需在配置ActionFrom时指定用该类实现即可:

例2.7.struts-config.xml

  

   

  

   

在访问helloWorldForm实例时如下:

例2.8.HelloAction.java

publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,

   HttpServletResponseresponse)throwsException{

 DynaActionFormdynaForm=(DynaActionForm)form;

 Stringname=(String)dynaForm.get("name");

 returnnull;

}

   

2.4.Action

Action充当了控制器的角色,每个请求都会触发到Action类,我们在这里处理逻辑业务,分发数据,链接转向。

其实现机制:

在web.xml配置影射规则,符合其影射条件的请求都会交给org.apache.struts.action.ActionServlet类处理,在该类中将会实现org.apache.struts.action.Action类中的相应方法。

在自定义Action类时只需继承该类,即可让自定义的Action得到触发。

execute()方法中ActionMapping、ActionForm实例通过读取配置文件获得。

2.5.客户端验证

在UI中对用户提交的数据作验证是必不可少的,Struts也提供了相应的实现。

下面将演示一个登录界面的校验:

1、在配置文件中申明校验实现类,Struts中校验工作通过org.apache.struts.validator.ValidatorPlugIn类实现。

例2.9.struts-config.xml

   在实例化ValidatorPlugIn类时会装载validator-rules.xml、validation.xml文件,这些文件中包含了验证规则和要被验证的具体表单信息。

2、完善校验规则文件。

在validator-rules.xml中定义了常用的客户端验证规则,如,不为空,只允许数字等。

特殊的实现需要在此扩充。

3、定义要被验证的表单信息。

例2.10.validation.xml

 

    

(1)

    

(2)

     (3)

   

   

(1)定义要被验证的ActionForm名称。

(2)定义要被验证的具体属性,及规则。

depends="required"指明将调用validator-rules.xml中的required规则。

(3)从资源文件中匹配具体的验证信息。

4、建立存放验证提示信息的资源文件。

如当用户名为空时显示提示信息“必须填写用户名”

例2.11.ApplicationResources_zh_CN.properties

register.username=\u7528\u6237\u540d

   

5、在界面设置触发条件,如onsubmit时响应验证动作。

例2.12.Login.jsp

<%@pagelanguage="java"contentType="text/html;charset=GBK"%>

<%@tagliburi="struts-html.tld"prefix="html"%>

 

  

formaction="login.do"method="post"onsubmit="returnvalidateCheckLoginForm(this);">

  

hiddenproperty="loginType"value="0"/>

  

   

    

     

     

    

    

     

     

    

    

     

    

   

用户名:

textproperty="name"/>

密码:

passwordproperty="password"/>

submitproperty="login"value="登录"/>

  

  

form>

 

 

javascriptformName=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1