青木求鱼——leejie
我要强大到没有任何事物能够打扰到我内心地平静。
I want to be strong enough that no thing can disturb the tranquility of my heart.

JavaEE Web开发应用框架之_Struts2

1、  MVC和Struts2

MVC是一种设计模式,它将一个完整的Web应用程序分为模型层(Model)、视图层(View)和控制层(Controller)三层架构。这样,同一个应用程序就可以使用不同的表现形式。抽象的说法就是将应用程序的业务模型独立于界面构成。

MVC的三层架构中各层实现的功能:

模型层:软件所处理问题逻辑在独立于外在显示内容和形式的情况下的内在抽象。

视图层:把表示模型数据及逻辑关系和状态信息,以特定的形式展示给用户。

控制层:协调模型和视图的部件,视图层通过控制器调用模型层的业务逻辑。

Struts2框架是一个基于MVC架构的框架,在Struts2中使用动作(action)、结果(result)和过滤分配器(FilterDispatch)实现了MVC中的三个关注点模型、视图和控制器。

Struts2工作流程:

Struts2通过在web.xml中配置的过滤器过滤客户请求并传递给Struts2的拦截器栈,拦截器最终会将请求传递给动作(Action),动作处理完成请求后会返回一个逻辑视图(result),由此逻辑视图寻找相应的物理视图。Struts2提供了很多的内建拦截器,他让我们在动作接收到请求之前和之后都能够有机会处理客户请求,追加相应的工作流。

2、  部署Struts2框架

Struts2框架下载地址http://struts.apache.org/2.x/index.html

将下载的文件解压后使用eclipse将解压的文件中的struts2-blank.war导入

在src目录下编写Action类

打开项目中src目录下的struts.xml文件,这是Struts2框架的主配置文件:

<struts>

 

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />

    <constant name="struts.devMode" value="false" />

 

    <include file="example.xml"/>

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <action name="index">

            <result type="redirectAction">

                <param name="actionName">HelloWorld</param>

                <param name="namespace">/example</param>

            </result>

        </action>

    </package>

 

    <!-- Add packages here -->

 

</struts>

打开项目中WebContent\WEB-INF目录下的web.xml,看到比以前的没有导入框架的项目中的文件中多了几行配置,这是用来配置Struts2的核心拦截器:

<filter>

<filter-name>struts2</filter-name>        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

3、  Action的生命周期

Action的生命周期指的是Struts2是如何管理Action的初始化和消亡的,测试过程发现,Struts2没接受到一个请求就会初始化一个Action对象来服务该请求,Action的消亡是有Struts2自动管理的。(注意:如果使用Spring管理Action时,Action的生命周期与Spring中配置的Bean的作用范围有关)

4、  Action中访问Web对象

Struts2是使用过滤器处理请求的,框架的使用让我们只关注业务和动作时,我们还需要考虑下动作(Action)是如何使用Web中的对象

Struts2提供了两种方法访问web对象:

a)         通过ActionContext

获取Session对象ActionContext.getContext().getSession()

获取Application对象ActionContext.getContext().getApplication()

获取Request对象ServletActionContext.getRequest()

获取Response对象ServletActionContext.getResponse()

获取所有页面请求参数ActionContext.getContext().getParameters()

b)         通过实现*Aware接口

例如如果要获取Session对象,就让Action类实现SessionAware接口,实现void setSession(Map session)方法

5、  ValueStack和OGNL

Struts2中的值栈(valueStack)是一个存放对象的堆栈,对象以Map的方式存储在该堆栈中,几乎所有的Struts2的操作都会与值栈打交道。

值栈中的对象的四种类型:
临时对象:

程序执行过程中有容器自动创建并存储在值栈中。临时对象并不固定,会随应用程序的执行而改变,应用程序执行结束,临时对象被清空。

模型对象:

           该对象仅在Action使用模型驱动方式传值的时候被用到。拦截器会自动将应用了模型驱动的Action中的模型对象放在值栈中。

Action对象:

           每一个Action请求到来的时候,容器都会创建一个Action的对象并存入值栈。

命名对象:

           主要包括Servlet作用范围内相关的对象信息,如Request、Session、Application等。

6、  Struts2拦截器、数据转换器和国际化

Struts2拦截器

在请求到达动作之前,如果要想获取当请求的数据进行处理怎么办?在Struts2框架中为我们提供了非常好用的拦截器。

Struts2拦截器让开发人员能够在请求到达动作之前和之后对请求数据进行预处理和后加工。

Struts2提供了丰富的内建拦截器,下面介绍如何使用内建拦截器追加工作流,对于如何实现自定义拦截器这里就不叙述了。

首先部署拦截器:在struts.xml文件的package元素下添加如下配置

<interceptors>

           <interceptor name=”interceptorName” class=”InterceptorClass”/>

</interceptors>

在struts.xml文件的action元素下配置

<interceptor-ref name=”interceptorName” />

当然这只是配置了单个的拦截器,如果要配置多个拦截器的话可以使用拦截器栈

在上例中的struts.xml文件中的interceptors元素下添加

<interceptor-stack name=”stackName”>

           <interceptor-ref name=”interceptorName”>

           …

</interceptot>

在action元素中配置

<interceptor-ref name=” stackName” />

需要注意的是为action单独配置拦截器和拦截器栈时Struts2提供的默认的拦截器栈会失效。Struts2默认拦截器栈的名字是defaultStack,它提供了我们常用的功能,例如数据转移,数据验证等等。

Struts2数据转换器:

Web应用程序的页面中传送的请求全部是以String类型传递的,而在实际的处理中我们可能需要各种数据类型。Struts2数据转换器为我们提供了String类型与基本数据类型之间的转换,当然我们也可以自定义数据转换器以完成我们特定的需要。

在使用Struts2内置的数据转换器时,我们不需要去处理。下面就介绍如何使用自定义的数据转换器:

定义自定义的数据转换器的两种方式:

1、继承DefaultTypeConverter类重写convertValue方法

2、继承StrutsTypeConverter类重写convertFormString和convertToString方法

部署转换器:

1、  部署局部转换器(只对单个类中的某个属性起作用):

添加配置文件且该配置文件必须和使用该类型转换器的Action在同一包中配置文件名为Action类名-conversion.properties

配置文件内容为:变量名=路径.类名(左边是属性名,右边是类型转换器)

2、  部署全局转换器:

配置文件名为xwork-conversion.properties,位置与默认的struts.xml路径一致。

配置文件内容为:路径.类名=路径.类名(左边的是需要装换的属性的类型,右边的是类型转换器)

Struts2国际化

7、  Struts2标签库和模版技术

posted on 2012-07-28 10:38  leejie1001  阅读(616)  评论(0编辑  收藏  举报