小结struts2应用开发步骤和流程(三)

20 篇文章 0 订阅
10 篇文章 0 订阅


先根据前面第一个struts2应用简单小结一下struts2应用的开发步骤。

1. 在web.xml文件中定义核心Filter,用于拦截用户请求。

由于Web应用是基于请求/响应架构的应用,所以所有MVC Web框架都需要在web.xml文件中配置该框架的核心Servlet或Filter,才可以使该框架介入Web应用中。如开发struts2应用的第一步是在web.xml文件中增加如下配置代码:

<!-- 定义struts2核心Filter -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <!-- 让struts2的核心Filter拦截所有action请求 -->
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

2. 如果以POST方式请求,则要定义包含表单数据的JSP页面。如果仅仅只是以GET方式发送请求,则不需要。

3. 定义处理用户请求的Action类。

这是所有MVC框架必不可少的,因为Action是MVC中的C,即控制器,该控制器负责调用Model里的方法来处理请求。我们注意到Action处理用户请求前并未接收到用户请求,又为什么能处理请求呢?MVC框架的底层机制是:核心Servlet或Filter接收到用户请求后,通常会对用户请求进行简单预处理,例如解析、封装参数等,然后通过反射来创建Action实例,并调用Action的指定方法(struts1通常是execute,struts2可以是自定义方法)来处理请求。那Servlet或Filter拦截用户请求后,又如何知道创建哪个Action的实例呢?一般有两种方法:

  • 使用配置文件:如配置login.action对应使用LoginAction类,这样MVC框架就知道创建哪个Action的实例了;
  • 使用约定:例如约定xxx.action总是对应XxxAction类,如核心控制器收到regist.action请求后,将会调用RegistAction类来处理用户请求,struts2版本中已有对应实现,即其所提供的Convention(约定插件)。

由此可见,MVC框架中,控制器实际由两个部分组成,即拦截所有用户请求,处理请求的通用代码都由核心控制器完成,而实际业务控制(如调用Model,返回处理结果等)则由Action处理。

4. 配置Action。Java大部分MVC框架都常用xml文件配置管理。配置Action就是指定某个请求对应使用某个Action进行处理,从而让核心控制器根据配置来创建合适的Action实例,并调用该Action的业务控制方法。如

<action name="product-save" class="com.afy.struts2.helloworld.Product" method="save">
   <result name="details">
      /WEB-INF/pages/details.jsp 
   </result>
</action>

这段代码指定如果用户请求URL为product-save,则使用com.afy.struts2.helloworld.Product来处理。

现在struts2的Convention插件借鉴了Rails框架的有点,开始支持“约定优于配置”的思想,就是采用约定方式规定用户请求地址和Action之间的对应关系。

5. 配置处理结果和物理视图资源之间的对应关系

当Action处理用户请求完之后,通常会返回一个处理结果(通常使用简单的字符串),可以认为该名称就是逻辑视图名,这个逻辑视图名需要和指定物理视图资源关联才有价值。所以需要配置处理结果之间的对应关系。

<action name="product-save" class="com.afy.struts2.helloworld.Product" method="save">
   <result name="details">/WEB-INF/pages/details.jsp 
   </result>
   <result name="new">/WEB-INF/pages/input.jsp
   </result>
</action>

这段代码指定当Product返回details时,进入/WEB-INF/pages/details.jsp 页面;当返回new时,进入/WEB-INF/pages/input.jsp页面。

6. 编写视图资源。

如果Action需要把一些数据传给视图资源,则可以借助于OGNL表达式。



以上是开发struts2应用的主要步骤,是执行一次完整的请求—>响应过程。下面通过一张简单的流程图介绍请求—>响应的完整流程

这里写图片描述

我们看到StrutsPrepareAndExecuteFilter和XxxAction共同构成struts2的控制器,常把StrutsPrepareAndExecuteFilter称为核心控制器,把XxxAction称为业务控制器。

业务控制器通常不与物理视图关联,这样提供很好的解耦。业务控制器只负责返回处理结果,而该处理结果与怎样的视图关联,依然由StrutsPrepareAndExecuteFilter来决定。如果要将某个视图映射到不同视图资源,这样就不用修改XxxAction的代码,而只是修改配置文件。

struts2框架下,用户请求不再向JSP页面发送,而是由核心控制器StrutsPrepareAndExecuteFilter“调用”JSP页面生成响应,这里的调用不是直接调用,是将请求forward到指定的JSP页面。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值