`
chenshuang1227
  • 浏览: 27132 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多
Struts.xml
包含配置
在默认的情况下,Struts2将自动加载放在WEB-INF/classes路径下的struts.xml文件。大部分应用里,随着应用的规模的增加,系统的Action数量大量增加,导致了struts.xml配置文件变得非常臃肿。
       为了避免这种情况,可以将一个struts.xml文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。比如说:在struts.xml文件中使用以下配置方式
<include file=”struts-mod1.xml” />
通过这种方式提供了一种模块化的方式来管理struts.xml文件。
另外,在core的根目录下有一个struts-default.xml文件,注意,这个文件是自动加载的,不需要在我们的struts.xml文件中用include导入。
 
Bean的配置
一般这个元素不需要我们进行配置,只是需要重新定义struts2的核心组件的时候才需要使用到这个元素。
Struts2框架是一个可以高度扩展的框架,框架的大部分核心组件,都是通过IOC容器来进行管理的。因此,允许开发者可以很方便的提供自己的组件实现类,并将组件类部署到struts2OK了。
这个标记很不常用,如果需要可以查看帮助。
不过这里举个例子:
<bean type=”com.opensymphony.xwork2.ObjectFactory” name=”caFactory” class=”cc.dynasoft.MyObject” />
以上代码的作用是使用一个自己定义的ObjectFactory来替换了struts2内置的object
常量配置
Struts有一个属性文件,struts.properties,实际上这个配置文件是指定struts2的属性。而常量配置就是指定struts2属性的一种方式。例子:
<constant name=”struts.custom.i18n.resources” value=”message” />
以上用于指定国际化资源文件的前缀名是message,当然也可以在struts.properties中配置,如下:
struts.custom.i18n.resources=message
也可以在web.xml中进行配置:
作为FilterDispatcherinit-param
<param-name> struts.custom.i18n.resources</param-name>
<param-value>message</param-value>
以下是加载struts2常量的搜索顺序:
1、  struts-default.xml
2、  struts-plugin.xml
3、  struts.xml
4、  struts.properties
5、  web.xml


包配置
Struts2使用package来管理Action和拦截器等。配置该包时,必须指定一个name属性,用于指定包名,可以指定一个可选的extends属性,是另一个包的名字,子包可以继承父包的拦截器,拦截器栈、action等配置。除此之外,struts还提供了一个抽象包,抽象包的含义是该包不能有action的定义。设置abstract=”true”说明这是一个抽象包。
以下是一个例子:
<package name=”mod1” extends=”struts-default” /> 其中struts-defaultstruts-default.xml提供的包。
 
另一个比较重要的概念就是命名空间:
考虑在一个web应用中需要同名的actionstruits2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action,不同的命名空间可以有同名的Action。如果不指定命名空间,则默认的命名空间是””,指定了命名空间之后,ActionURL应该是命名空间+Action名。
比如说:
<action name=”register” extends=”struts-default” namespace=”/user” >……</action>
则对应的Action应该是/user/register.action
如果namespace=”/”,说明这是一个根命名空间。
 
如果指定了命名空间,但是在该命名空间中找不到该Actionstruts2将会在默认的命名空间中继续查找,如果还找不到,则出现系统错误。
比如说:
请求/order/save.action,系统首先在命名空间/order中查找,如果找到,使用该action进行处理,否则,系统将到默认的命名空间中查找,如果两个命名空间都找不到,出现系统错误。
 
拦截器配置
       拦截器实际上思想就是AOP,我们可以使用拦截器跟踪日志、跟踪系统性能瓶颈等。
       拦截器的配置无非就是声明拦截器、引用拦截器以及声明拦截器栈。可以认为拦截器栈是由多个拦截器组成的一个大的拦截器。
       定义拦截器和拦截器栈都在<interceptors />这个标记内
       以下是一个例子:
       <interceptors>
              <interceptor name=”log” class=”cc.dynasoft.LogInterceptor” />
<interceptor name=”authority” class=”cc.dynasoft. Authority Interceptor” />
<interceptor name=”timer” class=”cc.dynasoft.TimerInterceptor” />
<interceptor-stack name=”default”>
       <interceptor-ref name=” authority” />
<interceptor-ref name=” timer” />
</interceptor>
 
引用拦截器是在action中引用的:例子:
<action name=”login” class=”cc.dynasoft.LoginAction”>
       ……
       <interceptor-ref name=”log” />
</action>
 
配置Action
实际上配置Action很简单,就使用action标签就OK了,action标签有两个重要属性:nameclassname是必须指定的,他既是action的名字,也是该action需要处理的URL的前半部分。如果class没有指定,默认是ActionSupport。而ActionSupport默认处理就是返回一个SUCCESS字符串。
struts的全局配置文件中有一个属性:struts.enable.SlashesInActionNames如果设置为true,允许struts2框架中使用斜线。
Action中直接访问servlet API有以下两种方法:
1、  如果需要访问ServletContextAction类需要实现接口ServletContextAware
如果需要访问 HttpServletRequestAction类需要实现接口ServletRequestAware
如果需要访问 HttpServletResponseAction类需要实现接口ServletResponseAware
 
以下是例子代码,主要用于访问Reponse对象:
public class LoginAction implements Action,ServletResponseAware
{
        private HttpServletResponse response;
 
        //实现ServletResponseAware接口必须实现的方法
       
        public String execute() throw Exception
        {
               Cookie c = new Cookie(“user”,getUsername());
               c.setMaxAge(60*60);//最大生存时间
               response.addCookie(c);
               return SUCCESS;
        }
}
 
2、  struts2提供了一个ServletActionContext,这个类包含了访问requestresponse等静态方法。
 
注意:即使我们在struts2Action中获得了HttpServletResponse对象,也不要尝试直接在Action中生成对客户端的输出。比如:下面代码是没有实际意义的,即
response.getWriter().println(“hello world!”);
 
动态方法调用(类似struts1DispatchAction
其实没有什么特别的地方,只是提交表单的时候需要使用如下的格式:
action=”ActionName!MethodName.action”
举个例子:action=”Login!regist.action”,这句话的实质就是交给Login Actionregist方法进行处理
 
使用动态方法调用前必须设置struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启动态方法调用;否则将关闭动态方法调用。
 
action元素指定method属性
 
action进行如下的配置:
<action name=”Login” class=”cc.dynasoft.LoginAction” method=”login” />
              ……
</action>
             
<action name=”Regist” class=”cc.dynasoft.LoginAction” />
              ……
</action>
 
查看以上两个action,默认的情况是Regist,而当Login的时候,将提交到LoginActionlogin中。查看上面的两个actionclass都是一样的,于是就出现了下面的使用通配符的概念。
 
使用通配符
       在配置action的时候,action的三个属性nameclassmethod都可以使用通配符。
       以下举例说明:
       1<action name=”*Action” class=”cc.dynasoft.LoginAction” method=”{1}”>
              ……
              </action>
解释一下上面代码的含义:上面定义的不是一个普通的action,而是定义了一系列的action,只要URL*Action.action的模式,都可以通过该Action进行处理。但该Action定义了一个表达式{1},该表达式的值就是name属性值中的第一个*的值。
例如,如果用户请求的URLloginAction.action,则调用该actionlogin方法;如果用户请求的URLregistAction.action,则调用该actionregist方法。
 
2<action name=”*Action” class=”cc.dynasoft.{1}Action”>
 
       ……
            
     </action>
 
比如说:如果URLRegistAction.action,可以匹配上面的action,该action的处理类是cc.dynasoft.RegistAction
 
3<action name=”*_*” class=”cc.dynasoft.{1}Action” method=”{2}”>
当一个actionBook_save.action的时候将调用BookActionsave方法来处理用户请求。
 
注意这个时候指定校验文件需要注意,比如说Book_save.action的校验文件应该是
Book_save-validation.xml
 
4<action name=”*”>
             <result>/{1}.jsp</result>
       </action>
 
这个应该不难理解,呵呵。
 
以下需要注意的问题:
如果有URLabcAction.action的请求,如果struts.xml文件有名为abcActionAction,则一定由该Action来处理用户请求;如果struts.xml文件没有名为abcActionAction,则搜索name属性值匹配abcActionAction,例如name*Action**Action并不会比*更优先匹配abcAction的请求,而是先找到哪个Action,就先由哪个Action来处理用户的请求。因此,我们应该将名为*Action配置在最后,否则struts2将使用该Action来处理所有希望使用模式匹配的请求。
处理结果
struts2通过在struts.xml文件中使用<result>元素来配置结果,根据<result>元素所在位置的不同,struts2提供了两种结果。
局部结果:将<result>作为<action>元素的子元素配置
全局结果:将<result>作为<global-result>元素的子元素配置。
以下列出比较标准的配置:
<result name=”success” type=”dispatcher”>
       <param name=”location” >/thank_you.jsp</param>
<param name=”parse” >true</param>
</result>
 
location:用于指定实际视图资源
parse:该参数指定是否允许在实际视图名称中使用ONGL表达式,默认为true。如果设置为false则不允许使用,通常不需要修改。
一般我们比较常用的写法:
<result name=”success” type=”dispatcher”>
/thank_you.jsp
</result>
 
注意如果没有指定name属性:则默认是success;如果没有指定type,则默认就是dispatcher,即JSP
下面列出struts2内建支持的结果类型如下:
chainAction链式处理的结果类型,也就是将结果转发到这个action中。
chart:整合JFreeChart的结果类型
dispatcher:用于整合JSP的结果类型
freemarker:用于整合freemarker结果类型。
httpheader:用于控制特殊的HTTP行为的结果类型。
jasper:用于JasperReports整合的结果类型
jsf:用于整合JSF后的结果类型
redirect:实际上dispatcherredirect的区别就是在于转发和重定向的区别。
redirect-action:用于直接redirect action
stream:用于向浏览器返回一个Inputstream(用于文件下载)
tiles:用于整合Tiles后的结果类型。
velocity:用于整合Velocity的结果类型。
xslt:用于整合XML/XSLT的结果类型。
plaintext:用于显示某个页面的源代码。
 
plaintextredirect以及redirect-action的配置分别如下:
<result type=”plaintext”>
       <param name=”location”>/welcome.jsp</param>
       <!—设置字符集编码-->
       <param name=”charset”>gb2312</param>
</result>
 
<result type=”redirect”>
       /welcome.jsp
</result>
 
<result type=” redirect-action”>
       <!—指定action的命名空间-->
       <param name=”namespace”>/ss</param>
<!—指定action的名字-->
       <param name=”actionName”>login </param>
</result>
 
在请求结果中使用ONGL表达式
 
例子:
<result type=”redirect”>edit.action?skillName=${currentSkill.name}</result>
 
对于上面的表达式语法,要求action中必须包含currentSkill属性,并且currentSkill属性必须包含name属性,否则${currentSkill.name}表达式值为null
 
属性驱动和模型驱动
我不推荐使用模型驱动,属性驱动完全可以实现模型驱动的效果。


异常处理
       异常处理在struts2中采用可配置的方式来处理,主要是为了防止异常代码和action代码耦合。我们比较希望的异常处理模式是这样的,如果出现了异常一,则系统跳转到视图1;如果出现了异常二,则系统转到视图2
       我们查看execute的声明:public String execute() throws Exception可以发现将异常抛出由struts2框架进行处理,为了处理异常,我们必须使用exception拦截器,由于在struts-default.xmldefaultStack中已经存在这个拦截器的定义,于是我们可以不用做任何事情。
       struts2的异常处理机制是通过在struts.xml文件中配置<exception-mapping />元素完成的,配置该元素的时候,需要指定两个属性:
exception:此属性指定该异常映射所设置的异常类型。
result:出现这个异常的时候,转入result属性所指向的结果。
根据<exception-mapping />元素出现的位置的不同,异常映射又可分为两种:
局部异常映射:将<exception-mapping />作为action的子元素配置
全局异常映射:将<exception-mapping />元素作为<global-exception-mappings>元素的子元素配置。
实际上配置类似result,可以有局部,也可以是全局,局部优先。
 
举个例子:
<global-exception-mappings>
       <exception-mapping exception=”java.sql.SQLException” result=”sql”/>
<exception-mapping exception=”java.lang.Exception” result=”root”/>
</ global-exception-mappings>
 
注意以上的sqlroot是全局result
输出异常信息:
<s:property value=”exception” />:输出异常对象本身,注意这个异常代表Exception的实例,因此可以调用message属性。
<s:property value=”exceptionStack” />:输出异常堆栈信息。
 
分享到:
评论
3 楼 a5889012 2011-07-27  
今日收获了
2 楼 yq1267 2008-01-29  
学习下 呵呵
1 楼 chensq82 2008-01-22  
总结的很好,一下子解决了好多谜团!
希望博主多弄点strut2的资料 呵呵

相关推荐

    struts配置大全(1、2全)

    本资料“struts配置大全(1、2全)”涵盖了Struts 1和Struts 2两个版本的核心配置,以及与Spring MVC的整合配置,旨在帮助开发者深入理解并熟练掌握Struts框架的配置方法。 **Struts 1配置** Struts 1的配置主要集中...

    STRUTS配置文件

    struts配置文件,用于创建springmvc与struts工程的配置文件,集合加数组获得后台的空间空间空间 空间 空间空了

    简单Struts配置案例

    通过Struts配置文件,我们可以定义各个Action和它们对应的处理方法。 在配置简单的Struts应用时,主要涉及以下几个步骤: 1. **添加依赖**:确保你的项目包含了Struts2的核心库。这通常通过在Maven或Gradle的依赖...

    多个struts配置文件使用

    以下是对“多个struts配置文件使用”这一主题的详细解析。 ### 一、Struts框架概述 Struts是一个开源的MVC(Model-View-Controller)框架,用于构建可扩展的企业级Java Web应用程序。它提供了一种结构化的方式来...

    struts 配置

    2. `&lt;init-param&gt;`:在这里,我们设置`ActionServlet`的初始化参数,特别是`config`参数,它指定了`struts-config.xml`的路径,这是Struts配置文件的位置。 3. `&lt;welcome-file-list&gt;`:不能直接将Struts的Action...

    Struts配置文件详解

    本文将深入探讨Struts配置文件的细节,包括`web.xml`和`struts-config.xml`。 首先,`web.xml`是每个Web应用程序的标准部署描述符,它是基于XML的文件,用于向Web容器(如Tomcat)提供关于应用如何运行的信息。`web...

    Struts配置文件详解.pdf

    ### Struts配置文件详解 #### 一、Struts配置文件的重要性与作用 Struts框架作为Java Web开发领域中的一种流行MVC(Model-View-Controller)框架,它提供了一种结构化的方式来构建Web应用程序。在Struts框架中,`...

    struts配置文件详细说明

    7. **Struts配置文件:** `struts-config.xml`是Struts框架的核心配置文件,它定义了表单Bean、Action、Forward等组件。每个元素对应`org.apache.struts.config`包中的类,如`ModuleConfig`是核心类,它存储了整个...

    Struts配置

    详细讲解了Struts如何配置,适合刚刚接触Struts的开发者来配置环境

    struts配置文件讲解

    Struts配置文件是该框架的核心组成部分,它定义了请求如何被处理、视图如何与控制器交互等关键信息。在这篇详尽的讲解中,我们将深入探讨Struts配置文件的关键元素和作用。 1. **struts-config.xml文件**:这是...

    MVC架构,struts详细配置,多个struts配置文件,Action的调用方式

    **多个Struts配置文件**: Struts2支持多个配置文件,可以通过`&lt;include&gt;`标签来导入其他配置文件,这样可以使配置更加模块化,方便管理和维护。 **Action的调用方式**: Struts2支持基于注解的Action配置,可以...

    struts配置文件拆分

    struts-config.xml拆分,超级简单

    Struts 配置文件详解

    ### Struts配置文件详解 #### 一、概述 Struts框架是Java Web开发中的一个重要工具,它使用MVC(Model-View-Controller)设计模式来组织应用逻辑,从而提高代码的可维护性和可读性。Struts框架的核心是通过两个XML...

    J2EE struts配置实例程序

    在本"J2EE Struts配置实例程序"中,我们将深入探讨Struts2的配置与基本操作。 一、Struts2概述 Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,提供了更强大的功能和更好的性能。Struts2的核心设计...

Global site tag (gtag.js) - Google Analytics