[转帖]Struts2大体介绍_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3305 | 回复: 0   主题: [转帖]Struts2大体介绍        下一篇 
haili.yang
注册用户
等级:少校
经验:936
发帖:71
精华:1
注册:2012-12-24
状态:离线
发送短消息息给haili.yang 加好友    发送短消息息给haili.yang 发消息
发表于: IP:您无权察看 2012-12-25 15:42:44 | [全部帖] [楼主帖] 楼主

本文对Struts做了一个简单的综述性的叙述,用Struts时浏览一遍便可以知道Struts2提供的大部分功能。具体细节没有介绍。

一 Struts2处理流程和体系结构

体系结构:

一个请求在Struts2框架中的处理大概分为以下几个步骤:

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

处理流程:

二 Struts2配置

1配置web.xml

主要配置struts2的全局应用信息。

2配置struts.properties

用来定义Struts2的一些属性。

3配置struts.xml

Struts.xml文件主要负责管理Action的映射以及Action包含的result定义。除此之外,还负责Bean配置,常量配置,包配置、命名空间配置和包含配置。

包配置是对某包中所有的Action的统一管理,如配置拦截器。在配置包是,可以配置包的命名空间(namespace属性),则Action处理的URL应该是”URL+命名空间/Action”。

包含配置主要是为了更好地管理讲不同的Action配置到不同的xml文件中。

三 拦截器

1拦截器工作原理

拦截器是一种面线切面编程(AOP)的实现���略,将一些常用的功能重用,如输入校验、上传文件等。

2拦截器配置

定义拦截器:<interceptor name=”拦截器名字” class=”拦截器对应的java类”>


将多个拦截器合并在一起组成拦截器栈,可一起被附加到Action。

1
2
3
4
5
6
7
8
9
<interceptor-stack name="拦截器栈名">

<interceptor-ref name="拦截器名1"/>

<interceptor-ref name="拦截器名2"/>

<interceptor-ref name="拦截器名3"/>

</interceptor-stack>
拦截器栈里可以为每个拦截器制定参数,也可以同一指定。

使用拦截器栈:

可以使用<interceptor-ref>在Action中配置拦截器或配置器栈。

系统存在默认拦截器栈,可实现大部分的功能。

同时,也可以在package中配置默认拦截器栈。

3自定义拦截器

实现拦截器类(Interceptor接口),定义拦截器并使用。

4 拦截器方法过滤

有些Action中包含不同的方法,可以通过配置,设置需要和不需要拦截的方法。

5内建拦截器

四 Action和类型转换

1 访问ActionContext

ActionContext是Action的上下文对象,Action运行期间的所有数据都保存在此,可以通过该类访问Servlet API。

使用以下代码来创建使用ActionContext:

ActionContext ac= ActionContext.getContext();


通过ActionContext的常用方法可以访问或设置application上下文和session值等。

2 直接访问Servlet API

上一种只能获得request,而直接访问可以访问response。直接访问分为IoC方式和非IoC方式,一般推荐第二种,比较方便。

3 配置Action

配置Action时,result标签有不同的类型,如chain、redirect等。Redirect用来重定向。

若某一结果的视图多次使用,可以配置为全局结果,如:

<global-results>

<result name=”error”>/error.jsp</result>

</global-results>

注:局部视图可覆盖全局视图。

配置时可以使用通配符,使用通配符可以减少很多配置编码量。(实习时george曾问我这个问题,当时我竟然不知道,全部都硬编码….)

4 简单类型转换

简单类型系统会自动转换,同时,也可以使用一个JavaBean来封装客户端请求参数,在文本框中使用OGNL表达式。

5 集合类型转换

对于Action中的List,form表单也可以传入相应的数值。

五 标签库

Struts2的标签的分类如下:

1控制标签

主要有if-else以及对集合的操作的标签。

主要介绍一下集合操作标签。

Iterator:可对集合类型进行迭代输出,包括List、Set、数组、Map等。

Append:将多个集合对象链接起来。

Merge:同append一样,但是连接后的新集合中,元素的排序方式不同。

Generator:通过指定的分隔符将字符串分割成多个子串。

Sort:对集合进行排序,排序规则实现Comparator实例。

2 数据标签

Action:直接在页面中调用一个Action,增加重用性。

Bean:在页面中创建一个JavaBean实例对象。

Debug:辅助调试,可以看到ValueStack和StackContext中的信息。

Include:将JSP或Servlet包含到当前页面。在include标签中可以使用param标签传入参数。

Param:与其他标签结合使用,提供参数。

Property:显示输出指定的value属性。

Set:定义一个新变量,并可以为其指定范围。

url:生成一个URL地址。

Date:按指定格式输出一个日期。

3 表单UI标签

Checkboxlist:创建复选框。

Radio:单选框。

Combobox:下拉框和单行文本框。下拉框辅助输入。

Select:下拉框。

Doubleselect:两个相关联的下拉列表框。

Optgroup:生成选项组,在select中使用。

Datetimepicker:生成日历。

Token:防止用户多次提交表单。

Updownselect:上移、下移和全选。

Optiontransferselect两个列表框。

4 非表单UI标签

Actionerror&actionmessage:输出Action的消息。在action中使用addActionError(“string”)和addActionMessage(“string”)设置返回内容。

Component:使用自定义组件。同时可以使用param传入参数。(翻页组件我觉得就可以)

Tree和treenode:生成一个树状结构。必须设置theme=”ajax”

五 输入校验

Struts2校验主要分为两种,第一种是重写validate()方法,第二种通过配置action-validation.xmla文件使用内置校验器进行校验。

Struts2默认为服务器端校验,但是在form表单标签中使用属性validate=”true”可添加客户端校验。

1 重写validate()方法

在此方法中,如果校验没有通过可记录fileError属性,框架在执行execute之前会自动判断是否有fieldError属性,如果有的话则返回结果为input。

如果只需要校验Action中的某一方法,则可以重写validateXxx方法。

2 内置器校验

内置校验器可使用字段校验器配置风格和校验器类型配置风格。

常见的内置校验器有:必填校验器、字符串长度校验器、整数范围校验器、日期校验器、以及:

表达式校验器:非字段验证器,要求OGNL表达式的返回值为true。

字段表达式验证:制定字段必须满足一个逻辑表达式。

邮件地址校验器

网址校验器

转换验证器

正则表达式校验器

3 自定义校验器

六 Struts2高级技巧

1 国际化

目前用不到,以前用过,用到再说。

2 异常处理

Struts2异常处理可在struts.xml文件中配置,而在Action中不需要编写任何异常处理代码。

Struts.xml文件中使用<exception-mapping>元素进行异常映射,包括两个属性:

Exception:指定异常的类型。

Result:指定异常出现时,返回给用户的视图名称。

异常映射范围分为两种:

全局异常映射,使用<global-exception-mapping>元素配置,内部使用异常标签。映射范围是package中的所有action。

局部异常映射:在Action配置内部使用异常标签,范围是他所在的action。局部映射可覆盖全局映射。

3 OGNL


OGNL是一种方便操作对象属性的语言。如果熟练使用需要一大篇篇幅介绍,这里只介绍三种符号的基本用途。

#:


访问OGNL上下文和Action上下文,相当于ActionContext.getContext()。如#session.userNmae.
过滤和投影集合。如newsList.{?#this.id==1}.{title}[0]
构造Map。如#{‘book’:’23′,’book2′:’25′}
%

计算OGNL的表达式
$

国际化文件中使用OGNL表达式。
配置文件中使用OGNL表达式。(一般是制定URL路径中需要带有参数)

eg:<result type=”redirect”>/myOGNL.action?id=${id}</result>


4 文件上传和下载

没啥好说的,很简单,用的时候对着书看看就行了。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论