自定义拦截器

1、客户端jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登陆页面</title>
</head>
<body>    
    <s:form action="login.action">        
        <s:textfield name="userName" label="用户名"/>
        <s:textfield name="passWord" label="密码"/>                
        <s:submit value="登录"/>        
    </s:form>    
</body>
</html>

2、struts.xml配置

 <?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.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="false"/>        
    
    
    <!-- Struts 2的Action必须放在指定的包空间下定义 -->
    <package name='struts2' extends="struts-default">        
        <interceptors>
            <interceptor name="myFirstInterceptor" class="interceptors.MyFirstInterceptor">
                <param name="name">我的第一个拦截器</param>
            </interceptor>            
        </interceptors>

        <!-- 定义login的Action,该Action的实现类为com.tomp.action.LoginAction类 -->
        <action name="login" class="Action.LoginAction" method="Hello">                        
            <!-- 定义处理结果和资源之间映射关系。 -->            
            <result name="error">/error.jsp</result>
            <result name="success">/welcome.jsp</result>
            <result name="input">/Login.jsp</result> 
            
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="myFirstInterceptor">
                <param name="name">改名后的拦截器1</param>
                <!-- includeMethods优先级高于excludeMethods -->
                <param name="excludeMethods">execute</param>
                <param name="includeMethods">execute,Hello</param>
            </interceptor-ref>                              
        </action>     
    </package>
</struts>

3、拦截器代码

 package interceptors;


import Action.*;

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


public class MyFirstInterceptor extends MethodFilterInterceptor  
{

    private static final long serialVersionUID = 8636232297561681863L;
    
    private String name;

    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }    
    protected String doIntercept(ActionInvocation arg0) throws Exception
    {//截获Action
        LoginAction action=(LoginAction)arg0.getAction();
        //arg0.addPreResultListener(new MyPreResultListener());
        System.out.println("在Action 执行Execute之前 "+this.name+"(MyFirstInterceptor)处理。。。。");
        String restult=action.execute();
        System.out.println("在Action 执行Execute之后 "+this.name+"(MyFirstInterceptor)处理。。。。");
        return restult;
    }
}

4、Action代码 

 package Action;


import java.util.Locale;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport
{

    private static final long serialVersionUID = 6104361402004864401L;
    
    /*
    public User user;
    
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    
*/

    
    private String userName;
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String passWord;
    
    public String result;
    
    
    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }
    
    
    public String Hello() throws Exception
    {
        return SUCCESS;
    }
    public void validateHello() 
    {
        if(this.getUserName().equals("sql"))
        {
            addFieldError("userName",this.getText("用户名不能为sql"));
        }    
                
    }

    public String execute() throws Exception
    {    
        
        if(this.userName.equalsIgnoreCase("sql")){
            throw new java.sql.SQLException("用户名不能为sql!");        
        }
        
        if(this.userName.equals("admin") &&
            this.passWord.equals("admin"))
        {
            ActionContext.getContext().getSession().put("user", this.userName);
            this.setResult("登录成功!");
            
            System.out.println("Action执行execute");
            
            
            
            System.out.println(Locale.getDefault());
            System.out.println(this.getText("login.user.requird"));
            System.out.println(this.getText("test"));
            
            return SUCCESS;
        }
        else
        {
            //return ERROR;
            ActionContext.getContext().getSession().put("user", this.userName);
            this.setResult("登录失败!");            
            return SUCCESS;
        }
        
        /*
        if(this.getUser().userName.equalsIgnoreCase("sql")){
            throw new java.sql.SQLException("用户名不能为sql!");        
        }
        
        if(this.getUser().userName.equals("admin") &&
            this.getUser().passWord.equals("admin"))
        {
            ActionContext.getContext().getSession().put("user", this.getUser().userName);
            this.setResult("登录成功!");
            return SUCCESS;
        }
        else
        {
            return ERROR;            
        }
*/
        
    }
    
    /*
    public void validate() 
    {
        if(this.getUserName()==null || this.getUserName().equals(""))
        {
            addFieldError("userName",this.getText("login.user.requird"));
        }    
        
        if(this.getPassWord()==null || this.getPassWord().equals(""))
        {
            addFieldError("passWord","passWord required!");
        }
    }
    
*/
    
}

5、执行结果 

 在Action 执行Execute之前 改名后的拦截器1(MyFirstInterceptor)处理。。。。

Action执行execute
zh_CN
用户名不能为空!
从LoginAction_zh_CN.properties中取出的国际化信息
在Action 执行Execute之后 改名后的拦截器1(MyFirstInterceptor)处理。。。。
原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2389637.html