1、Struts开发基础

1.1  MVC的基本概念

 mvc将一个应用系统的输入、处理和输出流程按照Model(模型)、View(视图)和Controller(控制器)三部分进行分离,划分成模型层、视图层和控制层。三层之间以最少的耦合来协同工作,从而提高了应用

系统的可扩展性和可维护性。

   MVC思想的核心就是分层。它将系统的各个组件进行分类,不同的组件扮演不同的角色,然后将系统中的组件分隔到不同的层中,这些组件将被严格限制在其所在的层内。各层之间则以松散耦合的方式组合在一起,从而保证良好的封装性。MVC三层之间的关系如图所示。

1. 模型层

  模型层代表的是数据和其对应的业务逻辑。它负责对数据进行处理和更新。通常,模型和现实世界对数据的处理过程类似,业务处理的过程对于视图层和控制层来说是黑箱操作:模型层接受视图层(通过控制层传送到)的请求数据,并返回最终的处理结果,以更新视图层。

2.视图层

  视图层实际上是模型层中各个模型的具体表现形式。它通过模型得到数据,然后再根据需要进行显示。视图层必须保持着与模型层的数据模型一致,即当模型层的数据发生变化时,视图层必须随之变化。

3.控制层

  控制层在MVC结构中连接模型层和视图层,起到了纽带的作用。它将视图层的交互信息进行过滤等处理后,再传送到模型层相应的逻辑业务处理程序进行处理。

  在Web应用中,视图层首先向控制层发送信息,控制层接收到请求后,再把请求信息传递给模型层,告知模型应该做什么处理,接着,模型接受请求数据,并产生最终的处理结果。模型层对应的动作包括:业务处理和模型状态的改变,最后根据模型层产生的结果,控制层将数据反馈给用户,并在浏览器中显示。

  总的来说,MVC有如下特点:

  • 低耦合性。MVC架构通过分层,降低了层与层之间的耦合,提高了程序的可扩展性,有助于程序员灵活的进行编码。
  • 一个模型可以对应多个视图。按照MVC的设计模式,一个模型对应多个视图,可以提高代码的可维护性。即使模型发生改变,也方便维护。
  • 模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,各层只负责自己的任务,而不用去管其他层的任务。
  • 有利于工程化管理。MVC将不同的模型和不同的视图组合在一起进行管理,层与层之间分离,每一层都有各自的特色。由于代码可复用,因此降低了软件开发周期。

1.2 Struts的工作原理

1.Struts概述

  Struts1是真正意义上的MVC模式,,但Struts1在性能高效、松耦低侵入等方面存在着不足之处。所以Struts2出现弥补了Struts1这方面的缺陷和不足,并且还提供了更加灵活与强大的功能。

  Struts2并不是Struts1的升级版,而是一个全新的框架。它将Struts技术与WebWork技术完美地结合起来,所以功能更加灵活。

2.Struts2工作流程

  Struts2是一个全新的开发框架,如图所示为Struts2的体系结构图。

  • 橙色是Servlet Filters,过滤器链,所有的请求都要经过Filter链的处理。
  • 浅蓝色是Struts Core,Struts2的核心部分,Struts2中已经做好的功能,在实际开发中不需要动它们。
  • 浅绿色是Interceptors,Struts2的拦截器。Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;当然,也可以自定义拦截器,用来实现具体业务需要的功能。
  • 浅黄色是User Created,由开发人员创建的,包括struts.xml、Action、Template,是每个使用Struts2来进行开发的人员都必须会的。

各自功能:

  • FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。
  • ActionMapper提供了HTTP请求与action执行之间的映射,简单点说,ActionMapper会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
  • ActionProxy是一个特别的中间层,位于Action和xwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。
  • ConfigurationManager是xwork配置的管理中心,通俗的讲,可以把它看做struts.xml这个配置文件在内存中的对应。
  • struts.xml是Stuts2的应用配置文件,负责诸如URL与Action之间映射的配置、以及执行后页面跳转的Result配置等。
  • ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result。
  • Interceptor(拦截器):拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。类似于我们熟悉的javax.servlet.Filter。
  • Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据。
  • Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如Jsp,FreeMarker等。
  • Templates:各种视图类型的页面模板,比如JSP就是一种模板页面技术。
  • Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术JSP、velocity、freemarker,可以在不同的视图技术中,几乎没有差别的使用这些标签。

Struts2处理请求步骤:

  1. 用户发出一个HttpServletRequest请求。
  2. 该请求经过一系列的过滤器Filter来传送。
  3. 调用FilterDispatcher。FilterDispatcher是控制器的核心,它通过询问ActionMapper来确定该请求是否需要调用某个Action。如果需要调用某个Action,则FilterDispatcher就把请求转交给ActionProxy处理。
  4. ActionProxy通过配置管理器Configuration Mannager询问框架的配置文件Struts.xml,从而找到需要调用的Action类。
  5. ActionProxy创建一个ActionInvocation的实例,该实例使用命名模式来调用。在Action执行的前后,ActionInvocation实例根据配置文件加载与Action相关的所有拦截器Interceptor。
  6. 一旦Action执行完毕,ActionInvocation实例就根据Struts.xml文件中的配置找到相对应的返回结果。返回结果通常是一个JSP或者FreeMarker的模板。其中,FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或Http。

Struts学习(一)的更多相关文章

  1. struts 学习

    1.在Struts2的Action中取得请求参数值的几种方法 public class GetRequestParameterAction extends ActionSupport { privat ...

  2. Struts学习总结 学习

    ContextMap 包含值栈包含 root(list结构)和context(map结构)  值栈包含contextMap的引用.  Actioncontext是工具类 可以获取他们 Struts2拥 ...

  3. mzy,struts学习(一)

    大家都在讲struts已经过时了,现在都是前后台分离,没有必要去学一个淘汰的框架,但是怎么讲呢?我觉得,struts能够流行那么多年,肯定有它的原因,肯定有很多优秀和好的地方,有一个指导过我的人给我讲 ...

  4. struts学习

    1.集成tomcat到eclipse http://www.eclipsetotale.com/tomcatPlugin.html 下载最新的plug后,解压.解压后的文件放到eclipse的plug ...

  5. Struts学习总结-04 上传文件

    1. upload.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  6. Struts学习总结-02 类型转换

    一 类型转换 input.jsp <%@ page language="java" import="java.util.*" pageEncoding=& ...

  7. struts 学习之问一

    今天在进行struts全局类型和局部类型转换时,发现一个问题,如下: 当输入一个点的坐标时,我使用全局转换提示错误,找不到类,当改变成局部类型转换时,可以成功转换,不知道这个是什么原因,难道全局不可以 ...

  8. Struts学习之流程汇总

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

  9. Struts学习之手动验证

    * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法    * 要继承ActionSupport类或者实现Validateable接口     ...

  10. Struts学习之文件上传

    * 单文件上传:        * 在动作类action中声明相关属性:            * 在动作类action中,要声明与页面中表单name属性同名的属性,同名的属性的类型是File类型:  ...

随机推荐

  1. 【Linux】CentOS6上mysql5.7安装

    1.下载安装yum源 根据系统下载yum源 https://dev.mysql.com/downloads/repo/yum/ rpm -ivh xxxxx.rpm 2.修改yum源 vim /etc ...

  2. Vue $root、$parent、$refs

    Vue处理边界parent.$refs 下面的功能都是有风险的,尽量避免使用 Vue 子组件可以通过 $root 属性访问父组件实例的属性和方法 <div id="app"& ...

  3. UML中共有5种静态图

    用例图,类图,对象图,组件图和配置图.

  4. 【NOIP2016提高A组五校联考1】道路规划

    题目 分析 我们考虑,当现在有一个合法的集合时,如何往里面增加一个点,使这个集合仍然合法. 假设现在有一个合法的集合, 那么当我们加入一个点,它的道路穿过来整个集合,那么 然后搞一遍最长下降子序列就可 ...

  5. 转 弹性反向传播(RProp)和均方根反向传播(RMSProp)

    from http://blog.csdn.net/tsq292978891/article/details/78619384 都是一种权值更新算法,类似于SGD算法,其中,RMSProp是RProp ...

  6. Fiddler的工作原理与主菜单介绍(一)

    1.简介: 官网:https://www.telerik.com/fiddler Fiddler是比较好用的web代理调试工具之一,它能记录并检查所有客户端与服务端的HTTP/HTTPS请求,能够设置 ...

  7. CF1263F

    题目描述 给出一个类似这样 的图,求删掉最多的黑边使得每个特殊点和至少一个节点1连通 保证上下两棵树都存在一种dfs序使得访问特殊点的顺序为1~n 题解 设f[i][j]表示上面的树最后一个特殊点为i ...

  8. css-div中文字过多(内容超出div宽度)后自动换行

    故事是这样的: 买家秀:(refuse)                                                                                ...

  9. Codecombat 游戏攻略(计算机科学三)2

    第33关 逻辑之路 判断secretB 非真,走上面:否则,走下面(这里面要先自己进行逻辑判断)if…else语句或者这样用(不用自己进行判断) // 如果 secretB 非真,走上面:否则,走下面 ...

  10. Linux培训教程 Git在linux下的使用

       *初始化git仓库,使用gitinit命令 *添加文件到git仓库分两步: 1.使用git add filename ;可分多次使用,添加多个文件到暂存区 2.使用git commit -m “ ...