第一章Struts2的起源和发展
说到网络应用很难让人不联想到网络信息的浏览,自从Internet进入民用领
域之后,上网成为了越来越多的人闲暇时光的消磨手法。于是网络系统的开发也
变得越来越总要。
1.1Web技术的发展
随着Internet技术的大面积应用和发展,传统的静态HTML页面由于缺乏足
够的用户交互能力已经无法满足日益膨胀的网络需求。人们希望Web应用中能
够包含更多的动态交互功能,于是为了应对拥有更广泛用户群的动态Web开发,
软件开发商分别推出的ASP和JSP两款动态网站开发解决方案。但是当时的JSP
开发并没有很科学的层次设计,最初的JSP开发中逻辑代码和前端代码杂合在一
起。虽然在最初开发时这样的做法使得开发非常的容易,然而随着Web系统的
使用越来越广泛,应用规模的日益增长,如果继续使用传统的简单的JSP+Servlet
结构进行Web系统的开发,则会由于系统层次混乱而导致系统的开发难度和维
护成本越来越大,最终使开发过程陷入困境。
1.2MVC思想进入Web系统开发
面对开发过程中所出现的困难,开发者们试图寻找一种能够使得开发结构更
加具有条理性的开发模式。根据以往面向对象系统设计的经验,开发者开始将MVC开发模式引入Web系统的开发。MVC模式将一个应用分为三个基本部分:
Model(模型)、View(视图)、Controller(控制器)。在此模式中触发事件由控
制器捕获,并根据事件的类型来改变模型和视图。这样既可将系统模型与视图分
离,从而使各部分能够工作在最小的耦合状态下协同工作,从来提高系统的扩展
性和可维护性。将其引入Web系统开发后,系统模式由传统的JSP完成用户请
求和响应改变为由控制器捕获用户请求,JavaBean完成模型操作,而JSP专门负
责响应用户需求。老一代的开发框架Struts1便是这时的产物。1.3Struts2开发框架的成型
随着Struts1框架在Web系统开发中的大量应用,越来越多的使用者发现Struts1有着许多不可避免的缺陷。首先,Struts1只支持JSP作为表现层,然而
并不是所有的Web系统都必须使用JSP进行信息反馈。其次,Struts1编写业务
逻辑控制器时,必须调用大量ServletAPI,而这些接口都是依赖于Web服务器
的。这样就造成了业务逻辑测试无法脱离Web容器,造成了测试的困难。最后,
由于大量的ServletAPI使用,使得系统结构混乱,使得这些业务逻辑在使用其
他框架是需要大量重写,降低了代码使用效率。为了应对这些问题,Struts2去除
了业务逻辑中对于ServletAPI的耦合,使得业务逻辑类不需要继承任何Struts2
基类,降低了测试难度,也加强了Action类的可移植性。
1.4本章小结
本章从Web系统开发的发展历程入手,讲述了Web系统开发模式的变化,
从而引出了Struts框架的起源,描述了Struts1的出现,以及所带来的问题。并
由此解释了Struts2出现的目的,和解决的问题。第二章Struts2框架的基本原理
学习一个框架,我们首先要了解他的工作原理和基本工作方式,由此才能够
进行后续的学习和使用,本章从基本的流程开始讲解Struts2的基本原理和相关
配置。
2.1Struts2的事务处理流程
相对于Struts1框架,Struts2为了使业务逻辑控制与Servlet容器的API分离
而大量使用了拦截器来处理用户的请求。首先由Struts2的核心控制器拦截到用
户在浏览器中发送的请求,然后核心控制器根据请求调用适当的Action进行处
理。然后根据Action返回的参数选择对应处理方式将处理的结果返回给浏览器。
2.2Struts2的基本配置
Struts2的基本配置主要包括三个部分:站点设置、核心设置控制器、业务控
制器设置。
2.2.1为站点添加Struts2框架支持
要使用Struts2框架开发就必须要将Struts2框架嵌入到当前的Web系统中,
为Web系统提供相关支持。那么我们需要被指配置WEB-INF路径下的web.xml
文件,将Struts2的核心控制器键入系统。该Web.xml文件在开发过程中该文件
会存在与源代码目录中。
具体设置比较简单,只需要将web.xml中的filter标签配置为:
这样设置之后系统将会调用struts2框架的FilterDispatcher组件处理由客户
端发送的请求,就完成了系统Struts2框架的添加。
2.2.2Struts2的控制器组件
完成了Struts2框架的添加,我们可以尝试写一个业务的控制器组件。一个
控制器组件主要用来处理用户提交的请求,这些请求大多数情况下会有参数传
递,于是一个控制器(Action)类就需要包括用于读取这些参数的函数,在Struts2
框架中这些操作需要靠编写响应的设置(setter)和获取(getter)函数来完成。
同样的,Struts2框架要求改控制类完成的操作需要通过相应的执行(execute)
函数来完成。下面是一个样例:publicclassLoginAction{
//需要传递的参数
protectedStringusername;
//参数的Setter和Getter函数
publicvoidsetUsername(Stringuser);
publicvoidsetUsername(Stringuser);
//执行函数
publicStringexecute()throwsException{
//返回结果值
returnnull;
}
}
2.2.3Struts2框架文件的设定
有了控制器类我们要做的就是将控制器置入系统,所以我们需要设计一个调
用打的方式,并设定一个处理控制器返回结果的方式。这就是这一步需要配置的
工作。
比如上面的LoginAction类,我们可以这样设置:
这里action标签就是我们需要配置的部分,上面的内容表示当调用Login动
作的时候,系统会使用我们编写的类包javaAction中的LoginAction类来处理这
条请求。并且当其执行函数返回success时会跳转至welcome.jsp页面继续下一步
工作,而返回input是则会跳回登陆界面提示登陆。
这样Struts2框架基本就可以工作了。
2.3本章小结
本章主要讲述了Struts2框架的工作流程和配置要点,并说明了各个组件的
作用,基本说明了一个Struts2系统开发框架的搭建步骤。第三章Struts2框架开发简单的信息发布系统
前面已经简要说明了Struts2框架的基本原理和基本配置方式,那么接下来
我们将会通过一个小心信息发布系统的开发来详细描述Struts2框架的应用方式。
3.1信息发布系统的分析与建模
类似所有的系统开发,没个系统都需要进行完善的分析与设计,只有这样才
能够对后续的开发进行把握。
3.1.1系统的可行性分析
可行性研究用来判断系统目标和规模是否显示,以及系统完成后能否达到预
计的目的。所以经过了初步的设计和调查后得出以下三点可行性分析:1.技术可行性
本次系统主要为学习和了解Struts2开发模式,因此只需要实现信息发布系
统的基本功能,所以程序结构上比较简单。整个应用核心部分使用Struts2框架
作为核心解决方案,使用基本的JavaBean进行后台数据库操作,并使用JSP页
面进行信息响应。2.经济可行性
本次开发使用的所有软件都是网上发布的开源版本或者相关软件的免费版
本,使用的相关参考都源自有经验的开发者的无私分享,所以开发成本基本为零。
且本次开发的目的仅限于学习和了解新兴的开发架构,亦不需要达成任何经济效
应。因此,可以认为开发本系统在经济上是可行的。3.操作可行性
本系统的开发参照了目前主流信息服务站点的设计结构,采取了相似的设计
思路,基本满足了用户的需求。因此,本系统在操作上也是基本可行的。
3.1.2系统的需求分析
本系统是一个信息发布系统,所以需要有信息发布与显示功能。对于信息显
示部分,我们需要设置专门的发布员进行信息的发布和管理。而对于浏览部分,我们需要设置分类浏览和总体浏览。对于浏览的信息,它必须要拥有标题,并标
示出他的作者和发布的日期。同时为了配合分类浏览功能,一跳信息还必须同时
具有分类属性,便于分类浏览时作为参照。这样就满足了一个基本的信息发布平
台的需求。
3.1.3系统的总体功能分析
通过参考各种信息发布系统,从自身的理解进行分析,对各种需求进行整理
后认为,本系统需要具备的功能主要有:信息登录、信息修改、信息浏览三个主
要功能,并且配合这三大基本功能选择实现其他配套功能。由此,本系统最终的
规划功能有:
信息发布系统的首页,包括发布员的注册与登录,浏览各种分类新闻。
信息发布系统的浏览页面,显示信息的详细信息。
信息发布系统的登陆页,为新闻发布员提供登录服务。
信息发布系统的注册页,为发布员提供注册服务。
信息发布系统的发布员页面,显示发布员发布的信息。
本系统的系统结构图如下图3.1所示
图3.1系统功能模块
对应的系统应该分为以下几个模块,如图3.2所示