您好,登錄后才能下訂單哦!
這篇文章主要講解了“struts2攔截器怎么配置和使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“struts2攔截器怎么配置和使用”吧!
攔截器是Struts2最強大的特性之一,它是一種可以讓用戶在Action執行之前和Result執行之后進行一些功能處理的機制。
說到攔截器interceptor,就會想到過濾器filter:
過濾器filter是對所有的東西進行過濾,包括.css,.js,.jpg等這些內容都過濾;
攔截器interceptor是對action進行攔截,是屬于struts的工具。
這里以實現登錄驗證為例來進行攔截器的使用
首先創建一個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必須寫,指定這個攔截器的位置和名稱方便下面調用--> <interceptor-stack name="newStack"> <interceptor-ref name="login"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 這個是系統默認的Stack,如果你只調用上面自己寫的Stack,則會只執行login攔截器的方法,很多地方會發生錯誤接收不到值--> </interceptor-stack> </interceptors> <global-results> <!--這個是公共類,所有的action都會走這個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(); } }
實現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>
實現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>//自己定義的一個名為login的攔截器,調用自com.util.SuccessInterceptor <interceptor-stack name="newStack"> <interceptor-ref name="login"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack>//自定義一個名為newStack的攔截器,里面包含login的攔截器和defaultStack默認的攔截器 </interceptors> <global-results> <result name="nologin">/Login/login.jsp</result> </global-results>//通用走nologin的時候都走此處 <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>
在攔截器中使用內置對象
1.ActionContext獲取Map.
2.ServletActionContext獲取HttpSession
3.實現SessionAware接口
感謝各位的閱讀,以上就是“struts2攔截器怎么配置和使用”的內容了,經過本文的學習后,相信大家對struts2攔截器怎么配置和使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。