Struts2工作流程理解

Struts2的工作流程的理解:

1. 客户端浏览器向servlet容器(Tomcat)发出请求。

2. Web.xml配置的过滤器StrutsPrepareAndExecuteFilter起作用,设定的请求转发给Struts。

3. StrutsPrepareAndExecuteFilter过滤器到ActionMapper中查找Action。

4. 如果找到了Action,那么控制权移交给ActionProxy。

5. ActionProxy向ConfigurationManager查询配置文件struts.xml信息,加载Action类。

6. ActionProxy创建了ActionInvocation负责命令模式的实现。

7. 拦截器调用

8. 执行Action的方法(默认execute或者指定方法),ActionInvocation根据返回结果查找对应的视图资源。

9. 执行返回结果。

10. 拦截器反向调用

11. 清除ActionContext的内容,完成访问。

Struts2开发的简单流程

一个最简单的例子。首先我们需要将struts2的支持库添加到lib文件夹下。需要注意的是Struts2通过在web.xml中配置过滤器建立和web应用的关联。

过滤器

<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>

在web项目的源码文件夹下,需要创建名为struts.xml的配置文件,这个文件定义了Action对象,Action对象用<result>指定了要返回的页面。

Struts配置信息

<struts>
    <package name="myPakeage" extends="struts-default">
       <action name="first">
           <result>/first.jsp</result>
       </action>
    </package>
</struts>

使用actionName.action的方式调用action

<a href="first.action">struts2</a>

调用上述Action后,输出页面first.jsp的内容。上述方式测试并没有建立一个实际的Action类,下面我们建立一个实际的Action对象。它有两个方法add和update和属性info以及他的getter和setter访问器。

package www.gongqingkui.cn;
 
 
import com.opensymphony.xwork2.ActionSupport;
 
public class userAction extends ActionSupport {
         private String info;
 
         public StringgetInfo() {
                  return info;
         }
 
         public voidsetInfo(String info) {
                  this.info =info;
         }
         public String add(){
                  info ="add method";
                  return"add";
         }
         public Stringupdate(){
                  info="update method";
                  return"update";
         }
}

在Struts2.xml中配置上述Action以及跳转信息。

<action name="userAction"class="www.gongqingkui.cn.userAction">
                            <resultname="add">/addResult.jsp</result>
                            <resultname="update">/updateResult.jsp</result>
</action>

建立跳转到的显示页面,如addResult.jsp,使用struts2标签输出Action中的属性info。要使用struts2标签,需要引入struts标签。

<%@ taglib prefix="s" uri="/struts-tags"%>
<body>
    AddResultpage!<s:property value="info"/>
</body>

在index.jsp中建立访问上述Action不同功能方法的连接,注意这里需要使用!分隔符。

<a href="userAction!add">userAction!add</a>
    <ahref="userAction!update">userAction!update</a>

上述程序,用户点击链接时为http://192.168.195.54:8080/JavaWeb_8_Struts2/userAction!add结构,后面的字串指示用userAction的add方法。根据方法具体返回值和result标签的name对应,如上述连接在userAction的add方法中返回字串add,这个结果和name=”add”的result标签对应起来就是要显示addResult.jsp页面。这里info信息在程序里进行了设置,我们也可以采用注入的方式,将上述连接作为表格的提交连接,info作为变量传入即可,形式为http://127.0.0.1:8080/JavaWeb_8_Struts2/userAction!add?info=bb,这样bb就作为info传入。如果将方法名作为name的参数传入action标签的属性中,则可以根据方法名进行跳转。

此时的配置信息应改成

<action name="userAction" class="www.gongqingkui.cn.userAction" method="add">
           <result>/addResult.jsp</result>
       </action>
       <action name="userAction" class="www.gongqingkui.cn.userAction" method="update">
           <result>/updateResult.jsp</result>
       </action>

而其Action方法应该改成

public String add(){
                  info ="add method";
                  returnSUCCESS;
         }
         public Stringupdate(){
                  info ="update method";
                  returnSUCCESS;
         }

SUCCESS返回值默认直接显示,不用标出name名,其它方法则需要表示出。为了简化开发,Struts2支持通配符匹配,什么情况是不言而喻的了吧。

<action name="*Action" class="www.gongqingkui.cn.{1}Action">
       <result name="error">/error.jsp</result>
       <result name="add">/add.jsp</result>     
    </action>

参考文献

1.      Struts的简单使用

2.      Struts+Spring+Hibernate整合的简单实例

3.      理解Struts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gongqingkui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值