首页 > 其他 > 详细

Struts2 Interceptor学习

时间:2014-05-26 03:09:37      阅读:301      评论:0      收藏:0      [点我收藏+]

Interceptor的设计思想,其实是Spring里面的AOP思想,尽管Struts2又有自己的Interceptor但是,在实际开发中,用的较少,SSH整合之后你可以采用AOP事务处理进行拦截,更方便

---------------------------------华丽的分割线---------------------------------------

从一个简单的DEMO入手,正常情况下,客户端可以直接访问我的Action,但是我不想让他们访问,就在Struts2和Action之间架设一道拦截器Interceptor。在用户直接访问我的Action时做出验证,看你是否已经用name="hh"的信息登陆(登录信息放在Session),如果已经登陆,启动拦截,不让你二次访问,如果没有登陆直接放行。

第一步:

MyInterceptor类要继承AbstractInterceptor父类,并实现intercept重载,代码如下:

bubuko.com,布布扣
package com.huohuo.interceptor;

import java.util.Map;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;


public class MyInterceptor extends AbstractInterceptor {
    public String name;
    @Override
    public String intercept(ActionInvocation ai) throws Exception {
        // TODO Auto-generated method stub
        
        String url = ServletActionContext.getRequest().getRequestURI().toString();
        System.out.println(url);
        Map session = ai.getInvocationContext().getSession();
        
        if(url.indexOf("loginAction")!=-1)
            {
            if(session.get("name")!=null)
                {
             name=session.get("name").toString();
             System.out.println("Interceptor"+name);
             if(name.equals("hh"))
                    {
                    return "interceptor";        //返回result name="interceptor"的JSP页面
} } } return ai.invoke(); //让程序继续执行 } }
bubuko.com,布布扣

第二步:

写LoginAction类

bubuko.com,布布扣
package com.huohuo.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware{
    private String name;
    private Map<String,Object> session;
    
    public Map<String, Object> getSession() {
        return session;
    }
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public String execute()
    {
        session.put("name", name);
        System.out.println("action----"+name);
        return  SUCCESS;
    }
}
bubuko.com,布布扣

第三部:配置struts.xml文件

bubuko.com,布布扣
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

     <constant name="struts.devMode" value="true" />
     <!--Action配置  -->
     
     <package name="default" namespace="/" extends="struts-default">             //自定义拦截器和Action写在同一个package下
     <interceptors>
         <interceptor name="myInterceptor" class="com.huohuo.interceptor.MyInterceptor"></interceptor> //添加自己的拦截器
           <interceptor-stack name="myInterceptorStack">              //配置一个interceptor stack 
              <interceptor-ref name="myInterceptor"/>
                <interceptor-ref name="defaultStack"/>                  //这个必须要有,添加自己的拦截器会让默认的拦截器失效,所以要添加
          </interceptor-stack>
   </interceptors>
 
        <action name="loginAction" class="com.huohuo.action.LoginAction"> 
            <interceptor-ref name="myInterceptorStack"></interceptor-ref>      
            <result name="interceptor">/interceptor.jsp</result> 
            <result>/success.jsp</result>
            <result name="input">/input.jsp</result>           
        </action>
    </package>
    <!-- Add packages here -->
</struts>
bubuko.com,布布扣

第四步:配置好自己的JSP页面,就可以成功拦截。

Struts2 Interceptor学习,布布扣,bubuko.com

Struts2 Interceptor学习

原文:http://www.cnblogs.com/BrowserSnake/p/3749282.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!