關於自定義攔截器配置
1.步驟一、在WebRoot根目錄下WEB-INF創建一個名稱為myinter的文件夾,里面有三個文件
1.在struts.xml首先配置一個默認的action節點
步驟二:在login.xml配置文件的action節點
步驟三:創建一個名稱為loginAction的類
1 package cn.jbit.action; 2 3 import java.util.Map; 4 5 import cn.jbit.entity.User; 6 7 8 import com.opensymphony.xwork2.ActionContext; 9 import com.opensymphony.xwork2.ActionSupport; 10 import com.opensymphony.xwork2.ModelDriven; 11 12 public class loginAction extends ActionSupport implements ModelDriven<User>{ 13 14 private User user=new User(); 15 16 @Override 17 public String execute() throws Exception { 18 Map<String, Object> map = ActionContext.getContext().getSession(); 19 if(user!=null){//說明用戶已登錄 20 if(user.getName().equals("1")&&user.getPassword().equals("1")){ 21 map.put("uname", user.getName()); 22 return SUCCESS; 23 }else{ 24 return LOGIN; 25 } 26 }else{//用戶直接通過url請求到 27 if(map!=null&&map.get("uname")!=null){ 28 return "success"; 29 }else{ 30 return "login"; 31 } 32 } 33 } 34 35 36 37 38 39 40 41 public User getUser() { 42 return user; 43 } 44 public void setUser(User user) { 45 this.user = user; 46 } 47 48 49 50 public User getModel() { 51 // TODO Auto-generated method stub 52 return user; 53 } 54 55 56 57 58 }
在list.xml中配置
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <constant name="struts.devMode" value="true"></constant> 7 <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> 8 <package name="list" namespace="/" extends="struts-default"> 9 10 <action name="list" class="cn.jbit.action.ViewAction"> 11 <result name="success">/WEB-INF/myinter/list.jsp</result> 12 <result name="login">/WEB-INF/myinter/login.jsp</result> 13 </action> 14 15 </package> 16 17 </struts>
ViewAction
1 package cn.jbit.action; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class ViewAction extends ActionSupport{ 6 7 @Override 8 public String execute() throws Exception { 9 10 return SUCCESS; 11 } 12 13 }
步驟四:設置自己的Interceptor進行攔截
1 package cn.jbit.intercepter; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 7 8 import com.opensymphony.xwork2.ActionContext; 9 import com.opensymphony.xwork2.ActionInvocation; 10 import com.opensymphony.xwork2.interceptor.Interceptor; 11 12 13 14 public class MyTimerIntercepter implements Interceptor{ 15 16 17 //進行攔截操作 18 public String intercept(ActionInvocation invocation) throws Exception { 19 System.out.println("hmy=============intercepter"); 20 Map<String, Object> map = ActionContext.getContext().getSession(); 21 Object uname=map.get("uname"); 22 String value; 23 String actionName=invocation.getProxy().getActionName(); 24 System.out.println(actionName); 25 26 if(actionName.equals("login")){ 27 value=invocation.invoke(); 28 }else if(uname!=null){ 29 //已經登陸了 30 value=invocation.invoke(); 31 String method=invocation.getProxy().getMethod(); 32 System.out.println("方法:"+method); 33 }else{ 34 value="login"; 35 } 36 System.out.println("邏輯視圖名:"+value); 37 return value; 38 } 39 40 public void destroy() { 41 System.out.println("hmy-destory"); 42 } 43 44 public void init() { 45 System.out.println("hmy=init"); 46 } 47 48 49 50 51 52 }
上述方式定義的攔截器,只適用於在login.xml文件的action節點的類中具有攔截作用,那么我們如何將攔截器提升為全局的呢,這就需要我們去繼承我們自定義的包
我們只需要修改三個xml文件即可
1.struts.xml文件
2.login.xml文件
3.list.xml文件
這樣我們就可以通過控制台上打印的信息判斷是否都可以去走我們自定義的攔截器
