`
moonsee
  • 浏览: 135451 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts 2.0 配置(http://wtnhwbb.javaeye.com/blog/140)

阅读更多
xml 代码

3.5  Struts 2的基本配置  
  
前面大致了解了Struts 2框架的基本内容,但这些基本内容都必须建立在Struts 2的配置文件基础之上,这些配置文件的配置信息也是Struts 2应用的核心部分。  
3.5.1  配置web.xml文件  
  
任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载。  
  
通常,所有的MVC框架都需要Web应用加载一个核心控制器,对于Struts 2框架而言,需要加载FilterDispatcher,只要Web应用负责加载FilterDispatcher,FilterDispatcher将会加载应用的Struts 2框架。  
  
因为Struts 2将核心控制器设计成Filter,而不是一个普通Servlet。故为了让Web应用加载FilterDispacher,只需要在web.xml文件中配置FilterDispatcher即可。  
  
配置FilterDispatcher的代码片段如下:  
  
<!-- 配置Struts 2框架的核心Filter -->  
  
<filter>  
  
                                 <!-- 配置Struts 2核心Filter的名字 -->  
  
                                 <filter-name>struts</filter-name>  
  
                                 <!-- 配置Struts 2核心Filter的实现类 -->  
  
                                  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher  
  
                                    </filter-class>  
  
                                  <init-param>  
  
                                    <!-- 配置Struts 2框架默认加载的Action包结构 -->  
  
                                     <param-name>actionPackages</param-name>  
  
                                  <param-value>org.apache.struts2.showcase.person</param-value>  
  
                                 </init-param>  
  
                                 <!-- 配置Struts 2框架的配置提供者类 -->  
  
                                  <init-param>  
  
                                     <param-name>configProviders </param-name>  
  
                                  <param-value>lee.MyConfigurationProvider</param-value>  
  
                                 </init-param>  
  
</filter>  
  
正如上面看到的,当配置Struts 2的FilterDispatcher类时,可以指定一系列的初始化参数,为该Filter配置初始化参数时,其中有3个初始化参数有特殊意义:  
  
—  config:该参数的值是一个以英文逗号(,)隔开的字符串,每个字符串都是一个XML配置文件的位置。Struts 2框架将自动加载该属性指定的系列配置文件。  
  
—  actionPackages:该参数的值也是一个以英文逗号(,)隔开的字符串,每个字符串都是一个包空间,Struts 2框架将扫描这些包空间下的Action类。  
  
—  configProviders:如果用户需要实现自己的ConfigurationProvider类,用户可以提供一个或多个实现了ConfigurationProvider接口的类,然后将这些类的类名设置成该属性的值,多个类名之间以英文逗号(,)隔开。  
  
除此之外,还可在此处配置Struts 2常量,每个<init-param>元素配置一个Struts 2常量,其中<param-name>子元素指定了常量name,而<param-value>子元素指定了常量value。  
  
提示  关于Struts 2常量的讲解,请参阅本书的4.1.2节。  
  
在web.xml文件中配置了该Filter,还需要配置该Filter拦截的URL。通常,我们让该Filter拦截所有的用户请求,因此使用通配符来配置该Filter拦截的URL。  
  
下面是配置该Filter拦截URL的配置片段:  
  
<!-- 配置Filter拦截的URL -->  
  
<filter-mapping>  
  
                                 <!-- 配置Struts 2的核心FilterDispatcher拦截所有用户请求 -->  
  
                                 <filter-name>struts</filter-name>  
  
                                  <url-pattern>/*</url-pattern>  
  
</filter-mapping>  
  
配置了Struts 2的核心FilterDispatcher后,基本完成了Struts 2在web.xml文件中的配置。  
  
如果Web应用使用了Servlet 2.3以前的规范,因为Web应用不会自动加载Struts 2框架的标签文件,因此必须在web.xml文件中配置加载Struts 2标签库。  
  
配置加载Struts 2标签库的配置片段如下:  
  
<!-- 手动配置Struts 2的标签库 -->  
  
<taglib>  
  
                                 <!-- 配置Struts 2标签库的URI -->  
  
                                 <taglib-uri>/s</taglib-uri>  
  
                                 <!-- 指定Struts 2标签库定义文件的位置 -->  
  
                                 <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>  
  
</taglib>  
  
在上面配置片段中,指定了Struts 2标签库配置文件物理位置:/WEB-INF/struts- tags.tld,因此我们必须手动复制Struts 2的标签库定义文件,将该文件放置在Web应用的WEB-INF路径下。  
  
如果Web应用使用Servlet 2.4以上的规范,则无需在web.xml文件中配置标签库定义,因为Servlet 2.4规范会自动加载标签库定义文件。  
  
提示  Struts 2的标签库定义文件包含在struts2-core-2.0.6.jar文件里,在struts2-core-2.0.6.jar文件的META-INF 路径下,包含了一个struts-tag.tld文件,这个文件就是Struts 2的标签库定义文件,Servlet 2.4规范会自动加载该标签库文件。  
  
对于Servlet 2.4以上的规范,Web应用自动加载该标签库定义文件。加载struts-tag.tld标签库定义文件时,该文件的开始部分包含如下代码片段:  
  
<taglib>  
  
                                 <!-- 定义标签库的版本 -->  
  
                                 <tlib-version>2.2.3</tlib-version>  
  
                                 <!-- 定义标签库所需的JSP版 -->  
  
                                 <jsp-version>1.2</jsp-version>  
  
                                 <short-name>s</short-name>  
  
                                 <!-- 定义Struts 2标签库的URI -->  
  
                                 <uri>/struts-tags</uri>  
  
                                 ...  
  
</taglib>  
  
因为该文件中已经定义了该标签库的URI:struts-tags,这就避免了在web.xml文件中重新定义Struts 2标签库文件的URI。  
3.5.2  struts.xml配置文件  
  
Struts框架的核心配置文件就是struts.xml配置文件,该文件主要负责管理Struts 2框架的业务控制器Action。  
  
在默认情况下,Struts 2框架将自动加载放在WEB-INF/classes路径下的struts.xml文件。在大部分应用里,随着应用规模的增加,系统中Action数量也大量增加,导致struts.xml配置文件变得非常臃肿。  
  
为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。  
  
下面的struts.xml文件中就通过include手动导入了一个配置文件:struts-part1.xml文件,通过这种方式,就可以将Struts 2的Action按模块配置在多个配置文件中。  
  
<?xml version="1.0" encoding="UTF-8" ?>  
  
<!-- 指定Struts 2配置文件的DTD信息 -->  
  
<!DOCTYPE struts PUBLIC  
  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
  
<!-- 下面是Struts 2配置文件的根元素 -->  
  
<struts>  
  
                                 <!-- 通过include元素导入其他配置文件 -->  
  
                                  <include file="struts-part1.xml" />  
  
                                 ...  
  
</struts>  
  
通过这种方式,Struts 2提供了一种模块化的方式来管理struts.xml配置文件。  
  
除此之外,Struts 2还提供了一种插件式的方式来管理配置文件。用WinRAR等解压缩软件打开struts2-core-2.0.6.jar文件,看到如图3.21所示的文件结构,在光标选中的一行,看到有一个struts-default.xml文件。  
  
图3.21  struts2-core-2.0.6.jar压缩文件的文件结构  
  
查看struts-default.xml文件,看到该文件代码片段如下:  
  
<?xml version="1.0" encoding="UTF-8" ?>  
  
<!-- 指定Struts 2配置文件的DTD信息 -->  
  
<!DOCTYPE struts PUBLIC  
  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
  
<!-- Struts 2配置文件的根元素 -->  
  
<struts>  
  
                                 <!-- 下面定义了Struts 2框架的一些基础Bean  -->  
  
                                 <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />  
  
                                 <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts"  
  
                                    class="org.apache.struts2.impl.StrutsObjectFactory" />  
  
                                 ....  
  
                                  <!-- 下面是一些静态注入Bean定义 -->  
  
                                        <bean class="com.opensymphony.xwork2.util.OgnlValueStack" static="true" />  
  
                                  <bean class="org.apache.struts2.dispatcher.Dispatcher" static="true" />  
  
                                 ...  
  
                                 <!-- 下面定义Struts 2的默认包空间 -->  
  
                                  <package name="struts-default">  
  
                                    <!-- 定义Struts 2内建支持的结果类型 -->  
  
                                  <result-types>  
  
                                        <!-- 定义Action链Result类型 -->  
  
                                   <result-type name="chain" class="com.opensymphony.xwork2.  
  
                                            ActionChainResult"/>  
  
                                        <!-- 定义Dispatcher的Result类型,并设置default="true",  
  
                                            指定该结果Result是默认的Result类型 -->  
  
                                        <result-type name="dispatcher"  
  
                                                class="org.apache.struts2.dispatcher.Servlet  
  
                                                    DispatcherResult" default="true"/>  
  
                                        <!-- 定义FreeMarker的Result类型 -->  
  
                                   <result-type name="freemarker"  
  
                                            class="org.apache.struts2.views.freemarker.  
  
                                                FreemarkerResult"/>  
  
                                        ...  
  
                                  </result-types>  
  
                                    <!-- 定义Struts 2内建的拦截器 -->  
  
                                  <interceptors>  
  
                                   <interceptor name="alias" class="com.opensymphony.xwork2.  
  
                                            interceptor.AliasInterceptor"/>  
  
                                        <interceptor name="autowiring"  
  
                                            class="com.opensymphony.xwork2.spring.interceptor.  
  
                                                ActionAutowiringInterceptor"/>  
  
                                        ...  
  
                                   <!-- 定义基本拦截器栈 -->  
  
                                   <interceptor-stack name="basicStack">  
  
                                   <interceptor-ref name="exception"/>  
  
                                   <interceptor-ref name="servlet-config"/>  
  
                                   <interceptor-ref name="prepare"/>  
  
                                   <interceptor-ref name="checkbox"/>  
  
                                   <interceptor-ref name="params"/>  
  
                                   <interceptor-ref name="conversionError"/>  
  
                                   </interceptor-stack>  
  
                                        <!-- 还有系列拦截器栈 -->  
  
                                        ...  
  
                                  </interceptors>  
  
                                  <!-- 定义默认的拦截器栈引用 -->  
  
                                  <default-interceptor-ref name="defaultStack"/>  
  
                                  </package>  
  
</struts>  
  
上面的代码并未全部列出struts-default.xml文件,只是列出了每个元素的代表。上面配置文件中定义了一个名字为struts-default的包空间,该包空间里定义了Struts 2内建的Result类型,还定义了Struts 2内建的系列拦截器,以及由不同拦截器组成的拦截器栈,文件的最后还定义了默认的拦截器引用。  
  
这个struts-default.xml文件是Struts 2框架的默认配置文件,Struts 2框架每次都会自动加载该文件。查看我们前面使用的struts.xml文件,看到我们自己定义的package元素有如下代码片段:  
  
<!-- 指定Struts 2配置文件的根元素 -->  
  
<struts>  
  
                                 <!-- 配置名为lee的包空间,继承struts-default包空间 -->  
  
    <package name="lee" extends="struts-default">  
  
                                    ...  
  
    </package>  
  
</struts>  
  
在上面配置文件中,名为lee的包空间,继承了名为struts-default的包空间,struts-default包空间定义在struts-default.xml文件中。可见,Struts 2框架默认会加载struts-default.xml文件。  
  
不仅如此,Struts 2框架提供了一种类似Eclipse的扩展方式,它允许以一种“可插拔”的方式来安装插件,例如后面将要介绍的Spring插件、JSF插件等,它们都提供了一个类似struts2-Xxx-plugin.jar的文件——这个文件就是插件安装文件,只要将该文件放在Web应用的WEB-INF/lib路径下,Struts 2框架将自动加载该框架。  
  
使用WinRAR工具打开struts2-spring-plugin2.06.jar文件,找到一个struts-plugin.xml文件,打开该文件,该文件的代码如下:  
  
<?xml version="1.0" encoding="UTF-8" ?>  
  
<!-- 指定Struts 2的DTD信息 -->  
  
<!DOCTYPE struts PUBLIC  
  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
  
<struts>  
  
                                 <!-- 定义一个名字为spring的ObjectFactory -->  
  
                                 <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring"  
  
                                    class="org.apache.struts2.spring.StrutsSpringObjectFactory" />  
  
                                  <!-- 指定名字为sping的ObjectFactory是Struts 2的ObjectFactory -->  
  
                                  <constant name="struts.objectFactory" value="spring" />  
  
                                 <!-- 定义名为spring-default的包空间 -->  
  
                                  <package name="spring-default">  
  
                                    <!-- 定义整合Spring框架所必需的拦截器列表 -->  
  
                                  <interceptors>  
  
                                   <interceptor name="autowiring"  
  
                                            class="com.opensymphony.xwork2.spring.interceptor.  
  
分享到:
评论

相关推荐

    http://yourgame.javaeye.com/blog/252853

    标题 "JavaEye博客文章——深入理解HTTP你的游戏" 这篇博客文章是关于深入理解HTTP协议的,作者通过"你的游戏"这个实例,详细讲解了HTTP在实际应用中的运作机制,特别是对于游戏开发而言的重要知识点。HTTP(超文本...

    JAVA web.xml配置详解

    -- 配置集群的时候,要用到,在这篇文章:“apache+tomcat集群、负载均衡及session复制”里的第三条(http://jiajun.javaeye.com/admin/blogs/278586) --&gt; &lt;distributable/&gt; &lt;!-- context-param 元素用来设定...

    常用Java Web应用软件 (LNMJ,LAMJ)安装

    http://peterwei.javaeye.com/blog/968815 Ubuntu10下JDK1.6安装 http://peterwei.javaeye.com/blog/968758 Ubuntu10下Tomcat7安装 http://peterwei.javaeye.com/blog/968774 Ubuntu10下Eclipse3.6安装 ...

    JAva资源网站大全

    CSDN是国内知名的IT技术社区,其Java专区汇聚了大量的技术博客、问答和项目资源。无论是Java基础还是高级主题,这里都有丰富的资料可供参考,是Java学习者的宝库。 ### 7. Developer Resources for Java Technology...

    50个论坛地址

    - **CodingNow**(http://blog.codingnow.com/): 技术博客平台,汇集了许多知名技术博主的文章。 - **Tech.Sina**(http://tech.sina.com.cn/): 新浪科技频道,提供最新的科技新闻和技术动态。 ### 3. 专项技术...

    手把手教你使用Maven进行Android的从配置到开发与资源管理教程.doc

    - Maven的中文手册可参考[http://www.juvenxu.com/mvn-def-guide/](http://www.juvenxu.com/mvn-def-guide/)和[http://juvenshun.javaeye.com/5](http://juvenshun.javaeye.com/5)。 **5. Maven项目导入Eclipse** ...

    Flex + Hessian 留言本

    Flex + Hessian 学习笔记(一) http://wangcheng.javaeye.com/blog/141382 Flex + Hessian 学习笔记(二) http://wangcheng.javaeye.com/blog/141539 Flex + Hessian 学习笔记(三) ...

    android学习资料(网站,论坛)

    8. **Mingkg21博客(http://mingkg21.javaeye.com/category/53645)**:虽然JavaEye已关闭,但其存档的博客仍提供了Android开发的宝贵资源。 9. **Yaohuiji博客(http://android.yaohuiji.com/archives/672)**:...

    hadoop学习资料地址

    3. **Solomons的博客**:`http://solomons.javaeye.com/blog/277784` - 归纳总结了Hadoop 0.19版本的新特性和改进之处。 4. **Killme2008的博客**:`...

    pager-taglib-2.0完整源码和Struts演示示例工程

    在Struts中应用标签的数据库分页示例(dbpage.jsp),打开方法: ...打开方法: http://localhost:8080/pagertaglib/test1.jsp&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;制作示例参考了: ...

    JWFD工作流系统源代码包(ECLIPSE开发版)

    http://comsci.javaeye.com/ JWFD工作流设计器(带引擎算法)的源代码包, 实在不好意思,这个包的资源文件缺失了,导致编译时报错,经过反馈, 修改了这个问题,在资源中新增加下载,本下载停止使用,非常抱歉 请...

    Java 学习资料

    5. **JavaEye([http://www.javaeye.com/](http://www.javaeye.com/))** - **特点**:这曾经是Java开发者非常活跃的一个社区,虽然现在已不再更新,但其历史资料仍然具有很高的参考价值。 - **适用人群**:适合...

    html5-css3

    6. **HTML5和CSS3资源分享**([http://www.javaeye.com/news/16684-html5-css3](http://www.javaeye.com/news/16684-html5-css3)) - 分享了一些高质量的HTML5和CSS3资源链接,有助于开发者扩展视野。 7. **CSS3...

    java学习网站荟萃

    9. **[JavaEye招聘](http://www.iteye.com/javaeye)**:由JavaEye社区提供的招聘服务,适合寻找Java相关职位的人士。 10. **[广东程序员人才网](http://www.gdjob168.com/)**:专门针对广东省地区的招聘网站,适合...

Global site tag (gtag.js) - Google Analytics