struts2配置详解(1)

来源:互联网 发布:知乎日报接口 编辑:程序博客网 时间:2024/05/20 21:59

参考《Struts 2完全学习手册》

参考Struts2的系统架构:http://www.cnblogs.com/ningvsban/p/3733931.html

》struts2通过StrutsPrepareAndExecuteFilter运行,public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter。filter是一个加强版servlet,

1、struts2框架配置文件

web.xml-------------filterDispatcher

struts.xml-----------Struts启动时自动加载

struts-2.0.dtd--------文档类型定义

struts-default.xml-----Struts启动时自动加载还是因为struts.xml的default package设置才被加载??

----------------根据struts.configuration.files缺省指定的默认加载的配置文件,struts-default.xml,struts-plugin.xml和struts.xml是Struts启动时自动加载的。


struts.properties-----定义属性值和常量,覆盖struts.xml中定义的相同属性值和常量。Struts启动时自动加载。

-------------struts.configuration.files,struts.custom.i18n.resources和struts.i18n.reload都可以在这里定义。

--------struts直接引入了许多spring的IOC技术(类),struts.properties中也可以重写指定。


struts-plugin.xml-----插件的配置文件,一般在插件的jar包中解压可以发现。与这些插件集成时,系统自动加载。


静态内容---------JS、CSS和FreeMarker模板文件等,由FilterDispatcher过滤器自动提供,任何以“/struts/”开始的请求都认为是静态内容,“/struts/”后面的内容将被映射到struts2的核心内裤中的公共包中。

------FilterDispatcher过滤器的参数package可以指定附加的包。默认情况,struts2框架可以自动搜索模板包template和org.apache.struts2.static包。


struts.xml配置详解

管理元素

1、Bean配置<bean>


在struts.xml中使用<bean>配置Bean,通常有以下两个作用






2、常量配置constant

加载顺序:struts-default.xml-------struts-plugin.xml--------struts.xml(推荐)--------struts.properties----------web.xml

web.xml中使用FilterDispatcher的子元素<init-param>来实现。


3、包配置package


疑问:拦截器定义在action之前,表示在action执行之前拦截,之后这些拦截器还会再次拦截吗?还是需要在action定义之后再定义一些拦截器?倾向后者。

拦截器的使用是不是和filter类似?


4、命名空间namespace


不指定namespace,则使用默认命名空间。默认命名空间是“”空字符。




5、包含配置<include>

类似于<jsp:include>。不过这里的<include>只能包含配置文件。



用户请求处理元素

1、拦截器配置




2、Action业务逻辑控制器

2.1 Action接口。

我们自己定义的action一般都extends ActionSupport,重写某些继承方法,如execute();


2.2 间接访问Servlet API

很重要。

struts2中,通过ActionProxy将Servlet(JSP页面)和Action联系起来。

我们知道每一个请求都会得到独有的Action实例。那么某action实例得到的ActionContext,通过ThreadLocal从获得session等。

》ActionContext中static ThreadLocal actionContext = new ThreadLocal();


2.3 直接访问Servlet API

      分为IOC和非IOC两种方式。




------推荐直接访问非IOC方式。


2.4 Action配置






使用action的method属性也能达到相同的效果,但要给类的每个执行方法单独配置<action>,很占空间。

从这里可以轻松看出,<action>构造了实例对象,多实例,属于各个请求独有(可看做ThreadLocal-Request的局部变量)。

<action>如果被2个请求同时访问,即同时执行,则应该产生2个实例对象。(实际中,同一个客户端不能同时发出的2个请求访问,一定有先后。PS. form 的action对应<action>的name)


注意:<jsp:useBean>的id属性则是实例对象的名称,等同于jsp脚本<%%>中java创建对象,<%%>中是局部变量