zoukankan      html  css  js  c++  java
  • 自定义拦截器

    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)处理。。。。
  • 相关阅读:
    【题解】NOIP2016换教室
    【题解】平面最近点对(加强版)
    [atcoder002E] Candy Piles [博弈论]
    [AGC002D] Stamp Rally [并查集+整体二分]
    [ACG001E] BBQ hard [dp]
    [BJOI2006][bzoj1001] 狼抓兔子 [最小割]
    [usaco jan 09] 安全路径 travel [最短路径树]
    [usaco jan 09] 气象牛 baric [dp]
    [poj1741] tree [点分治]
    [NOI2009] 植物大战僵尸 [网络流]
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2389637.html
Copyright © 2011-2022 走看看