Struts2笔记分享(一)
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笔记分享(一)的更多相关文章
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- 1C课程笔记分享_StudyJams_2017
课程1C 概述 课程1C是创建一个生日贺卡应用的实践课程,所以本篇笔记分享主要记录个人的实践过程,此外分享一些比较零散的知识点. Drawable文件夹 Drawable文件夹是Android项目统一 ...
- uml精粹——11.活动图(及整个读书笔记分享)
11.活动图activity diagram 活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...
- 学习笔记分享之汇编---3. 堆栈&标志寄存器
前言: 此文章收录在本人的<学习笔记分享>分类中,此分类记录本人的学习心得体会,现全部分享出来希望和大家共同交流学习成长.附上分类链接: https://www.cnblogs.c ...
- struts2笔记(3)
关于回显: 如果是int型,默认就会回显为0,如果不想让回显,则Integer就好 //**************************************声明式验证************* ...
- struts2笔记(2)
<context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...
- SQL Server 数据库基础笔记分享(上)
前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...
- php学习之路-笔记分享20150327
由于公司需要,不得已是php也学习并用了段时间做了两个项目,现也分享出笔记.需要源文档的留下邮箱,.
- 1A课程笔记分享_StudyJams_2017
1A课程 概述 课程1A主要讲解了Android UI的三种基本控件:TextView.ImageView以及Button.笔记的主体内容主要根据课程内容的讲解顺序来组织,此外我对一些个人比较感兴趣的 ...
随机推荐
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- phpcms v9 搜索结果列表页时间显示1970问题解决方案
对于喜欢用phpcms v9 的小伙伴来说,在调用时间时,总会出现时间1970这样的问题,对于这个问题,网上的说法很多,内容页时间显示通常不会问题,搜索结果页就不行了,通过总结,发现使用{format ...
- apache学习教程
5.apache教程 httpd.conf文件分析 ServerRoot "E:/phpwebenv/PHPTutorial/Apache" #apache软件安装的位置 List ...
- Beta总结
45°炸 031502601 蔡鸿杰 031502604 陈甘霖 031502632 伍晨薇 一.写在Beta项目前 Beta 凡 事 预 则 立 二.GitHub传送门 Beta冲刺重要版本 三.用 ...
- JAVA_SE基础——14.循环结构语句
建议有些基础的同学阅读,0基础可能会有些困难(最好看正文配合基础课本的例子) 所谓循环语句主要就是在满足条件的情况下反复执行某一个操作.Java提供了3种常用的循环语句,分别为for循环语句.whil ...
- Eclipse常用快捷键总结
Eclipse常用快捷键总结 CTRL+C(复制).CTRL+X(剪切).CTRL+Z(撤销).CTRL+F(查找).CTRL+H(搜索文件或字符串).CTRL+Y(重做).CTRL+/(双斜杠注释) ...
- HttpWebRequest,HttpWebResponse C# 代码调用webservice,参数为xml
先上调用代码 public static string PostMoths(string url, string Json) { System.Net.HttpWebRequest request; ...
- ArrayList源码学习----JDK1.7
什么是ArrayList? ArrayList是存储一组数据的集合,底层也是基于数组的方式实现,实际上也是对数组元素的增删改查:它的主要特点是: 有序:(基于数组实现) 随机访问速度快:(进行随机访问 ...
- Python内置函数(44)——len
英文文档: len(s) Return the length (the number of items) of an object. The argument may be a sequence (s ...
- python中 return 的用法
return 语句就是讲结果返回到调用的地方,并把程序的控制权一起返回 程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return. 要返回两个数值,写成一行即可: de ...