Struts2概述
1.简介
Struts就是在Model2的基础上实现的一个MVC框架,它只有一个中心控制器,采用XML定制的转向的URL,采用Action来处理逻辑。
2.Struts2的MVC模式
MVC将一个应用的输入、处理和输出流程按照模型、视图和控制器三部分进行分离,这样,一个应用就可以划分为模型层、视图层和控制器层3个层次,三层之间最少的耦合来协同工作。
在Struts2中,视图层对应视图组件,通常是指JSP页面,也适用于Velocity、FreeMarker等其他视图显示技术。模型层对应业务逻辑组件,它通常用于实现业务逻辑及底层数据库的交互等。控制层对应系统核心控制器和业务逻辑控制器。
系统核心控制器为Struts2框架提供的StrutsPrepareAndExecuteFilter,它是一个起过滤作用的类,能根据请求自动调用相应的Action。而业务逻辑控制器是开发者自定义的一些列Action,在Action中负责调用相应的业务逻辑组件,来完成调用处理。
优势:
·通过简单、集中的配置来调度业务类,使得配置和修改都非常容易。
·提供简单、统一的表达式语言来访问所有可供访问的数据。
·提供标准、强大的验证框架和国际化框架。
·提供强大的、可以有效减少页面代码的标签。
·提供良好的Ajax支持。
·拥有简单的插件,只需放入相应的JAR包,任何人都可以扩展Struts2框架,比如自定义拦截器、自定义结果类型等,为Struts2定制需要的功能,而且可以发布给其他人使用。
·拥有智能的默认设置,不需要另外进行繁琐的设置。使用默认设置可以完成大多数应用程序开发所需要的功能。
3.Struts2的工作原理
在Struts2中,通过拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet分离,在处理请求的过程中以用户的业务逻辑控制器为目标,创建一个控制器代理,控制器代理回调业务控制器中的execute方法来处理用户的请求,该方法的返回值决定了Struts2以怎样的视图资源呈现给用户。
①、浏览器发送请求,例如login.action、reg.action等。
②、控制层的核心控制器(StrutsPrepareAndExecuteFilter)根据请求调用相应的Action。
③、Struts2的拦截器链(即一系列拦截器)自动对请求进行相关的控制逻辑,如数据校验、数据封装和文件上传等功能。
④、回调Action的execute方法(Action对象的默认方法),根据用户请求参数执行某种业务逻辑操作。实际上Action只是一个控制器,它调用业务逻辑组件来处理用户的请求。
⑤、execute方法会返回一个字符串输出,该输出经过拦截器链自行处理,这与开始的拦截器链处理是相反的过程,核心控制器(StrutsPrepareAndExecuteFilter)将根据返回的字符串跳转到指定的视图资源,呈现给用户。
由此,Struts2与MVC思想是相对应的,核心控制器对应着MVC中的控制层,Action对应着MVC中的模型层,产生的结果Result对应着MVC中的视图层。
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:是Struts2的应用配置文件,负责诸如URL与Action之间的映射的配置,以及执行后页面跳转的Result配置等。
·ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result。
·Interceptor:拦截器是一些无状态的类,拦截器可以自动拦截Action,他们给开发者提供了在Action运行之前或Result运行之后执行一些功能代码的机会。类似于我们熟悉的java.servlet.Filter。
·Action:动作类是Struts2中的动作执行单元。用来处理用户的请求,并封装业务所需要的数据。
·Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如JSP、FreeMarkr等。
·Templates:各种视图类型的页面模板,例如,JSP就是一种模板页面技术。
·Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术:JSP、Velocity、FreeMarker,可以在不同的视图技术中,几乎没有差别地使用这些标签。
Struts2的核心概念
1.FilterDispatcher:
Struts2的前端控制器,作为MVC模式中的控制部分,在开发时,只要在项目中的web.xml配置文件中配置一次即可。
注:如有其他过滤器,该配置部分通常放在最后。在Struts2.1.3以后的版本中,控制器名称为StrutsPrepareAndExecuteFilter。
2.Action:
业务类,作为MVC中的模型部分,既封装业务数据,也负责处理用户的请求,Action类中的execute方法是默认的动作处理方法。
3.Result:
结果,表示业务类Action执行后要跳转的页面。Struts2本身支持多种结果类型,如JSP、Velocity、FreeMarker、JasperReports等,在同一个Web应用中,各种结果类型可以混用。
4.Interceptor:
拦截器,是Struts2框架中最重要的概念。Struts2的许多功能都是由拦截器完成的,每一个Struts2工程都使用了拦截器。Struts2中有自带的内建拦截器与默认拦截器。
拦截器的使用主要是把request参数设置到Action中。例如,实现上传文件、防止重复提交、程序国际化等。
5.ActionContext、值栈和OGNL:
虽然ActionContext没在框架构图中出现,但是它扮演着至关重要的角色。Struts2在每个Action刚开始运行的时候,都会单独为它建立一个ActionContext,把所有能访问的数据,包括请求参数、请求的属性、会话信息等,都放到ActionContext中。在以后赋值、取值的时候,就只需要访问ActionContext就可以了,所以说,ActionContext可以被认为是每个Action拥有的一个独立的内存数据中心。
OGNL(Object-Graph Navigation Language)对象图导航语言,是一种功能强大的表达式语言(Expression Language,EL)。通过简单一致的表达式语言,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
值栈可用来容纳多个对象,主要用来存放一些临时对象。当使用OGNL访问值栈中对象属性的时候,指定属性的引用会引用更靠近值栈栈顶方向的对象,晚进栈的对象会覆盖早进栈的对象。简单的说,Struts2用值栈为我们使用Struts2做了很多引用上的简化,主要是缩短了OGNL表达式的长度。值栈也可以作为一个内存数据中心,来存放一些Struts2标签临时定义的数据。
6.Struts2标签:
Struts2的标签库使用简单,功能强大,简化了页面开发的工作。并且与Struts2框架的其他部分也能非常自然的结合,如验证、国际化等。
7.自动类型转换:
在Action类中,可以有多种方式来对一个页面的数据,从而自动获取页面的值。但从request参数里接收的值都是String字符串类型,而Action类中的属性都可以是各种类型。这就需要Struts2的类型转换机制来支持,可以节省开发者的时间。
Struts2已经内置了大量的类型转换方式,还可以自己实现特殊的类型转换器。
8.国际化:
通常称i18n,取英文单词internationalization的首末字母i和n,18为中间的字符数。Struts2非常自然地实现了国际化,只要按照Struts2的要求,把不同语言信息放到对应的位置即可。
9.验证框架:
一个稳定、成熟的Web系统,服务器端验证是必不可少的。Struts2提供了验证框架,在真正调用业务逻辑Action之前,对从客户端传递过来的数据进行校验。如果用户提交的数据不符合要求,就不会去调用业务逻辑。
Struts2的基本流程
Struts2框架由三个部分组成:核心控制器StrutsPrepareAndExecuteFilter、业务控制器和用户实现的业务逻辑组件。在这3部分里,核心控制器由Struts2框架提供,而业务控制器和业务逻辑组件需要程序员去实现。
Struts2的运行流程
采用Struts2框架后,不在提交给服务器端的JSP页面,框架会根据web.xml配置文件和struts.xml配置文件的配置内容,将数据提交给对应的ActionSupport类处理,并返回结果。根据返回结果和struts.xml文件中的配置内容,将相应的页面返回给客户端。
①、通过浏览器,运行登录页面,单击登录按钮,向服务器提交用户输入的用户名和密码信息。
②、读取web.xml配置文件,加载Struts2的核心控制器StrutsPrepareAndExecuteFilter,对用户inxing拦截。
③、根据用户提交表单中的Action,在struts.xml配置文件中查找匹配相应的Action配置,这里会查找name属性值为login的Action配置,并且把已经拦截的请求发给相对应的LoginAction业务类来处理。
④、在struts.xml配置文件中没有指定Action元素的method属性值,此时,系统会调用默认方法execute()来完成对客户端的登录请求处理。若登录成功,则返回success字符串,否则返回input字符串。
⑤、根据返回结果,在struts.xml配置文件中查找相应的映射。在struts.xml文件中配置LoginAction时,指定了<result name="success">/success.jsp</result>,因此,当LoginAction类的execute()方法返回success字符串时,则转向success.jsp页面,否则转向login.jsp页面。
Action是一个普通的JavaBean,在实际开发中,Action类一般都继承自Struts2提供的com.poensymphony.xwork2.ActionSupport类,以便简化开发。

注:由于篇幅限制,可到如下百度云链接下载doc文档。

链接:https://pan.baidu.com/s/1NQhBCIEQFcX_niK21siI_Q 密码:o0qp

Struts2笔记分享(一)的更多相关文章

  1. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  2. 1C课程笔记分享_StudyJams_2017

    课程1C 概述 课程1C是创建一个生日贺卡应用的实践课程,所以本篇笔记分享主要记录个人的实践过程,此外分享一些比较零散的知识点. Drawable文件夹 Drawable文件夹是Android项目统一 ...

  3. uml精粹——11.活动图(及整个读书笔记分享)

    11.活动图activity diagram   活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...

  4. 学习笔记分享之汇编---3. 堆栈&标志寄存器

    前言:   此文章收录在本人的<学习笔记分享>分类中,此分类记录本人的学习心得体会,现全部分享出来希望和大家共同交流学习成长.附上分类链接:   https://www.cnblogs.c ...

  5. struts2笔记(3)

    关于回显: 如果是int型,默认就会回显为0,如果不想让回显,则Integer就好 //**************************************声明式验证************* ...

  6. struts2笔记(2)

    <context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...

  7. SQL Server 数据库基础笔记分享(上)

    前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...

  8. php学习之路-笔记分享20150327

    由于公司需要,不得已是php也学习并用了段时间做了两个项目,现也分享出笔记.需要源文档的留下邮箱,.

  9. 1A课程笔记分享_StudyJams_2017

    1A课程 概述 课程1A主要讲解了Android UI的三种基本控件:TextView.ImageView以及Button.笔记的主体内容主要根据课程内容的讲解顺序来组织,此外我对一些个人比较感兴趣的 ...

随机推荐

  1. S2第一本书内测

    <深入.NET平台和C#编程>内部测试题-笔试试卷 一 选择题 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格 ...

  2. Mybatis-no getter for property named 'col_name' in 'class com.xxx.onebean'

    Mybatis中出现该异常 There is no getter for property named 'col_name' in 'class com.xxx.onebean 意思是onebean这 ...

  3. selenium2自动化测试学习笔记(二)

    chromedriver报错问题解决了,真是无语 是因为chromedriver与浏览器版本不一致 http://chromedriver.storage.googleapis.com/index.h ...

  4. Java并发编程实战(chapter_2)(对象发布、不变性、设计线程安全类)

    一.发布与溢出 "发布(Publish)"一个对象的意思是指,使对象能够在当前作用于之外的代码中使用.这个"之外",尤为关键,各种出问题的地方,都是因为这个&q ...

  5. 【前端】wangEditor(富文本编辑器) 简易使用示例

    转载请说明作者或者注明出处,谢谢 说到前端常用的编辑器,自然也少不了富文本编辑器(RichText Editor) 笔者在此之前也看了一些相关的在线编辑器,其中包括了当百度搜索“富文本编辑器”字样时出 ...

  6. Rails Migration Data Model栏位修改及数据类型介绍

    测试版本Ruby:2.3.1   Rails:5.0.1 一.增加栏位       给devise默认的用户新增增加username字段 $ rails generate migration add_ ...

  7. 冲刺NO.5

    Alpha冲刺第五天 站立式会议 项目进展 今日项目完成内容主要包括了JS的学习,事务管理员模块与学生模块的完善与补充,并且开始编写信用信息管理模块和奖惩事务管理模块. 问题困难 前端部分的技术掌握的 ...

  8. QTableView

    QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: 一 添加表头 //准备数据模型     QStandardItemModel *student_model = ne ...

  9. 201421123042 《Java程序设计》第12周

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  10. JAVA_SE基础——24.面向对象的内存分析

    黑马程序员入学blog ... 接着上一章的代码: //车类 class Car{ //事物的公共属性使用成员变量描述. String name; //名字的属性 String color; //颜色 ...