`
CoderDream
  • 浏览: 483059 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

【张冰Struts2学习笔记】0401_struts.xml配置详解之一

阅读更多

 

struts.xml 配置详解之一 Bean 常量 包

 

1.      Bean 配置

Struts2 是个可以扩展的框架,框架的核心组件都是可以配置的,这些组件可以通过Struts2 自身的依赖注入容器来装配。开发时可以自己编写组件来扩展框架功能,然后通过bean 元素来配置组件。

struts-default.xml 文件定义了struts2 框架中可配置的组件。

bean 元素的属性

属性名称

是否必须

描述 信息

class

bean 的类名

type

bean 实现的主要接口

name

bean 的名字,在具有相同Type 属性的bean 中,该名字必须唯一

scope

bean 的作用域,是default,singleton,request,session,thread 中的一个

static

是否注入静态方法,如果指定了typestatic 就不能为true

optional

Bean 是否可选

1.1 Bean 的两种配置方法

1 、框架的IoC 容器创建bean 的实例,然后将该实例注入到框架的内部对象中。

第一种做法可以称为对象注入,它通常要用到beantype 属性,告诉容器这个对象实现了哪个接口。

如果自己创建了ObjectFactory ,则可以在struts-default.xml 中作如下配置:

代码清单 1 struts.xml 片段

<struts>

    <bean type="com.opensymphony.xwork2.ObjectFactory"

       name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />

</struts>

 

2 、通过bean 的静态方法向bean 注入值

第二种做法使用值注入,允许不创建bean ,而让bean 接受框架的常量。Bean 使用值注入,必须使用static 属性,并将该属性设置为true

例如:struts-default.xml 文件中可以作如下配置:

代码清单 2 struts-defaul.xml 片段

<bean class=“com.opensymphony.xwork2.ObjectFactory” static=“true”/>

1.2 Bean 配置总结

注:在实际开发中,很少使用<bean> 元素。原因是Struts2 本身提供的功能已经足够强大,因此没有必要去扩展或者替换Struts2 的核心组建 ,自然也就用不到配置<bean> 元素。

2.      常量配置

我们可以通过定义一些能够改变框架和插件行为的关键设置来定制我们struts 应用程序,而这些设置就是常量。

常量扮演了两个关键的角色:首先它们被用来覆盖一些原有的默认设置,例如上传文件的最大容量、框架是否处于开发模式等等;其次,常量还用来指定在一个类型(type) 的多个实现中,哪个bean 应该被选中。

constant 元素的属性

属性名称

是否必须

描述 信息

name

常量的名字

value

常量的值

2.1 、常量配置文件的优先级

常量可以定义在多个文件中,默认情况下我们按照下面的顺序来寻找常量,后面的将覆盖前面的设置

struts-default.xml

struts-plugin.xml

struts.xml

struts.properties

web.xml

3xml 文件的格式是一样的,因为它们使用同一个DTD 文件,在xml 文件中Constant 元素有两个必须的属性:namevalue ;在struts.properties 文件中,每一个entry 都被视为一个常量;在web.xml 文件中FilterDispatcher 的初始化参数被载入为常量。

2.2 3 种常量形式的示例

第一种:在struts.xml 文件中配置常量

代码清单 3 struts.xml 片段

<struts> 

<constant name="struts.devMode" value="true" />

</struts>

第二种:在struts.properties 文件中配置常量

代码清单 4 struts.properties 片段

struts.devMode = true

第三种:在web.xml 文件中配置常量

代码清单 5 web.xml 片段

<filter>

           <filter-name> struts</filter-name>     

            <filter-class>

                      org.apache.struts2.dispatcher.FilterDispatcher

          </filter-class>

           <init-param>

                 <param-name> struts.devMode</param-name>

                 <param-value> true</param-value>

           </init-param>

</filter>

3.      包的配置

Struts2 中的包类似于java 中的包,提供了将action resul t拦截器 拦截器栈 组织成一个逻辑单元的一种方式,从而为你简化了维护工作,提高了重用性。

struts.xml 文件中,与web 应用相关的设置都在包中定义,每一个包中都包含了将要用到的actionresult 、拦截器和拦截器栈。

package 元素的属性

属性名称

是否必须

描述 信息

name

被其他包引用时的键(key :唯一标识,不允许同名 )

extends

指定要扩展的包

namespace

指定名称空间

abstract

声明包为抽象的(在包中没有action 定义)

注意:

由于包信息的获取是按照配置文件内容的先后顺序进行的,所以“父”包必须在“子”包之前定义

包定义的例子(节选自struts2 自带的showcase 例子)

代码清单 6 struts.xml 片段

<!-- 定义一个名为 default 的包,

  继承自 struts-default.xml 文件中定义的 struts-default 抽象包 -->

< package name = "default" extends = "struts-default" >

           < interceptors >

           <!-- 定义名为 crudStatck 的拦截器栈 -->

           < interceptor-stack name = "crudStack" >

                 < interceptor-ref name = "checkbox" />

                 < interceptor-ref name = "params" />

                 < interceptor-ref name = "static-params" />

                 < interceptor-ref name = "defaultStack" />

           </ interceptor-stack >

      </ interceptors >

 

      < action name = "date" class = "org.apache.struts2.showcase.DateAction"

           method = "browse" >

           < result name = "success" > /date.jsp </ result >

      </ action >

</ package >

 

<!-- 定义一个名为 skill 的包,继承自先前定义的 default 的包 -->

< package name = "skill" extends = "default" namespace = "/skill" >

      <!-- 设置默认的拦截器引用, crudStack 是从 default 包继承而来的 -->

      < default-interceptor-ref name = "crudStack" />

 

      < action name = "list"

class = "org.apache.struts2.showcase.action.SkillAction" method = "list" >

           < result > /empmanager/listSkills.jsp </ result >

           <!-- 设置 action 引用的拦截器,将覆盖默认的拦截器引用 -->

           < interceptor-ref name = "basicStack" />

      </ action >

</ package >

 

我的联系方式: 85337464

我的博客: http://coderdream.iteye.com

 

1
0
分享到:
评论

相关推荐

    【张冰Struts2学习笔记】0102_第一个Struts2实例

    【张冰Struts2学习笔记】0102_第一个Struts2实例 在Java Web开发领域,Struts2框架是十分重要的MVC(模型-视图-控制器)架构之一,它极大地简化了Web应用程序的开发流程。这篇学习笔记将带你入门Struts2,通过创建...

    【张冰Struts2学习笔记】0202_Struts2的三种接收用户输入的方法

    在"【张冰Struts2学习笔记】0202_Struts2的三种接收用户输入的方法"中,我们主要探讨的是如何在Struts2中有效地获取并处理用户提交的数据。以下是对这三种方法的详细解析: ### 1. 使用Action属性 Struts2的核心是...

    【张冰Struts2学习笔记】0103_Path与绝对路径

    标题中的“【张冰Struts2学习笔记】0103_Path与绝对路径”表明了这篇笔记主要讨论的是Struts2框架中关于Path和绝对路径的概念及其应用。Struts2是一个流行的Java Web开发框架,它提供了强大的MVC(模型-视图-控制器...

    【张冰Struts2学习笔记】0201_Action接口与ActionSupport类

    同时,Struts2的配置文件(struts.xml或struts.properties)也需要定义Action的相关配置,如Action的名称、结果页面等。 在开发过程中,了解并熟练掌握`Action`接口和`ActionSupport`类的用法,能有效提高开发效率...

    基于CST软件的三维超材料能带计算及其应用

    内容概要:本文介绍了如何利用CST软件进行三维超材料的能带计算。首先概述了三维超材料的独特性质及其广泛应用前景,接着简要介绍了CST软件的功能特点。随后详细阐述了能带计算的具体步骤,包括模型建立、材料参数设置、网格划分与求解设置以及最终的计算与结果分析。最后给出了一段Python代码示例,展示了如何处理CST输出的数据并绘制能带图。文章强调了计算机模拟技术对于深入了解超材料电子结构和物理性质的重要性。 适合人群:从事材料科学研究的专业人士,尤其是对三维超材料和电磁场模拟感兴趣的科研工作者和技术人员。 使用场景及目标:适用于希望借助CST软件开展三维超材料能带计算的研究项目,旨在提高对超材料的理解,推动相关领域的技术创新和发展。 其他说明:文中提供的Python代码仅为示例,在实际操作时可根据具体情况进行调整优化。同时,掌握CST软件的基本操作和电磁理论基础知识有助于更好地理解和应用本文内容。

    基于FPGA的永磁同步伺服系统设计:电流环及矢量控制实现

    内容概要:本文详细介绍了基于FPGA的永磁同步伺服系统的矢量控制设计,涵盖了从电流环到速度环的关键模块实现。具体包括Clarke和Park变换、PI调节器、AD7606采样、正交编码器反馈以及SVPWM生成等部分。文中提供了详细的Verilog代码片段,展示了各个模块的具体实现方法和技术细节。特别强调了定点数处理、时序设计和跨时钟域处理等方面的技术挑战及其解决方案。 适合人群:具备一定FPGA开发经验和电机控制基础知识的研发人员。 使用场景及目标:适用于希望深入了解FPGA在电机控制应用中的具体实现方式,特别是矢量控制和电流环设计的专业人士。目标是掌握FPGA平台下高效、低延迟的电机控制系统设计方法。 阅读建议:由于涉及大量具体的Verilog代码和硬件设计细节,建议读者在阅读过程中结合实际项目进行实验和调试,以便更好地理解和掌握相关技术。

    飞机大战:从运动方程到战斗系统的全链路设计解析

    经典飞机大战游戏是理解实时交互系统设计的绝佳载体。本文将深入剖析现代空战游戏的核心模块,涵盖刚体运动学、弹道轨迹优化、碰撞检测算法等关键技术,揭示二维游戏背后复杂的三维数学建模过程。

    scratch少儿编程逻辑思维游戏源码-冰塔.zip

    scratch少儿编程逻辑思维游戏源码-冰塔.zip

    scratch少儿编程逻辑思维游戏源码-弹跳(4).zip

    scratch少儿编程逻辑思维游戏源码-弹跳(4).zip

    COMSOL焊接热源模型解析:双椭球、高斯旋转体与柱状体热源的应用与优化

    内容概要:本文详细介绍了COMSOL软件中三种常见的焊接热源模型——双椭球热源、高斯旋转体热源和柱状体热源。双椭球热源适用于模拟移动热源(如激光焊、电弧焊),通过调整轴向系数a1和a2来控制热流分布;高斯旋转体热源适合小范围焊接,采用三维高斯函数描述热流密度;柱状体热源则用于深熔焊场景,特点是计算速度快。文中还提供了每种模型的具体代码实现,并强调了调试时需要注意的关键点,如时间步长、网格加密等。此外,作者分享了一些实用技巧,如将热源参数设置为全局变量并利用参数扫描功能提高调试效率。 适合人群:从事焊接工艺仿真、材料加工领域的研究人员和技术人员,以及对COMSOL建模感兴趣的工程技术人员。 使用场景及目标:帮助用户选择合适的热源模型进行焊接模拟,确保模拟结果的准确性;提供具体的代码实现和调试方法,使用户能够快速掌握并应用于实际项目中。 其他说明:文中提到的热源模型不仅限于理论介绍,还包括实际操作中的注意事项和优化建议,有助于提升模拟效果和工作效率。

    基于RBF神经网络的PID控制器在PMSM转速环中的Simulink模型设计与性能分析

    内容概要:本文介绍了将基于RBF神经网络的PID控制器应用于永磁同步电机(PMSM)转速环控制的方法及其性能优势。传统的PID控制器在面对非线性和时变系统时存在参数整定困难的问题,而引入RBF神经网络可以实现实时在线调参,提高系统的灵活性和鲁棒性。文中详细描述了Simulink模型的设计,特别是Matlab s-function模块中RBF神经网络的具体实现,包括高斯函数激活和带惯性的权值更新机制。实验结果显示,在转速突变情况下,改进后的控制器能够迅速稳定系统,超调量控制在2%以内,调节时间较传统方法缩短约40%,并且在负载变化时表现出色,无需重新整定参数。 适合人群:从事电机控制系统研究和开发的技术人员,尤其是对PID控制器优化感兴趣的工程师。 使用场景及目标:适用于需要提升PMSM转速环控制精度和响应速度的应用场合,如工业自动化设备、机器人等领域。目标是通过引入智能算法解决传统PID控制器参数整定难题,提高系统性能。 阅读建议:关注RBF神经网络与PID控制器结合的具体实现细节,特别是在Matlab s-function模块中的编码技巧以及参数调整策略。同时,注意学习率的选择和动量项的作用,这对于实际应用至关重要。

    scratch少儿编程逻辑思维游戏源码-GTA 6.zip

    scratch少儿编程逻辑思维游戏源码-GTA 6.zip

    scratch少儿编程逻辑思维游戏源码-仓鼠跑酷.zip

    scratch少儿编程逻辑思维游戏源码-仓鼠跑酷.zip

    scratch少儿编程逻辑思维游戏源码-超级麦克世界.zip

    scratch少儿编程逻辑思维游戏源码-超级麦克世界.zip

    scratch少儿编程逻辑思维游戏源码-400年.zip

    scratch少儿编程逻辑思维游戏源码-400年.zip

    少儿编程scratch项目源代码文件案例素材-气球足球.zip

    少儿编程scratch项目源代码文件案例素材-气球足球.zip

    少儿编程scratch项目源代码文件案例素材-沙漠迷城.zip

    少儿编程scratch项目源代码文件案例素材-沙漠迷城.zip

    scratch少儿编程逻辑思维游戏源码-比谁高.zip

    scratch少儿编程逻辑思维游戏源码-比谁高.zip

    少儿编程scratch项目源代码文件案例素材-乾坤大挪移.zip

    少儿编程scratch项目源代码文件案例素材-乾坤大挪移.zip

    scratch少儿编程逻辑思维游戏源码-菜鸟跳跃.zip

    scratch少儿编程逻辑思维游戏源码-菜鸟跳跃.zip

Global site tag (gtag.js) - Google Analytics