p185第10章 编码实现java ee1230.docx

上传人:b****8 文档编号:10496818 上传时间:2023-02-14 格式:DOCX 页数:60 大小:216.02KB
下载 相关 举报
p185第10章 编码实现java ee1230.docx_第1页
第1页 / 共60页
p185第10章 编码实现java ee1230.docx_第2页
第2页 / 共60页
p185第10章 编码实现java ee1230.docx_第3页
第3页 / 共60页
p185第10章 编码实现java ee1230.docx_第4页
第4页 / 共60页
p185第10章 编码实现java ee1230.docx_第5页
第5页 / 共60页
点击查看更多>>
下载资源
资源描述

p185第10章 编码实现java ee1230.docx

《p185第10章 编码实现java ee1230.docx》由会员分享,可在线阅读,更多相关《p185第10章 编码实现java ee1230.docx(60页珍藏版)》请在冰豆网上搜索。

p185第10章 编码实现java ee1230.docx

p185第10章编码实现javaee1230

目录

第10章编码实现2

10.1编码概述3

10.1.1编码语言的选择3

10.1.2Struts简述3

10.1.3Spring简述4

10.1.4Hibernate简述5

10.2Struts2、Spring和Hibernate项目实践5

10.2.1准备工作6

10.2.2建立数据持久化层7

10.2.3建立DAO层12

10.2.4业务逻辑层20

10.2.5创建Action类26

10.2.6Web页面30

10.2.7配置Struts233

10.2.8配置Spring37

10.2.9web.xml文件配置40

10.2.10其他41

10.3学习笔记41

第10章编码实现

10.1编码概述

10.1.1编码语言的选择

合适的编程语言能使根据设计去完成编码时困难最少,可以减少需要的程序测试量,并且可以得出更容易阅读和更容易维护的程序。

传统的网页都是静态的网页。

在这种情况下,用户只是被动地阅读作者所提供的信息,为实现诸如收发email、网上销售、电子商务等更多功能必须使用更新的网络编程技术即动态网页制作技术。

相书采用JavaEE相关技术中的SSH框架(Struts+Spring+Hibernate的简称)。

Struts作为MVC2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。

作为最成功的Web框架,Struts自然拥有众多的优点:

MVC2模型的使用、功能齐全的标志库(TagLibrary)以及开放源代码。

而Spring的出现,在某些方面极大的方便了Struts的开发。

同时,Hibernate作为对象持久化的框架,能显式的提高软件开发的效率与生产力。

这三种流行框架的整合应用,可以发挥它们各自的优势,使软件开发更加的快速与便捷。

10.1.2Struts简述

Struts最早是作为ApacheJakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServerPages、Servlet、标签库以及面向对象的技术水准。

Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。

这个框架之所以叫“Struts”,是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至踩高跷时候的基础支撑。

Struts是Apache基金会Jakarta项目组的一个开源项目,它采用MVC模式,能够很好地帮助java开发者利用J2EE开发Web应用。

和其他的java架构一样,Struts也是面向对象设计,其将MVC模式中的“分离显示逻辑和业务逻辑”能力发挥得淋漓尽致。

Struts由一组相互协作的类(组件)、Servlet以及jsptaglib组成。

Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使开发者能更深入的了解其内部实现机制。

除此之外,Struts的优点主要集中体现在两个方面:

Taglib和页面导航。

Taglib是Struts的标签库,对其进行灵活运用,能大大提高开发效率。

而关于页面导航,通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。

尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

本书中用到的是struts2版本,struts2与struts1.x有着本质的区别。

从某种程度上来讲,Struts2没有继承Struts1的血统,而是继承了WebWork的血统。

或者说,WebWork衍生出了Struts2,而不是Struts1衍生了Struts2。

由于Struts2是WebWork的升级,而不是一个全新的框架,因此在稳定性以及性能等各方面都有很好的保证;此外,其还吸收了Struts1和WebWork两者的优势,因此,是一个非常值得期待的框架。

Struts2和Struts1.x的主要区别

分别从几个方面来看一下Struts2和Struts1.x的主要区别。

(1)Action类

Struts1.x要求Action类继承一个抽象基类。

而Struts2中的Action类可以实现一个Action接口,也可实现其它接口。

Struts2提供一个ActionSupport基类去实现常用的接口。

Action接口不是必须的,任何有execute标识的POJO对象都可以当作Struts2的Action对象。

(2)线程模式

Struts1.x中的Action是单例模式并且必须是线程安全的,因为Struts1.x用仅有的Action的一个实例来处理所有的请求,所以Action资源必须是线程安全的或同步的。

而Sruts2中的Action对象为每一个请求产生一个实例,因此没有线程安全问题。

(3)可测性

Struts1.x中的Action的execute方法暴露了servletAPI,这使得Action的测试要依赖于容器。

而Struts2中Action可以通过初始化、设置属性以及调用方法来进行测试,另外依赖注入的支持也使得测试更容易。

(4)捕获输入

Struts1.x使用ActionForm对象捕获输入。

所有的ActionForm必须继承一个基类。

因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类来捕获输入。

而Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。

输入属性可能是有自己(子)属性的rich对象类型。

Action属性能够通过web页面上的taglibs访问。

同时,Struts2也支持ActionForm模式。

rich对象类型,包括业务对象,能够用作输入/输出对象。

10.1.3Spring简述

Spring是一个开源框架,它由RodJohnson创建。

它是为了解决企业应用开发的复杂性而创建的。

Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。

然而,Spring的用途不仅限于服务器端的开发。

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

它具有以下特点:

(1)轻量

从大小与开销两方面而言,Spring都是轻量的。

完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。

并且Spring所需的处理开销也是微不足道的。

(2)控制反转

Spring通过控制反转(IoC)的技术将组件之间的依赖关系由容器(运行环境)在运行期决定,从而在相当程度上降低了组件之间的耦合。

当应用了IoC技术,一个对象所依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己主动创建或者查找依赖对象。

(3)面向切面

Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如事务管理)进行内聚性的开发。

应用对象只实现它们应该做的——完成业务逻辑,它们并不负责其它的系统级关注点,例如日志或事务支持。

(4)框架

Spring可以将简单的组件经过配置组合成为复杂的应用。

在Spring中,应用对象被声明式地组合。

Spring也提供了很多基础功能(例如事务管理、持久化框架集成等),开发人员只需要关注应用逻辑的开发。

所有Spring的这些特征使你能够编写出干净的、易管理的、可测试的代码。

它们也为Spring中的各种模块提供了基础支持。

10.1.4Hibernate简述

Hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以容易地操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

最具革命性意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

Hibernate的核心接口一共有5个,分别为:

Session接口、SessionFactory接口、Transaction接口、Query接口以及Configuration接口。

这5个核心接口在任何开发中都会用到。

通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

下面我们将对这五个核心接口分别加以介绍。

  

(1)Session接口

Session接口负责执行被持久化对象的CRUD操作(Create/Read/Update/Delete等常见的SQL语句。

)。

但需要注意的是Session对象是非线程安全的。

同时,Hibernate的session不同于JSP应用中的HttpSession。

(2)SessionFactory接口

SessionFactory接口负责初始化Hibernate。

它充当数据存储源的代理,并负责创建Hibernate中的Session对象。

这里用到了工厂模式。

需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就足够了,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

(3)Configuration接口

Configuration接口负责配置并启动Hibernate,同时创建SessionFactory对象。

在Hibernate启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

(4)Transaction接口

Transaction接口负责事务相关的操作。

它是可选的,开发人员也可以编写自己的底层事务处理代码。

(5)Query和Criteria接口

Query和Criteria接口负责执行各种数据库查询。

它可以使用HQL语言或SQL语句两种表达方式。

10.2Struts2、Spring和Hibernate项目实践

Struts2负责实现MVC,Spring负责架构的结合,而Hibernate完成了数据的持久化。

通常其分层开发的结构图。

如图10-1所示。

图10-1SSH分层开发的结构图

接下来我们将结合本书中的大学学籍管理系统来简单介绍一下Struts2、Spring和Hibernate的综合应用。

10.2.1准备工作

(1)建立开发环境

开发工具:

MyEclipse5.0;

服务器:

Tomcat6.0;

数据库:

Mysql5.0;

操作系统:

windowXP。

(2)下载主要的jar包

其中Struts2.1.8的下载地址为:

http:

//people.apache.org/builds/struts/2.1.8

Hibernate3.1的下载地址为:

http:

//www.hibernate.org

spring2.5.6的下载地址为:

http:

//www.springframework.org

(3)建立数据库及表结构

建立数据库及表结构的过程比较简单,本文不再细述。

10.2.2建立数据持久化层

(1)编写实体类Student及Student.hbm.xml映射文件。

实体类com.ustc.entity.Student.java的代码如下:

packagecom.ustc.entity;

publicclassStudent{

privateStringstuNumber;//学号

privateStringusername;//姓名

privateStringgender;//性别

privateStringcity;//籍贯

privateStringidentityID;//身份证号

privateStringphone;//联系电话

privateStringemail;//电子信箱

privateStringpostID;//邮政编码

privateStringaddress;//通讯地址

privateGradegrade;

publicGradegetGrade(){

returngrade;

}

publicvoidsetGrade(Gradegrade){

this.grade=grade;

}

publicStringgetStuNumber(){

returnstuNumber;

}

publicvoidsetStuNumber(StringstuNumber){

this.stuNumber=stuNumber;

}

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetGender(){

returngender;

}

publicvoidsetGender(Stringgender){

this.gender=gender;

}

publicStringgetCity(){

returncity;

}

publicvoidsetCity(Stringcity){

this.city=city;

}

publicStringgetIdentityID(){

returnidentityID;

}

publicvoidsetIdentityID(StringidentityID){

this.identityID=identityID;

}

publicStringgetPhone(){

returnphone;

}

publicvoidsetPhone(Stringphone){

this.phone=phone;

}

publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetPostID(){

returnpostID;

}

publicvoidsetPostID(StringpostID){

this.postID=postID;

}

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

}

接下来要把实体类Student的属性映射到数据库中的STUDENT表,修改配置文件Student.hbm.xml:

xmlversion="1.0"encoding="utf-8"?

>

DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"

"

column="username">

cascade="all"fetch="join">

(2)编写实体类Grade及Grade.hbm.xml映射文件。

实体类com.ustc.entity.Grade.java的代码如下:

packagecom.ustc.entity;

publicclassGrade{

privateLongid;

publicLonggetId(){

returnid;

}

publicvoidsetId(Longid){

this.id=id;

}

privateStudentstudent;

privateintnumElectron;

privateintnumSoftware;

privateintnumSecurity;

privateintnumJava;

privateintnumDB;

privateintnumImage;

privateintnumDistributed;

privateintnumTest;

publicStudentgetStudent(){

returnstudent;

}

publicvoidsetStudent(Studentstudent){

this.student=student;

}

publicintgetNumElectron(){

returnnumElectron;

}

publicvoidsetNumElectron(intnumElectron){

this.numElectron=numElectron;

}

publicintgetNumSoftware(){

returnnumSoftware;

}

publicvoidsetNumSoftware(intnumSoftware){

this.numSoftware=numSoftware;

}

publicintgetNumSecurity(){

returnnumSecurity;

}

publicvoidsetNumSecurity(intnumSecurity){

this.numSecurity=numSecurity;

}

publicintgetNumJava(){

returnnumJava;

}

publicvoidsetNumJava(intnumJava){

this.numJava=numJava;

}

publicintgetNumDB(){

returnnumDB;

}

publicvoidsetNumDB(intnumDB){

this.numDB=numDB;

}

publicintgetNumImage(){

returnnumImage;

}

publicvoidsetNumImage(intnumImage){

this.numImage=numImage;

}

publicintgetNumDistributed(){

returnnumDistributed;

}

publicvoidsetNumDistributed(intnumDistributed){

this.numDistributed=numDistributed;

}

publicintgetNumTest(){

returnnumTest;

}

publicvoidsetNumTest(intnumTest){

this.numTest=numTest;

}

publicintgetTotal(){

returnnumElectron+numSoftware+numSecurity+numJava+numImage

+numDB+numDistributed+numTest;

}

}

实体类Grade的属性映射到数据库中的Grade表,同时,我们新建并修改配置文件Grade.hbm.xml:

xmlversion="1.0"encoding="utf-8"?

>

DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"

"

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

当前位置:首页 > 人文社科 > 法律资料

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

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