溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

struts2攔截器怎么配置和使用

發(fā)布時(shí)間:2022-09-29 14:44:06 來源:億速云 閱讀:108 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“struts2攔截器怎么配置和使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“struts2攔截器怎么配置和使用”吧!

攔截器是Struts2最強(qiáng)大的特性之一,它是一種可以讓用戶在Action執(zhí)行之前和Result執(zhí)行之后進(jìn)行一些功能處理的機(jī)制。

說到攔截器interceptor,就會想到過濾器filter:

過濾器filter是對所有的東西進(jìn)行過濾,包括.css,.js,.jpg等這些內(nèi)容都過濾;

攔截器interceptor是對action進(jìn)行攔截,是屬于struts的工具。

這里以實(shí)現(xiàn)登錄驗(yàn)證為例來進(jìn)行攔截器的使用

首先創(chuàng)建一個(gè)Login類:

package com.dao;public class Login {    private String username;    private String password;    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;
    }
}

然后配置struts.xml:

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

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="myin" class="com.util.Interceptor"></interceptor>
            <interceptor name="login" class="com.util.SuccessInterceptor"></interceptor> <!--具體的name和class必須寫,指定這個(gè)攔截器的位置和名稱方便下面調(diào)用-->
            <interceptor-stack name="newStack">
                <interceptor-ref name="login"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 這個(gè)是系統(tǒng)默認(rèn)的Stack,如果你只調(diào)用上面自己寫的Stack,則會只執(zhí)行l(wèi)ogin攔截器的方法,很多地方會發(fā)生錯(cuò)誤接收不到值-->
            </interceptor-stack>
        </interceptors>
        
        <global-results>    <!--這個(gè)是公共類,所有的action都會走這個(gè)results -->
            <result name="nologin">/Login/login.jsp</result>
        </global-results>
        <action name="Login_login" class="com.controller.LoginAction" method="login">
            <result>/Login/login.jsp</result>
        </action>
        <action name="Login_success" class="com.controller.LoginAction" method="success">
            <result>/Login/success.jsp</result>
        </action>
        <action name="*_*" class="com.controller.{1}Action" method="{2}">
            <interceptor-ref name="newStack"></interceptor-ref> 
            
            <result>
                {1}/{2}.jsp            </result>
        </action>
    </package></struts>

配置LoginAction.java:

package com.controller;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import org.apache.struts2.interceptor.SessionAware;import org.apache.tomcat.jni.User;import com.dao.Login;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class LoginAction extends ActionSupport implements ModelDriven<Login>,SessionAware {    private Map<String,Object> session ;    private Login user = new Login();    
    public String login(){        return SUCCESS;
    }    public String success(){
        java.util.List<String> uid = new ArrayList<String>();
        uid.add("admin");
        uid.add("zhangsan");
        uid.add("lisi");
        uid.add("wangwu");
        ActionContext context=ActionContext.getContext();
        session=context.getSession();
        Object obj = session.get("user");        if(obj==null){            
            if(uid.contains(user.getUsername())){
                session.put("user", user.getUsername());                return SUCCESS;
            }            else{                return "nologin";
            }
            
        }        else{            return SUCCESS;
        }
        
        
    }    @Override
    public void setSession(Map<String, Object> arg0) {        // TODO 自動生成的方法存根
        this.session=arg0;
        
    }    @Override
    public Login getModel() {        
        return user;
    }
}

配置SuccessInterceptor.java:

package com.util;import java.util.Map;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class SuccessInterceptor extends AbstractInterceptor {    private Map<String,Object> session ;    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        System.out.println("asdasdas");
        session= ActionContext.getContext().getSession();        if(session.get("user")==null){            return "nologin";
        }        return arg0.invoke();
    }

}

實(shí)現(xiàn)login.jsp頁面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><h2>Login</h2><form action="Login_success">username:<input type="text" name="username" ><br>password:<input type="text" name="password" ><br><input type="submit" value="go" ></form></body></html>

實(shí)現(xiàn)success.jsp頁面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags" %>   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><h2>success</h2>username:<s:property value="#session.user" /><br>password:<s:property value="password" /><s:debug></s:debug></body></html>

攔截器的配置

1.SuccessInterceptor.java文件為攔截器的配置,繼承自AbstractInterceptor接口。

2.配置struts.xml文件

<package name="default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="myin" class="com.util.Interceptor"></interceptor>
            <interceptor name="login" class="com.util.SuccessInterceptor"></interceptor>//自己定義的一個(gè)名為login的攔截器,調(diào)用自com.util.SuccessInterceptor            <interceptor-stack name="newStack">
                <interceptor-ref name="login"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>//自定義一個(gè)名為newStack的攔截器,里面包含login的攔截器和defaultStack默認(rèn)的攔截器        </interceptors>
        
        <global-results>
            <result name="nologin">/Login/login.jsp</result>
        </global-results>//通用走nologin的時(shí)候都走此處        <action name="Login_login" class="com.controller.LoginAction" method="login">
            <result>/Login/login.jsp</result>
        </action>
        <action name="Login_success" class="com.controller.LoginAction" method="success">
            <result>/Login/success.jsp</result>
        </action>
        <action name="*_*" class="com.controller.{1}Action" method="{2}">
            <interceptor-ref name="newStack"></interceptor-ref> //調(diào)用自定義的攔截器            
            <result>
                {1}/{2}.jsp            </result>
        </action>
    </package>

在攔截器中使用內(nèi)置對象

1.ActionContext獲取Map.

2.ServletActionContext獲取HttpSession

3.實(shí)現(xiàn)SessionAware接口

感謝各位的閱讀,以上就是“struts2攔截器怎么配置和使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對struts2攔截器怎么配置和使用這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI