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. 第一个flink application

    导入maven依赖 需要注意的是,如果使用scala写程序,导入的依赖跟java是不一样的 Maven Dependencies You can add the following dependenc ...

  2. js(JavaScript)使用${pageContext.request.contextPath}报错

    前几天写程序在js文件中用到了${pageContext.request.contextPath}然后一直报错,没有办法post到服务器,原来js把这个当成字符串了,一直以为他是jquery的函数! ...

  3. 第二十一篇 关联管理器(RelatedManager)

    关联管理器(RelatedManager) lass RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况: Forei ...

  4. 【Python】【Django】查询所有学生信息

    要做到以下效果: 改代码后效果: 从0开始顺序计数: 倒叙计数到0

  5. Inheritance and the prototype chain 继承和 原型 链

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain Inherita ...

  6. Web基础之Redis

    Redis 什么是Redis?Redis是一个基于内存的非关系型数据库,简单来说就是一个可持久化的高速缓存. 常用场景: 缓存(数据查询,端链接,新闻内容,商品内容等等)--使用最多 聊天室的在线好友 ...

  7. vue-router 二级路由(父子路由)

    使用二级路由 会显示父路由下面的子路由  且父子路由同时显示 因为父子同时显示  路由地址在同一级别/ 路由的显示模式有两种(都是为了减少数据库后台请求次数) #hash模式(#是特殊字符,很多场合不 ...

  8. 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题

    问题描述:使用Glide加载RecyclerView的Item中的图片,RecyclerView使用了瀑布流展示图片,但是滚动时图片会不断的加载,并且大小位置都会改变,造成显示错乱. 解决方法:使用瀑 ...

  9. Redis获取缓存异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX

    Redis获取缓存异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX. 出现这种异常,我需要自 ...

  10. 【分类问题中模型的性能度量(二)】超强整理,超详细解析,一文彻底搞懂ROC、AUC

    文章目录 1.背景 2.ROC曲线 2.1 ROC名称溯源(选看) 2.2 ROC曲线的绘制 3.AUC(Area Under ROC Curve) 3.1 AUC来历 3.2 AUC几何意义 3.3 ...