Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29956010
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Java

2008-12-16 15:01:17

<action name="Store" class="bookAction" method="store">

   

   <interceptor-ref name="appStack"/>

   <result type="redirect">List.actionresult>

   <result name="input">Edit.jspresult>

action>

配置:

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

       namespace="/Book">

       <interceptors>

          

           <interceptor name="testInterceptor"

              class="tutorial.intercept.TestIntercept" />

              <interceptor name="testMethodInterceptor"

                         class="tutorial.intercept.TestMethodIntercept" >

                

                    <param name="includeMethods">list,loadparam>

                      

                  <param name="excludeMethods">storeparam> 

              interceptor>

          

           <interceptor-stack name="appStack">

               <interceptor-ref name="testInterceptor" />

             

              <interceptor-ref name="defaultStack" />

               <interceptor-ref name ="timer" />

                <interceptor-ref name ="testMethodInterceptor" />

           interceptor-stack>

       

       interceptors>

      

       <default-interceptor-ref name="appStack">default-interceptor-ref>

      

       <global-results>

           <result name="root">/exception.jspresult>

       global-results>

       <global-exception-mappings>

           <exception-mapping exception="common.MyException"

              result="root" />

       global-exception-mappings>

 

      

       <action name="List" class="bookAction" method="list">

           <result>List.jspresult>

       action>

       <action name="Edit" class="bookAction" method="load">

           <result>Edit.jspresult>

       action>

       <action name="Store" class="bookAction" method="store">

              

             <interceptor-ref name="appStack"/>

           <result type="redirect">List.actionresult>

           <result name="input">Edit.jspresult>

       action>

       <action name="Remove" class="bookAction" method="remove">

           <result type="redirect">List.actionresult>

       action>

   package>

注意:当我们自定义拦截器后,发现,struts2自身的拦截器却不起作用了。这里因为我们的拦截器覆盖了struts2自身的拦截器(defaultStack)的原因造成的。解决方法是,配置一个拦截器栈,将struts2自身的拦截器配置进去即可。

看到了上面有些写到是什么意思呢?

3. Struts2XWork)提供的拦截器的功能说明:

 

拦截器

名字

说明

Alias Interceptor

alias

在不同请求之间将请求参数在不同名字件转换,请求内容不变

Chaining Interceptor

chain

让前一个Action的属性可以被后一个Action访问,现在和chain类型的result)结合使用。

Checkbox Interceptor

checkbox

添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox

Cookies Interceptor

cookies

使用配置的name,value来是指cookies

Conversion Error Interceptor

conversionError

将错误从ActionContext中添加到Action的属性字段中。

Create Session Interceptor

createSession

自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

Debugging Interceptor

debugging

提供不同的调试用的页面来展现内部的数据状况。

Execute and Wait Interceptor

execAndWait

在后台执行Action,同时将用户带到一个中间的等待页面。

Exception Interceptor

exception

将异常定位到一个画面

File Upload Interceptor

fileUpload

提供文件上传功能

I18n Interceptor

i18n

记录用户选择的locale

Logger Interceptor

logger

输出Action的名字

Message Store Interceptor

store

存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。

Model Driven Interceptor

model-driven

如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。

Scoped Model Driven

scoped-model-driven

如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用ActionsetModel方法将其放入Action内部。

Parameters Interceptor

params

将请求中的参数设置到Action中去。

Prepare Interceptor

prepare

如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor

scope

Action状态存入sessionapplication的简单方法。

Servlet Config Interceptor

servletConfig

提供访问HttpServletRequestHttpServletResponse的方法,以Map的方式访问。

Static Parameters Interceptor

staticParams

struts.xml文件中将中的中的内容设置到对应的Action中。

Roles Interceptor

roles

确定用户是否具有JAAS指定的Role,否则不予执行。

Timer Interceptor

timer

输出Action执行的时间

Token Interceptor

token

通过Token来避免双击

Token Session Interceptor

tokenSession

Token Interceptor一样,不过双击的时候把请求的数据存储在Session

Validation Interceptor

validation

使用action-validation.xml文件中定义的内容校验提交的数据。

Workflow Interceptor

workflow

调用Actionvalidate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor

N/A

从参数列表中删除不必要的参数

Profiling Interceptor

profiling

通过参数激活profile


DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "" >
<struts>

    

    
<include file="struts-default.xml">include>
    
    
    

    
<package name="com.kay.struts2" extends="struts-default" namespace="/test">
        
<interceptors>
            

            
<interceptor name="timer" class="com.kay.timer">interceptor>
            
<interceptor name="logger" class="com.kay.logger">interceptor>
            

            
<interceptor-stack name="mystack">相当于一个堆栈一样的东西哦!放拦截器丢进来
                
<interceptor-ref name="timer">interceptor-ref>
                
<interceptor-ref name="logger">interceptor-ref>
            
interceptor-stack>
        
interceptors>
        
        

        
<default-interceptor-ref name="mystack">default-interceptor-ref>
        
        
        

        
<global-results>
            
<result name="input">/error.jspresult>
        
global-results>
        
        

        
<action name="hello" class="com.kay.struts2.Action.LoginAction">
            

            
<interceptor-ref name="timer">interceptor-ref>
        
            

         
<result name="success" type="dispatcher">/talk.jspresult>
         

         
<param name="url">param>
        
action>
    
package>
struts>

  • 多个拦截器可以组成一个拦截器堆栈。每个拦截器命名为一。
  • Registering Interceptors

 

 

   

   

 


多个拦截器可以放置在一起的哦!放在一个栈中去了哦!
与此同时对于某一个Action也是可以有自己的拦截器的哦
  • 每个Action也可以定义自己的拦截器:
A local Interceptor Stack

  
...
  


自定义拦截器的写法:
自定义拦截器的一般写法:继承了一个类的哦!
public class UserAccessInterceptor extends AbstractInterceptor {
 
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
}
 
@Override
public void init() {
// TODO Auto-generated method stub
super.init();
}
 
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
Map session = arg0.getInvocationContext().getSession();
String username = (String) session.get("username");
if ((username == null || username == ""))
return "input";
else {
return arg0.invoke();
}
}
}




阅读(1025) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~