Struts 2的流程

一.Struts 2 的开发步骤:

  1. 在web.xml中定义核心的Filter来拦截用户的请求。

    由于Web应用时基于请求/响应架构的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心Servlet和Filter,这样才可以让框架介入到Web应用中。

    开发Struts 2应用的第一步就是在web.xml中配置如下片段:

<!--定义Struts2的核心Filter-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>Struts2版本为2.5以上时这样写
</filter>
<!--让Struts2的核心拦截所有的请求-->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 2.如果需要使用POST方法来提交请求,则定义包含表单数据的JSP页面,如果仅仅只是以GET方法发送请求,则无需定义这一步

   3.定义用户请求的Action类

    这一步时MVC框架中必不可少的,因为这个Action就是MVC中的C,也就是控制器,该控制器负责调用Mode里的方法来处理请求上一节只是介绍Struts2的用法,并未使用Model来处理用户的请求,而是使用Action对用户的请求做了简单的处理。

    Actions是怎样处理用户的请求呢?

    MVC底层的机制是:核心的Servlet和Filter接受到用户的请求后,就会对用户的请求进行简单的预处理,如解析,封装参数等,然后通过反射来创建Action实例,并调用Action的指定方法(Struts1通常是execute方法,Struts2可以是任何方法)来处理用户的请求。

    当Servlet或者Filter拦截用户的请求后是如何知道创建哪个Action实例呢?

    * 利用配置文件:例如我们可以配置login.action对应使用LoginAction类,这就可以让MVC 框架知道创建哪个Action实例了。

    * 利用约定: 可以约定xxx.action对应XxxAction类,如果核心控制器收到regist.action请求后就会调用RegistAction类来处理用户的请求

    由上可知,在MVC框架中,控制器实际上是由2个部分组成,既拦截所有用户请求,处理请求的通用代码都是由核心控制器来组成,而实际上的业务控制是由Action来处理的。

    4.配置Action

    对于Java领域的大部分MVC框架而言,都非常喜欢使用xml来配置管理,配置哪个Action就使用哪个Action来处理,从而让核心控制器根据改配置来创建合适的Avtion实例,并调用该实例的业务逻辑方法。例如,我们通常用如下代码片段来配置Action

     <action name="login" class="com.strtus2.action.DemoLog">

     </action>

    如果用户请求的URL是login,则使用com.struts2.action.DemoLog来处理。

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

    当Action处理了用户的请求后,通常换返回一个处理结果(这个结果通常是使用一个简单的字符串来表示)我们可以认为这个结果就是逻辑视图名,但是这个逻辑视图名必须要与指定的物理视图资源关联才有价值,所以我们还需要配置处理结果之间的对应关系。

    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="com.strtus2.action.DemoLog">
          <result name="success">/Helloword.jsp</result>
          <result name="error">/error.jsp</result>
        </action>
    </package>

    上面的红色字体指定了三个处理结果和三个物理视图之间的映射关系,当com.struts2.action.DemoLog返回success时,就进入HelloWord.jsp页面,当返回error时,就进入到error.jsp页面。

    6.编写视图资源

二.Struts2的流程

  图中的StrutsPrepareAndExecuteFilter和XxxAction共同组成了Struts2的控制器,常常把 StrutsPrepareAndExecuteFilter称为核心控制器,把XxxAction称为业务控制器。

  业务控制器通常并不与物理视图关联,这样做法提供了很好的解耦,业务逻辑控制器只返回处理结果,而处理结果与什么样的物理视图关联,依然由StrutsPrepareAndExecuteFilter来决定,这样做的好处是:如果有一天,需要将某个视图名映射到不同的视图资源上,这就无需修改XxxAction的代码,而是只需修改配置文件即可。

  这里还可以看出,在Struts2的控制下,用户请求不再项JSP页面发送,而是由核心控制器StrutsPrepareAndExecuteFilter来调用JSP页面来生成响应,此处的调用不是直接调用,而是将请求forward到指定的JSP页面。

  

Struts 2的流程的更多相关文章

  1. Struts2学习---拦截器+struts的工作流程+struts声明式异常处理

    这一节我们来看看拦截器,在讲这个之前我是准备先看struts的声明式异常处理的,但是我发现这个声明式异常处理就是由拦截器实现的,所以就将拦截器的内容放到了前面. 这一节的内容是这样的: 拦截器的介绍 ...

  2. Struts 2 执行流程 配置信息

    Struts 2 执行流程 首先,浏览器访问,经过Filter,Filter从src/struts.xml中寻找命名空间和action的名字,获取action类,从方法中拿到返回值,接着从result ...

  3. struts的工作流程

    - 一个请求过来,走前端控制器StrutsPrepareAndExecuteFilter        -前端控制器是一个过滤器,过滤器中的核心方法是doFilter(),doFilter方法中首先处 ...

  4. Struts学习之流程汇总

    struts2 架构图如下图所示: 依照上图,我们可以看出一个请求在struts的处理大概有如下步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的 ...

  5. Struts Convention Plugin 流程 (2.1.6+)

    首先添加lib: <dependency> <groupId>org.apache.struts</groupId> <artifactId>strut ...

  6. Struts 2开发基本流程

    Struts 2工作流程 Struts2是一个基于MVC设计模式的Web开发框架, 正如官网上介绍的那样: ApacheStruts 2 is an elegant, extensible frame ...

  7. 实例模拟struts核心流程

    Struts,经典框架之一,每个java  web 开发人员都应该晓得它的大名.这里,我就用一个简单实例来模拟一下struts的核心流程.具体实例如下: 主界面: 点击提交后,程序根据具体的actio ...

  8. Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】

    前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...

  9. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

随机推荐

  1. 提交作业 C语言I作业11

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 http://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10127 我在这个课程的目标 ...

  2. Web.config中executionTimeout的单位

    executionTimeout:表示允许执行请求的最大时间限制,单位为秒

  3. [转]Spark SQL2.X 在100TB上的Adaptive execution(自适应执行)实践

    Spark SQL是Apache Spark最广泛使用的一个组件,它提供了非常友好的接口来分布式处理结构化数据,在很多应用领域都有成功的生产实践,但是在超大规模集群和数据集上,Spark SQL仍然遇 ...

  4. CentOS7上防火墙操作

    firewalld打开关闭防火墙与端口 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl statu ...

  5. POJ 3311 Hie with the Pie 最短路+状压DP

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11243   Accepted: 5963 ...

  6. ZOJ - 3870 Team Formation(异或)

    题意:给定N个数,求这N个数中满足A ⊕ B > max{A, B})的AB有多少对.(A,B是N中的某两个数) 分析: 1.异或,首先想到转化为二进制. eg:110011(A)和 1(B)- ...

  7. datetime使用

      通过当前日期,获取最近第一个周五.第二个周五.每季度末最后一个周五 def get_current_week(self, symbol: str, start_date: datetime): i ...

  8. C语言-存储类&作用域&生命周期&链接属性

    1.概念解析(1)存储类 a.存储类就是存储类型,也就是描述C语言变量在何种地方存储. b.内存有多种管理办法:栈.堆.数据段.bss段..text段......一个变量的存储类属性就是描述这个变量存 ...

  9. Mybatis报错——Mapped Statements collection already contains value for

    解决办法: 看看你的mybatis-config.xml <mappers>     <mapper resource="mapper/SeckillDao.xml&quo ...

  10. 从架构师视角看是否该用Kotlin做服务端开发?

    前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了 ...