`

Struts2核心组件

 
阅读更多

转自:http://blog.sina.com.cn/s/blog_722e24e70100npay.html

-  Struts的5个核心转自组件

1. Actions: model

2. Interceptors: controller

3. Value stack / OGNL: provide common thread, linking and enabling integration between the other components

4. Resut types: view

5. Results / view technologies: view

struts2学习日志(4) <wbr><wbr>- <wbr><wbr>Struts核心组件

- Struts2 configuration file

struts2学习日志(4) <wbr><wbr>- <wbr><wbr>Struts核心组件

 

1. struts.properties

这个文件用来改变struts的默认行为,通常不用修改。所有这个文件中的内容可以用web.xml中的’’init-param’或者 struts.xml中的”constant”来覆盖。默认的文件位于struts核心jar包的org.apache.struts2包下,default.properties.

struts2学习日志(4) <wbr><wbr>- <wbr><wbr>Struts核心组件

为了开发方便,通常修改一下几个属性(在src root下创建struts.properties即可):

ü struts.i18n.reload = true  自动reload国际化文件

ü struts.devMode = true 开发模式,更易于理解的调试信息

ü struts.configuration.xml.reload reload一个xml配置文件而不是整个应用

ü struts.url.http.port = 8080 端口

ü struts.i18n.encoding= GBK  用于中文环境

 

2. struts.xml

1) Include:  用于模块化配置文件,可将struts.xml分开并由此tag引入。引入是顺序相关的。有些配置文件是自动加载的:struts- default.xml、truts-plugin.xml。前者是struts核心的配置文件,主要定义了默认的许多interceptors以及返回 类型,后者提供了特定plug-in的配置。

struts2学习日志(4) <wbr><wbr>- <wbr><wbr>Struts核心组件

2) Package:用于分组。同一组通常共享一些属性诸如interceptor stack或URL namespace。通常用于分开特定的功能模块。

Name标识而已

Extends引入别的包,类似于java的继承。通常extends struts-default.xml

NamespaceURL到package的映射,例如两个同样的action不同的namespace就会有不同的configuration:如/myWebApp/package1/my.action”“/myWebApp/package2/my.action”

Abstract若为true,则action通过package访问不到。

另外,package下可以有 tag。

 

Actions

首先,struts中的action是POJO,即不必要(但可以)继承任何父类或者实现任何接口。其次action有一个方法execute(),返回string(结果)。

一个例子:

 

view.jsp

error.jsp

其中name提供了执行这个action的URL信息,/my.action。后缀.action定义在struts.properties中,可以改变。

1. 有4种决定action结果的方式。(待完善)

2. result types:下面是struets种定义的result type,还可以自定义,其中默认为dispacther(forward),redirect可以用来返回到登录页面。

struts2学习日志(4) <wbr><wbr>- <wbr><wbr>Struts核心组件
3. Requests和form data

Struts遵循javabean的范例,用setter和getter。如:调用home.action的 URL“/home.action?framework=struts&version=2”需要action提供setFramework() 方法。struts2提供了对原子数据类型及简单对象的的自动转换。

 

4. 访问business service

下面是struets种定义的result type,还可以自定义,其中默认为dispacther(forward),redirect可以用来返回到登录页面

5. 通过action访问表单数据

1) 通过实现“aware”接口

2) Built-in tag lib. 通过value stack来访问(action提供相应名称的getter)。

 

Interceptors 拦截器

 

拦截器与servlet中的filter是很类似的。(过滤器请求先进入filter,进入过滤器链,而后进入真正的servlet,而后再回到filter)

1. Interceptor实现机制

首先,一个目标对象(被拦截的对象,实际中为action)tagart object

public interface TargetInterface {

    public void doSomething();

}

public class Target implements TargetInterface

{

public void doSomething()

{

    System.out.println("do something");

}

}

 

其次,拦截器

public class Interceptor{

public void before(){

    System.out.println("before");

}

 

public void after(){

    System.out.println("after");

}

}

 

    然后,实现InvocationHandler(实际中这个类应该是struts容器实现的)

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

 

public class MyHandler implements InvocationHandler {

    private Object object;

    private Interceptor interceptor = new Interceptor();

 

    public void setObject(Object object){

        this.object = object;

    }

 

    public Object invoke(Object proxy, Method method, Object[] args)      throws Throwable{

        Object result = null;

        interceptor.before();

        result = method.invoke(object, args);

        interceptor.after();

        return result;

    }

}

 

最后,需要一个代理类(实际中也是由struts利用java的反射机制动态生成的)

import java.lang.reflect.Proxy;

 

public class MyProxy{

    public Object getProxy(Object object){

        MyHandler myHandler = new MyHandler();

        myHandler.setObject(object);

        return Proxy.newProxyInstance(Target.class.getClassLoader(), object

                .getClass().getInterfaces(), myHandler);

    }

}

 

Client来展示如何调用:

public class Client {

    public static void main(String[] args) {

        TargetInterface target = new Target();

        MyProxy myProxy = new MyProxy();

        TargetInterface proxy = (TargetInterface)myProxy.getProxy(target);

        proxy.doSomething();

    }

}

 

其中,Target和Interceptor是我们来实现的,然而他们彼此并没有耦合。在运行当中,struts会通过配置文件自动生成handler和 proxy将他们联系在一起,这种动态耦合的方式增加了系统的灵活性。在struts和spring框架中中这种方式被大量采用。

 

2. interceptor配置

1)在配置文件struts.xml中配置interceptor

 

 

class="interceptor.ActionAutowiringInterceptor"/>

2) 在action中引用

view.jsp

    当有多个interceptor时顺序排在前面的优先。

可以定义为默认interceptor,自动应用到每个action中

3) 定义interceptor stack来同时应用多个interceptor,stack可以嵌套定义。例如在struts-default.xml中定义了

可以refer到一个interceptor或者interceptor stack,在struts看来是interceptor和stack一样的。如:

 

view.jsp

 

3. 开发interceptor

两种方法:

1) 实现接口Interceptor

2)继承AbstractInterceptor(这个类其实是实现了Interceptor接口,而把init和destroy空实现,因为这两个方法不常用,而留下intercept方法给用户实现)

例如:

public String intercept(ActionInvocation invocation) throws Exception{

        System.out.println("intercept");

        String result = invocation.invoke();

        System.out.println("finish");

        return result;

}

 

 

Value Stack / OGNL(Object Graph Navigational Language)

 

OGNL(Object Graph Navigational Language), 提供了统一的方法来访问value stack。 1. value stack则包含了下面几种对象:

-        临时对象(temporary objects):执行过程临时创建的对象,例如在对一个集合类对象执行循环的时候当前的迭代值

-        模型对象(model object):模型对象在action对象放入前进入VS

-        Action对象(action object)action本身

-        命名对象(named objects)包括 #application,#session, #request, #attr 和 #parameters等指向相应的servlet scope。

2.  访问VS的途径:

-        Tag: 包括JSP、Velocity、Freemarker等提供的。HTML tag是获取vs data经常的途径

-        OGNL

 

3.  使用vs时候不用care它的作用域,只要vs中存在相应名称的property,就可以得到value,struts会自动loop整个stack

但是当我们需要访问一个common name的对象时(比如id),就会得到第一个(也许并不是我们想要的),这时就会用到OGNL。

http://www.opensymphony.com/ognl/

 

Return Types

 

其实return给client的不单单可以是JSP页面。Struts定义了很多类型的return type。

 

1.  配置

例如:返回jsp页面的例子(forward)

 

view.jsp

2.  定义一个return type

在下定义,类似于interceptor,其中clas代表实现类,而default则表示默认的return type

 

 

class="….dispatcher.ServletDispatcherResult"/>

 

class="….dispatcher.ServletRedirectResult"/>

3.  实现return type

除了struts默认提供的,还可以自定义return type,实现下面的接口即可:

public interface Result extends Serializable {

public void execute(ActionInvocation invocation)throws Exception;

}

ActionInvocation提供了对运行时环境的访问,可以使return type访问到action执行过后的信息,以及action执行时的环境信息。其中包含有HttpServletRequest对象,可以难倒当前request的输出流。

 

分享到:
评论

相关推荐

    struts2实验报告

    开发环境: Windows操作系统 ...正文用小四号字体,段落格式首行缩进2个字符,1.5倍行距;论文中的表必须是三线表,图必须用vs画,图和表中的文本是五号字体;图必须有图序和图题,表必须有表序和表题。

    struts2 API帮助文档

    1. **Struts2核心组件** - `struts2-core`:这是Struts2框架的核心模块,包含了处理请求、调度、拦截器、结果类型、动态方法调用等功能。其中,Action接口和ActionSupport类是处理业务逻辑的基础,而.struts.xml...

    struts2核心技术整理

    总结,Struts2作为Java web开发的主流框架之一,其核心技术包括Action、Interceptor、Value Stack、OGNL等,通过这些组件和机制,开发者能够高效地构建MVC应用,实现业务逻辑与表现层的分离,同时具备良好的扩展性...

    struts2核心包

    Struts2的核心组件包括Action、Result、Interceptor等,它们协同工作,使得业务逻辑与表现层分离,提高了代码的可重用性和可测试性。 标题中的"struts2核心包"指的是Struts2框架的基础组件,其中包括`struts2-core-...

    Struts2核心包

    Struts2最新版本2.2.1中所设计的核心库文件,包括以下内容: struts2-core-2.2.1.jar:Struts2框架的核心类库。 xwork-core-2.2.1.jar:Xwork核心类库,Struts2在其上构建。 ognl-3.0.jar:对象图导航语言(Object ...

    struts2面试题

    2. **Struts2的核心组件**:Struts2的核心组件主要包括过滤器(Filter)、拦截器(Interceptor)、Action、Result等。其中,StrutsPrepareAndExecuteFilter是Struts2框架的核心组件之一,它负责初始化框架,并处理...

    Struts2教程DOC版

    二、Struts2核心组件 1. **Filter Dispatcher**:作为Struts2的核心组件,Filter Dispatcher监听HTTP请求,并根据配置转发到相应的Action。 2. **Action Mapping**:Action Mapping负责映射请求到特定的Action实例...

    struts2核心文件

    1. **Action类和ActionSupport**: Action是Struts2的核心组件,负责处理用户请求并执行业务逻辑。ActionSupport是Action的基类,提供了默认的行为,如错误处理和国际化支持。 2. **Interceptor(拦截器)**: 拦截器...

    Struts2-API+Struts2中文帮助文档

    Struts2-API文档详细列出了框架的所有公共接口和类,这是开发者理解并使用Struts2核心组件的基础。例如,`ActionSupport`类是所有自定义动作类的基类,提供了默认的行为,如错误处理和国际化。`StrutsResult`接口...

    struts2框架模板

    在本“Struts2框架模板”中,我们将探讨Struts2的基础知识、核心组件、配置文件、拦截器以及如何快速搭建一个基本的Struts2项目。 1. **Struts2基础** - **MVC模式**:Struts2遵循MVC模式,使得业务逻辑、数据模型...

    struts2.1.6所需核心jar包

    1. **Struts2核心组件**:主要包括以下几个关键部分: - `struts2-core.jar`:框架的基础,包含了Action、Result、Interceptor等核心类。 - `xwork-core.jar`:XWork框架是Struts2的基础,提供了对象容器、类型...

    struts2 2.09 java doc

    `struts-2.0.9-core.chm`文件是Struts2核心组件的JavaDoc,涵盖了框架的核心功能,如Action、Interceptor、Result、ValueStack等概念。这些组件是构建应用程序的基础,定义了请求处理流程和视图渲染机制。 `xwork....

    Struts2 核心jar包

    1. **Action**:这是Struts2的核心组件,负责处理用户请求。Action接口定义了处理请求的方法,开发者可以自定义Action类,实现特定的业务逻辑。`org.apache.struts2.dispatcher.ng.ExecuteOperations`和`org.apache....

    struts2标准jar包集

    2. **Struts2核心组件**: - **FilterDispatcher**(或现在的`struts2-core.jar`中的`StrutsPrepareAndExecuteFilter`):Struts2的前端控制器,接收并处理所有HTTP请求。 - **ActionInvocation**:执行Action的上...

    最新版struts2 核心开发包

    最新版的Struts2核心开发包提供了该框架的核心组件,旨在简化开发过程并提高效率。下面将详细介绍这些核心包以及它们在Struts2中的作用。 1. **struts2-core-2.3.7.jar**:这是Struts2框架的核心库,包含了框架的...

    struts2-blank-2.0.14的lib中的jar包

    在"struts2-blank-2.0.14"版本中,`lib`目录下的jar包是整个框架运行的基础,它们包含了Struts2核心组件、依赖的库和其他必要的工具。下面我们将详细探讨这些jar包及其在Struts2框架中的作用。 1. **Struts2核心...

    配置struts2需要的资源包

    在这个“配置struts2需要的资源包”的主题中,我们将详细探讨Struts2的核心组件、依赖库以及如何精简不必要的包。 1. **Struts2核心组件**: - **Struts2核心库**:`struts2-core.jar`包含了框架的核心功能,如...

    struts2核心包(保证好用)

    2. **核心组件** - **Action类**:是业务逻辑的执行者,每个Action对应一个用户操作,负责处理请求并返回结果。 - **配置文件**:通常为struts.xml,定义Action的映射、结果类型、拦截器等。 - **Interceptor...

    亲测Struts2 3.4.1必需包

    1. **Struts2核心组件**:Struts2的核心库包含了处理请求、响应、拦截器、结果类型、插件机制等关键功能。开发者需要这个核心包来构建基于Action的控制器,实现MVC设计模式。 2. **依赖的库**:Struts2的正常工作...

Global site tag (gtag.js) - Google Analytics