Struts2

一、Struts2

1.1 Struts2的定义

Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

1.2 Struts2的工作原理

Struts2工作流程

  1. 客户端提交一个HttpServletRequest请求(actionJSP页面)。
  2. 请求被提交到一系列Filter过滤器,如ActionCleanUpFilterDispatcher等。
  3. FilterDispatcherStruts2控制器的核心,它通常是过滤器链中的最后一个过滤器。
  4. 请求被发送到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个action来处理这个Request
  5. 如果ActionMapper决定需要调用某个actionFilterDispatcher则把请求交给ActionProxy进行处理。
  6. ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到调用的action类。
  7. ActionProxy创建一个ActionInvocation实例,通过代理模式调用Action
  8. action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Intercepter拦截器。
  9. 最后ActionInvocation实例,负责根据struts.xml中配置result元素,找到与之相对应的result,决定进一步输出。

1.3 Struts2的构成

  1. FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。
  2. ActionMapper提供了HTTP请求与action执行之间的映射,简单点说,ActionMapper会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
  3. ActionProxy是一个特别的中间层,位于Actionxwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。
  4. ConfigurationManagerxwork配置的管理中心,通俗的讲,可以把它看做struts.xml这个配置文件在内存中的对应。
  5. struts.xml是Stuts2的应用配置文件,负责诸如URLAction之间映射的配置、以及执行后页面跳转的Result配置等。
  6. ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result
  7. Interceptor(拦截器):拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。类似于我们熟悉的javax.servlet.Filter
  8. Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据。
  9. ResultResult就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如JspFreeMarker等。
  10. Templates:各种视图类型的页面模板,比如JSP就是一种模板页面技术。
  11. Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术JSPvelocityfreemarker,可以在不同的视图技术中,几乎没有差别的使用这些标签。

1.4 Struts2的特点

  1. POJO形式和POJO动作 - 已经摆脱了Struts2的动作表单的Struts框架的一个组成部分。Struts2可以使用任何的POJO接收的形式输入。同样的,你现在可以看到任何POJO的Action类。
  2. Tag支持 - Struts2的形式提高了标签的新标签让开发人员写更少的代码。
  3. AJAX支持- Struts2中已经认识到了Web2.0技术,并整合到产品中AJAX支持创建AJAX的标签,该功能非常相似的标准Struts2的标签。
  4. 容易整合 - 与其他框架如Spring,Tiles和SiteMesh的整合是现在更容易与各种集成Struts2。
  5. 模板支持 - 支持生成使用模板。
  6. 插件支持 - 核心Struts2行为,可以加强和扩大使用插件。大量的插件可供Struts2。
  7. 概要分析- Struts2的提供集成的配置,调试和分析应用程序。此外,Struts还提供了内置调试工具的帮助下,集成调试。
  8. 标签修改容易 - 在Struts2标签标记,可以调整使用FreeMarker模板。这并不需要JSP或Java知识。基本的HTML,XML和CSS知识是不够的修改的标签。
  9. 提升更少的配置 - Struts2的促进更少的配置与用于各种设置的帮助下,使用默认值。你没有的东西,除非它偏离由Struts2的默认设置的配置。

二、Struts2的简单配置

2.1 解压Struts2的压缩包

如图下所示
Struts2文件结构

apps:应用示例
docs:文档资料
lib:库(*.jar)文件
src:源码资料

2.2 解压apps\struts2-blank.war(提供的空工程)

如图所示
struts2-blank
示例空白工程源码

2.3 找到项目的配置文件

struts2-blank\WEB-INF\web.xml
拷贝过滤器的配置信息到自己的项目中(通过观察发现,该过滤器过滤项目中所有的请求)
<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>

2.4 拷贝项目中的jar包

struts2-blank\WEB-INF\lib路径下所有的jar包

lib

2.5 拷贝struts2的核心配置文件(struts.xml)

将struts2-blank\WEB-INF\classes\struts.xml
拷贝至src根目录
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

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

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

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

        <global-results>
            <result name="error">/WEB-INF/jsp/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>

    <include file="example.xml"/>

    <!-- Add packages here -->

</struts>

2.6 创建一个普通的java类,然后再类中创建一个普通的方法

public class Hello {
    public String helloStruts() {
        System.out.println("Hello Struts " + this);
        return null;
    }
}

2.7 开始在struts.xml中配置java类

删除其他的配置信息
package标签中配置action元素以及name,class,method三个属性。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="shs" class="shs.hello.Hello" method="helloStruts"></action>
    </package>
</struts>

2.8 运行服务器并访问

运行结果

参考Struts2-百度百科Struts2工作流程Struts2快速入门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值