Struts2权威指南总结3:Struts2基础

来源:互联网 发布:hp什么意思网络用语 编辑:程序博客网 时间:2024/05/21 03:57

1,struts1的mvc实现:

Struts1是世界上最古老的mvc框架,出现于2001年。由ActionServlet作为核心API。

Struts1使用ActionForm接受请求参数。

 

2,WebWork

WebWork以ServletDispatcher为核心。使用ServletDispatcher处理用户的所有请求,它是整个WebWork框架的核心控制器。

WebWork的Action与Struts2类似,都可以继承基类ActionSupport,以便于实现一些功能。WebWork的Action就是一个普通的POJO。

WebWork以xwork.xml为配置文件。在配置xwork.xml之前,要先在web.xml中配置核心控制器ServletDispatcher(与struts2的核心Filter类似)。

配置如下:


配置后,web应用会自动加载webwork框架。并加载WEB-INF/classes下的xwork.xml文件

Xwork.xml配置文件配置:


实际上webwork可以包含两个配置文件,还有一个webwork.properties配置文件,这个文件是标准的属性文件,有一系列的key/value组成,通常配置一些常量,与struts2的struts.properties类似。以下是webwork.properties文件的配置示例:


Webwork同样也支持通过在Action的同一目录下放校验文件进行校验,这些都与struts2非常类似。

3,struts2的三大组成部分:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。这三个组件里,struts2提供了核心控制器FilterDispatcher,用户需要实现业务控制器和业务逻辑组件。

 

4,FilterDispatcher:运行在WEB应用中,拦截所有的用户请求,如果用户请求以action结尾,该请求将被转入struts2框架处理。获取*.action后,根据前面*的部分确定使用哪个业务逻辑组件。

Struts2的Action都被定义在struts.xml中。

 

5,struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理,因为用户实现的业务控制器没有与Servlet API耦合,显然无法处理用户请求。

Struts2通过拦截器将用户的请求参数解析出来,传入到Action中,并回调Action的execute方法处理用户的请求。这时AOP面向切面编程思想的体现。

我理解的Struts2 AOP模型:可以将Action AOP整体看成一个类,其实类似于环绕增强,拦截器就是增强的方法。类似于InvocationHandler中的invoke方法,invoke方法可以在目标方法的前后实现增强功能。这里的Action的业务逻辑方法就相当于目标类的需要实现增强的方法,拦截器就相当于环绕增强的代码。


6,JavaEE里的模型组件,通常是指系统的业务逻辑组件。

 

7,struts2改变了struts1只能使用JSP作为视图组件的现状,struts2可以使用模板技术,如FreeMarker,Velocity作为视图技术。

Action返回的仅仅是视图名称,并未与视图技术产生关联,需要在struts.xml中配置result来与视图技术产生关联。如果不指定type属性,则默认使用JSP视图资源。

如果需要使用其他视图技术,可以在配置result时指定响应的type属性,例如:如果使用FreeMarker,则指定type为freemarker的type属性。

 

8,struts2框架的运行流程非常类似于webwork的运行流程。Struts2其实就是webwork2.2的升级版。

 

9,给struts2配置核心控制器,在web.xml中配置。


可以为filter配置初始化参数。通过<init-param>指定。有特殊意义的三个初始化参数:

l  Config:是一个以英文逗号隔开的字符串,每个字符串都是一个xml配置文件的位置,struts2框架将自动加载指定的配置文件。

l  actionPackage:是一个以英文逗号隔开的字符串,每个字符串都是一个包空间,struts2将扫描这些包空间下的Action类。

l  configProviders:如果用户需要实现自己的ConfigurationProvider类,用户可以提供一个或多个实现了ConfigurationProvider接口的类,然后将这些类的类名设置成该属性的值,多个类名之间以英文逗号隔开。

也可以通过这个<init-param>指定struts2常量。

 

10,如果servlet是2.3以前的规范,则web应用不会自动加载struts2框架的标签文件,因此必须在web.xml中手动配置加载struts2标签库。


通过<taglib-location>定义了struts2标签库配置文件的物理位置,因此必须手动复制struts2的标签库定义文件,复制到web应用的WEB-INF目录下。

 

11,struts.xml的配置一旦多起来,就不容易管理,最好将其分开管理,可以设置一个中心配置文件,在中心配置文件中导入从配置文件,通过<include>标签可以完成。


12,struts-default.xml文件中的定义。

定义了默认包空间:struts-default.

定义引用的默认拦截器栈:defaultStack.

 

13,struts2框架提供了一种类似Eclipse的扩展方式,允许用可插拔的方式来安装插件。例如spring插件,提供了一个类似struts2-xxx-plugin.jar的文件,这个文件就是插件安装文件。只要将该文件放在WEB-INF的lib目录下,struts2框架将会自动加载该框架。

由此可知,如果我们要开发自己的struts2插件,只需要将开发的插件放到命名为struts2-xxx-plugin.jar的jar包中,将这个jar包放到WEB-INF/lib下即可。Struts2框架就会自动去加载这个插件。

 

14,在struts.properties中可以定义一些struts2的常量属性,但一般我们在struts.xml中定义即可,通过<constant>标签即可实现。示例:


15,struts.xml文档结构:





16,strtus.xml的dtd约束:


原创粉丝点击