Struts 的基本配置
前面大致了解了Struts 框架的基本内容但这些基本内容都必须建立在Struts 的配置文件基础之上这些配置文件的配置信息也是Struts 应用的核心部分
配置Struts webxml文件
任何MVC框架都需要与Web应用整合这就不得不借助于Struts webxml文件只有配置在Struts webxml文件中Servlet才会被应用加载
通常所有的MVC框架都需要Web应用加载一个核心控制器对于Struts 框架而言需要加载FilterDispatcher只要Web应用负责加载FilterDispatcherFilterDispatcher将会加载应用的Struts 框架
因为Struts 将核心控制器设计成Filter而不是一个普通Servlet故为了让Web应用加载FilterDispacher只需要在Struts webxml文件中配置FilterDispatcher即可
配置FilterDispatcher的代码片段如下
< ! 配置Struts 核心Filter的名字 >struts< /FILTERNAME>
< FILTERCLASS>orgapachestrutsdispatcherFilterDispatcher < /FILTERCLASS>
< INITPARAM>
< ! 配置Struts 框架默认加载的Action包结构 >
< PARAMNAME>actionPackages< /PARAMNAME>
< PARAMVALUE>orgapachestrutsshowcaseperson< /PARAMVALUE>
< /INITPARAM>
< ! 配置Struts 框架的配置提供者类 >
< INITPARAM>
< PARAMNAME>configProviders < /PARAMNAME>
< PARAMVALUE>leeMyConfigurationProvider< /PARAMVALUE>
< /INITPARAM>
< /FILTER>
正如上面看到的当配置Struts 的FilterDispatcher类时可以指定一系列的初始化参数为该Filter配置初始化参数时其中有个初始化参数有特殊意义
config该参数的值是一个以英文逗号()隔开的字符串每个字符串都是一个XML配置文件的位置Struts 框架将自动加载该属性指定的系列配置文件
actionPackages该参数的值也是一个以英文逗号()隔开的字符串每个字符串都是一个包空间Struts 框架将扫描这些包空间下的Action类
configProviders如果用户需要实现自己的ConfigurationProvider类用户可以提供一个或多个实现了ConfigurationProvider接口的类然后将这些类的类名设置成该属性的值多个类名之间以英文逗号()隔开
除此之外还可在此处配置Struts 常量每个元素配置一个Struts 常量其中子元素指定了常量name而
子元素指定了常量value
提示 关于Struts 常量的讲解请参阅本书的节
在Struts webxml文件中配置了该Filter还需要配置该Filter拦截的URL通常我们让该Filter拦截所有的用户请求因此使用通配符来配置该Filter拦截的URL
下面是配置该Filter拦截URL的配置片段
< ! 配置Filter拦截的URL >
< FILTERMAPPING>
< ! 配置Struts 的核心FilterDispatcher拦截所有用户请求 >
< FILTERNAME>struts< /FILTERNAME>
/*< /URLPATTERN>
< /FILTERMAPPING>
配置了Struts 的核心FilterDispatcher后基本完成了Struts 在webxml文件中的配置
如果Web应用使用了Servlet 以前的规范因为Web应用不会自动加载Struts 框架的标签文件因此必须在Struts webxml文件中配置加载Struts 标签库
配置加载Struts 标签库的配置片段如下
< ! 配置Struts 标签库的URI >/s< /TAGLIBURI>
< ! 指定Struts 标签库定义文件的位置 >
< TAGLIBLOCATION>/WEBINF/strutstagstld< /TAGLIBLOCATION>
< /TAGLIB>
在上面配置片段中指定了Struts 标签库配置文件物理位置/WEBINF/struts tagstld因此我们必须手动复制Struts 的标签库定义文件将该文件放置在Web应用的WEBINF路径下
如果Web应用使用Servlet 以上的规范则无需在Struts webxml文件中配置标签库定义因为Servlet 规范会自动加载标签库定义文件
提示 Struts 的标签库定义文件包含在strutscorejar文件里在strutscorejar文件的METAINF路径下包含了一个strutstagtld文件这个文件就是Struts 的标签库定义文件Servlet 规范会自动加载该标签库文件
对于Servlet 以上的规范Web应用自动加载该标签库定义文件加载strutstagtld标签库定义文件时该文件的开始部分包含如下代码片段
< TAGLIB>
< ! 定义标签库的版本 >
< TLIBVERSION>< /TLIBVERSION>
< ! 定义标签库所需的JSP版 >
< JSPVERSION>< /JSPVERSION>
< SHORTNAME>s< /SHORTNAME>
/strutstags< /URI>
< /TAGLIB>
因为该文件中已经定义了该标签库的URIstrutstags这就避免了在Struts webxml文件中重新定义Struts 标签库文件的URI