`
myoldman
  • 浏览: 84865 次
  • 性别: Icon_minigender_1
  • 来自: 福建福州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Struts2 Core Developers Guide-Configuration

阅读更多
1.最初也是最终的理想Zero Configuration
目前主要的原理就是通过java5提供的annotation机制把xml配置移动到实际的代码中,但是我认为这样做的好处有
便于测试,由于不存在xml文件,不需要再为了测试环境编写一分不同的xml配置文件,所有的配置已经都再代码里面了。
目前struts该功能还在测试中,主要是需要通过再web.xml中添加需要扫描的类目录,以及几个和xml文件中的element对应的annotation来实现。

2.Annotation
主要是和zero configuration配合使用。
包含了Action(namespace,parentpackeage,result,resutls)
Interceptor(After,Before,BeforeResult)
Validator,Type Conversion Annotations.
再xml文件中都能找到对应的映射。

3.Configuration Elements

Administrative Elements
Bean Configuration
定义某个接口的实现类,然后只要需要再框架内部实现用@Inject标记即可实现该接口对象的注入。
使用static实现把某些特定值注入到某个类的特定方法中,所以如果该属性为true的时候type必须为空。

Constant Configuration
代替struts.properties中的定义修改系统运行时参数。
可以配置的途径除了struts.xml,struts.properties外还有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>


Package Configuration
struts,pagckage是配置的最外层元素,我们可以再Package中定义action,interceports等元素,
其中包可以继承,可以abstract(可以不包含实际action).
Namespace Configuration
顾名思义该配置主要是为了解决action名字的冲突(例如可能系统很多模块都有menu或者help)action。
默认的namespace是""空串,意味着如果再其他的namespace没有找到对应的action就回直接回到该namespace寻找action,

Root Namespace
("/") 该namespace只匹配对应的context根目录的请求,如果其他namespace的action没有找到回直接回到default namespace不会回到该namespace寻找。

Include Configuration
该元素的主要目的就是模块化,把大的配置文件分割为小的配置文件,便于模块化开发。

Interceptor Configuration
Interceptor标记是mixed and matched即interceptor-ref既可以ref到interceptor也可以ref到interceptor stack。
应用还可以定义默认的interceptor
<default-interceptor-ref name="secureStack"/>


Action Configuration
struts2的核心工作单元,配置某个http请求如何处理。
主要定义的方面如下
action的名称-->页面上请求的url中的.action前面的字符一致。
例如http://myoldman/index/Welcome.action将会对应于系统中
Package namespace 为"index" name为Welcome的action。
利用struts2的form标签可以根据页面上制定的action属性,自动生成对应带后缀的action请求。
如果action带有/则必须在struts.xml文件中加入
<constant name="struts.enable.SlashesInActionNames" value="true"/>. 

action的对应的处理类
对应的exception handler
对应的interceptors

ation method
如果action没有定义method属性,默认的action方法将会是execute()(in the interface Action)
action不是必须实现该接口,struts2会根据类反射的方式找到对应的执行方法,
不过如果没有execute方法并且未定义action的method属性,struts2会抛出异常。
Wildcard Method(通配符方法)
通配符号可以作为前缀或后缀
<action name="*Crud" class="example.Crud" method="{1}">

<action name="Crud_*" class="example.Crud" method="{1}">

通配符可以扩张到validation,typeconvesion,message file等。
如果一个action元素没有配置任何class,struts2会默认使用ActionSupport作为实现类。
该类实现了一些基本的跳转和方法,例如execute和input等
如果需要自己覆盖默认的class可以利用default-class-ref in package元素来定义。
link to action
尽量使用action跳转到特定的jsp页面而不是直接跳转到某个jsp页面,这样做的好处就是所有的jsp页面都当作view通过action管理,实现mvc2模式。

Default action
可以未package配置一个默认的action,如果struts在应用中找不到任何的action的话,就会去找默认的action,不过如果需要未整个应用定义该效果的话需要在default package上定义一个default-action-ref这样只要未实现的action都会跳转到action执行。
或者也可以使用wildcard default把如下代码放到default package中所有action的最后。
<action name="*">
  <result>/{1}.jsp</result>
</action>
然后往还未实现的jsp页面上加入stub page。
两种reload struts.xml配置文件的方法,
struts.configuration.xml.reload=true
String execute() {
  com.opensymphony.xwork.config.ConfigurationManager.destroyConfiguration();
  return SUCCESS;
}


Wildcard Mappings(通配符映射)
如果有两个通配符匹配的话,系统默认选择最后一个匹配。
* Matches zero or more characters excluding the slash ('/') character.
** Matches zero or more characters including the slash ('/') character.
\character The backslash character is used as an escape sequence.
其中{N}n从1-9,并且{0}匹配整个url。

Result Configuration
系统预定一的result
String SUCCESS = "success";
String NONE    = "none";
String ERROR   = "error";
String INPUT   = "input";
String LOGIN   = "login";
默认resulttype为dispatcher并且默认对应success。
全局result
该定义和package同级别,主要目的是为了所有的包能共享result,例如login失败的跳转等。

Dynamic Results
result的location属性可以通过OGNL从action对象上获取
<action name="fragment" class="FragmentAction">
    <result name="next" type="redirectAction">${nextAction}</result>
</action>

如上配置可以通过action中的如小方法获取。
private String nextAction;

public String getNextAction() {
    return nextAction;
}


Exception Configuration(异常配置)
struts2的异常处理通过interceptor实现。如果需要加入的异常处理的话需要加入exception的interceptor。
<global-exception-mappings>
<exception-mapping>
配置需要捕获的exception和对应需要跳转到的result。
页面上可通过如下的属性输出exception的内容。
exception  The exception object itself 
exceptionStack  The value from the stack trace 

4.Configuration Files(配置文件)
web.xml  定义struts2框架所必须的FilterDispatcher
struts.xml Main configuration, contains result/view types, action mappings, interceptors, and so forth
struts.properties  yes Framework properties可以在struts.xml中通过constance元素替换。
struts-default.xml  struts2 jar中自带无需关注。 
struts-default.vm  yes   Default macros referenced by velocity.properties 
struts-plugin.xml  yes  At the root of a plugin JAR Optional configuration files for Plugins in the same format as struts.xml. 
velocity.properties  yes  /WEB-INF/classes/  Override the default Velocity configuration 

Static Content
struts把一些css和js文件放在了包的static和tempalte目录中。

Performance tuning
关闭logging和devMode
删除不需要要的interceptor
定义正确地http头比如cache expire等
把struts2包中的static信息拷贝到webroot中。
Create a freemarker.properties file in your WEB-INF/classes directory
并且设置template_update_delay=60000
struts默认会间隔500ms检查template是否需要reload。
启用Freemarker template caching
struts.freemarker.templatesCache = true;
Do not create sessions unless you need them.
如果使用freemarker作为view请直接使用freemark的语法。不要使用OGNL


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics