java SSH第一章学习内容(Struts2拦截器,拦截器堆栈)

Struts2拦截器,需要导相应的jar包及复制Struts.xml文件到src目录下,web.xml进行修改


拦截器

在访问Action的时候进行拦截处理,需要继承AbstractInterceptor,重写intercept方法


案例一:在访问Action输出一句话(买电脑),使用拦截器在访问Action之前和之后各输出一句话(送键盘)(送鼠标)

1.新建一个买电脑的action,继承ActionSupport,进行输出一句话
public class BuyAction extends ActionSupport{
    @Override
    public String execute() throws Exception {
        System.out.println("买电脑");
        return SUCCESS;
    }
}

2.JSP页面提交到Action中
 


       
   


3.新建一个买电脑送优惠的类用作于拦截器,继承AbstractInterceptor,重写里面的intercept方法,这句话代表String obj=arg0.invoke();相当于拦截前输出或则拦截后输出,案例中表示拦截前送键盘,拦截后送鼠标
public class YouhuiAction extends AbstractInterceptor{
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        System.out.println("送键盘");
        String obj=arg0.invoke();
        System.out.println("送鼠标");
        return obj;
    }
}

4.修改struts.xml,在里面定义、使用拦截器


        
            
            
            

        
        
            
            /index.jsp
            
            
            
        



运行结果:


拦截器堆栈
如果拦截器过多,可以把打放进一个自定义的拦截器堆栈当中,当有action需要访问的时候,可以在配置文件中进行设置堆栈名即可


如在上述案例中多一个拦截器,可以把该拦截器放进拦截堆栈中,让需要使用拦截器的Action进行调用
1.创建送货拦截器
public class SonghuoAction extends AbstractInterceptor{
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        String obj=arg0.invoke();
        System.out.println("点赞好评免费送货");
        return obj;
    }
}

2.在配置文件中设置堆栈

        
        
            
            
            

            
            

            
            
                
                
                
            

        

        
        

        

        
        
            
            /index.jsp
            
        


运行结果:





案例二:用拦截器登录验证,如用户必须在登录页面通过用户名和密码访问登录的Action跳转到首页,防止用户直接访问首页的Action

1.创建实体类,里面有name+pwd的属性,get+set方法

2.在login.jsp页面中设置访问login.action

 


       用户名:
       密码:
       
   


3.新建loginAction,调用实体类,继承ActionSupport用于重写execute()方法,实现SessionAware接口用于获得Session存值,用于判断用户是否通过登录跳转到首页
public class loginAction extends ActionSupport implements SessionAware{
    private Map session;
    private Users users;
    public Users getUsers() {
        return users;
    }
    public void setUsers(Users users) {
        this.users = users;
    }
    public Map getSession() {
        return session;
    }
    @Override
    public String execute() throws Exception {
        if (users.getName().equals("admin")&&users.getPwd().equals("123456")) {
            session.put("users", users);
            return SUCCESS;
        }else {
            return ERROR;
        }
    }
    @Override
    public void setSession(java.util.Map session) {
        this.session=session;  
    }
}

4.创建首页的Aciton,当访问了该Action进行输出一句话
public class IndexAction extends ActionSupport{
    @Override
    public String execute() throws Exception {
        System.out.println("谢谢您的光临");
        return SUCCESS;
    }
}

5.创建跳转Action的拦截器,验证用户是否通过登录页面跳转过来的,需要继承AbstractInterceptor,重写intercept方法,判断之前存的Session是否为空,为空则跳转为登录页面,如不为空则正常执行
public class LLAction extends AbstractInterceptor{
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        System.out.println("进入拦截器");
        Map session = arg0.getInvocationContext().getSession();
        if (session.get("users")!=null) {
            return arg0.invoke();
        }else {
            return Action.LOGIN;
        }
    }
}

6.修改一下配置文件,定义、配置监听类

    
    

    
        
            
            /index.jsp
            
            /login.jsp
            /login.jsp
        

        
            /index.jsp
            /login.jsp
            /login.jsp
            
            
        


运行结果:直接拼接项目/Action名字.action无法访问,当注册登录可以访问

直接访问返回登录页面

 

你可能感兴趣的:(java SSH第一章学习内容(Struts2拦截器,拦截器堆栈))