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