Struts2 体系介绍

Struts2框架解析

Struts2的体系与Struts1体系的差别非常的大,因为Struts2使用了WebWork的设计核心,而不是使用Struts1的设计核心.Struts2大量使用拦截器来处理用户请求,从而允许用户的业务逻辑器与ServletAPI分离.

1. Struts2的框架结构.

从数据流上面来看,Struts2WebWork相差不大,Struts2同样使用拦截器作为处理(Advice),以用户的业务逻辑控制器为目标,创建一个控制器代理.

控制器代理负责处理用户的请求,处理用户请求时回调业务控制器的execute方法该方法的返回值决定了Struts2将怎样的试图资源呈现给用户.

Struts2框架的大致处理流程如下:

浏览器发送请求,比如说请求/mypage.action,/reports/myreport.pdf等等.

核心控制器FilterDispatcher根据请求决定调用何时的Action

WebWork的拦截器链自动对请求应用通用功能,比如说workflow,validation或者文件上传等功能

回调Actionexecute方法,execute方法先获取用户请求参数,然后执行某种数据库操作,既可以是将数据库保存到数据库,也可以是从数据库中检索信息,实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求.

Actionexecute方法处理结果信息将被输出到浏览器当中,可以是HTML页面,图像,也可以使PDF文档或者其他的文本.此时支持的试图技术非常多,可以是JSP,也支持VelocityFreeMaker等技术.

2. Struts2的配置文件

Struts2创建系统的Action代理时,需要使用到Struts2的配置文件.

Struts2的配置文件有两份:

配置ActionStruts.xml文件

配置Struts2全局属性的struts.properties文件

Struts.xml文件内定义了Struts2的系列Action,定义Action的时候,应该指定Action的实现类,并且定义该Action处理结果与视图资源之间的映射关系.下面是Struts.xml的示例:

<struts>

<!—Struts2Action都必须配置在package -->

<package name=”defalut” extend=”struts-default”>

<!-- 定义一个logonAction,实现类为lee.Logon -->

<action name=”logon” class=”lee.Logon”>

<!—配置Action返回input的时候转入logon.jsp页面 -->

<result name=”input”>/page/logon.jsp</result>

<!-- 配置Action返回cancel的时候转会welcomAction -->

<result name=”cancel” type=”redirect-action”>Welcom</result>

<!-- 配置Action返回seccess的时候重定向到MainMenuAction -->

<result type=”redirect-action”>MainMenu</result>

<!—配置Action返回expried的时候,进入ChangPasswordActon-->

<result name=”expried” type=”chain”>ChangePassword</result>

</action>

<action name=”logoff” class=”lee.Logoff”>

<!—配置Action返回success的时候重定向到WelcomAction -->

<result type=”redirect-action”>Welcome</result>

</action>

</package>

</struts>

在上面的struts.xml文件中,定义了两个Action,定义Action的时候,不仅定义了Action的实现类,而且得定义Action的处理结果时,指定了多个result,result元素指定execute方法返回值和视图资源之间的映射关系.

除了上面的配置文件之外,Struts2还有一个配置Struts2全局属性的Properties文件,Struts.propeties.该文件的示例如下:

//指定Struts2的开发状态

struts.devMode-false

//指定当Struts2配置文件之后,Web框架是否应该重新加载Struts配置文件

struts.configuration.xml.reload=true

正如上面看到的,struts.propertis文件的形式是系列的key,value,它指定了Struts2应用的全局属性.

3. Struts的标签库

Struts2的标签库也是Struts2的重要组成部分,Struts2的标签库提供了非常丰富的功能,这些标签库不仅提供了表现层数据处理,而且提供了基本的流程控制功能,还提供了国际化,Ajax技术支持等功能.

通过使用Struts2的标签,开发者可以最大限度的减少页面代码的书写.

看下面的JSP页面的表单定义片段.

<!—定义一个form -->

<form method=”post” action=”basicvalid.action”>

<!—下面定义表单域 -->

名字:<input type=”text” name=”name”/><br>

年级:<input type=”text” name=”age”/><br>

喜欢的颜色:<input type=”text” name=”favorite”/><br>

<input type=”submit” value=”提交”/>

</form>

上面的页面使用了传统的HTML标签定义表单元素,还不具备校验信息的功能,但是如果换成了如下使用Struts2标签的定义方式:

<!—使用Struts2的标签来定义一个表单 -->

<s:form method=”post” action=”basicvalid.action”>

<!—下面定义表单域 -->

<s:textfield label=”名字” name=”name”/>

<s:textfield label=”年级” name=”age”/>

<s:textfield label=”喜欢的颜色” name=”favorite”?>

<s:submit/>

</form>

Struts2的标签库的功能非常的复杂,该标签库几乎可以完全的替代JSTL标签库,而且Struts的标签支持表达式语言,这种表达式语言支持一个强大和灵活的表达式语言OGNL,因此功能十分的强大.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值