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. Char、float、Double、BigDecimal

    Char初识 char: char类型是一个单一的 16 位 Unicode 字符 char 在java中是2个字节("字节"是byte,"位"是bit ,1 ...

  2. 深度解析Critical Thinking的四个阶段

    关于批判性思维我们一直都在讨论学习,但是小编相信没有几个留学生敢说自己有Critical Thinking,但它又是essay写作中必须存在的.那么批判性思维需要怎么培养呢?今天小编就给同学们分析一下 ...

  3. 雷火神山直播超两亿,Web播放器事件监听是怎么实现的?

    Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播.在视频业务大数据平台中,播放数据的统计分析非常重要,所以We ...

  4. Docker 搭建开源跳板机_jumpserver (运维开源堡垒机_jumpserver) Centos_7.0

    最近看到一个开源项目(jumpserver)  很不错  还是用Docker  部署得 ... 抽了点时间拿来学习一下  部署    分析   简单使用一下  ....好了先搭起来 准备 工作:    ...

  5. AVCodecContext 结构体

    typedef struct AVCodecContext { int bit_rate; int frame_number; //扩展数据,如mov 格式中audio trak 中aac 格式中es ...

  6. 个人网站一步一步搭建——(20)成功在本地IIS运行

    昨天网站都做完了,今天发布.然后在IIS运行成功了. 遇到了很多问题  发布了不低于10次 头都晕了. 问题1:之前写了很多调试代码 console.log(); 慢慢删除完,. 问题2:vue 不能 ...

  7. vs使用opencv总提示igdrclneo64.dll异常.exe: 0xC0000005:的解决方法

    最近项目中要使用opencv库,搭建好环境,使用接口的时候,总提示 igdrclneo64.dll报错崩溃,一直怀疑是自己程序的问题,后面经过一系列的查资料才解决 解决办法: 本地环境:vs2015+ ...

  8. 关于RxJS 处理多个Http请求 串行与并行方法

    mergeMap mergeMap 操作符用于从内部的 Observable 对象中获取值,然后返回给父级流对象. 合并 Observable 对象 123456 import { of } from ...

  9. PHP ~ 设置和读取 Cookie

    一,设置 Cookie setcookie("user",$user,time()+3600);     // user 为用户名,$user 为变量的值   二,读取 Cooki ...

  10. DNS bind9安装

    参考   111 首先要成功安装Centos操作系统,最新版本是Centos 6.4版本,最小化安装. [root@localhost named]# ifconfig -a     0 1 eth1 ...