struts 2 常用配置

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” />:输出异常堆栈信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值