Strust2优点之全局异常处理器+拦截器

这次记录一下strust2的异常处理器和拦截器,我觉得很好用
一.异常处理器(用于自定义捕捉异常)
实现功能,当发生异常时转到自定义的异常页面(404页面)
1.在strust2的配置文件添加一个引入(引入写404那个文件的xml文件)

<include file="index404.xml"></include>

2.index404.xml

<package name="global" extends="struts-default">
`<global-results>    

<result name=”error”type=”redirect”>/default404jsp.jsp</global-results>
//发生异常时捕捉,找到转向的页面“result”

    <global-exception-mappings> 
           <exception-mapping exception="java.lang.Exception" result="error"/> 
        </global-exception-mappings>
</package>

3.任意一个有异常的action页面(例如,算数的异常,当被除数为0的时候报异常,捕捉,并找向配置文件进行处理)
public class DealMathAction extends ActionSupport{

private int i;
private int j;
public int getI() {
    return i;
}
public void setI(int i) {
    this.i = i;
}
public int getJ() {
    return j;
}
public void setJ(int j) {
    this.j = j;
}


public String execute()throws Exception{
    i=8;
    j=0;
    try{
    int result=i/j;
    }catch(Exception e){

        return "error"; 

    }
    return "success";
}

}

完成了

二.拦截器(iterceptor)
1.在xml中的配置

<interceptors>
    <interceptor name="authority" class="com.xwl.action.AuthorityInterceptor"></interceptor>
    <interceptor-stack name="mydefault">
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <interceptor-ref name="authority"></interceptor-ref>
    </interceptor-stack>
</interceptors>
<default-interceptor-ref name="mydefault"/>

<!– 设置全局的results,拦截器拦截之后转向login.jsp页面 –>

<global-results>``
<result name="login">``/login.jsp`</result>`
        <result name="input">/login.jsp</result>
</global-results>

2.拦截器的action
package com.xwl.action;
import java.util.HashMap;
import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class AuthorityInterceptor implements Interceptor{

@Override
public void destroy() {
    // TODO Auto-generated method stub
    System.out.println("destory");

}

@Override
public void init() {
    // TODO Auto-generated method stub
    System.out.println("init");
}

@Override
public String intercept(ActionInvocation invocation) throws Exception {
    // TODO Auto-generated method stub
    //HashMap<Object, String> map=new HashMap<Object, String>();

    //获取这个拦截器
    ActionContext actioncontext=invocation.getInvocationContext();
    Map session=actioncontext.getSession();
    String user=(String) session.get("user");
    //假如当前用户已经登录的话(利用session),并且登录的人为xwl的话
    if(user!=null&&user.equals("xwl")){

        System.out.println("use interceptor");
    //调用拦截器的invoke方法,来通过这个拦截器
        String result=invocation.invoke();
        return result;
    }else{
        没有登录的话,进行拦截
        session.put("msg", "please login");
        System.out.println("0.0");
        return Action.INPUT;

    }   

}

}
完成了
另外发表一些自己的感悟,今天使用了Servlet的过滤器和监听器共同实现了对网站权限的设定,使未登陆的用户不能访问主页面等页面,同时使用了监听器对session进行了跟踪,确保系统安全。(觉得过滤器和拦截器基本差不多,但是若是对多个包中的内容进行拦截的话,拦截器反而产生的代码量有点多,因此采用了过滤器实现了基本的功能,也算小小的成功啦)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值