stuts2 攔截器的簡單使用

如果你不喜歡我請直接告訴我-------路


Ubuntu終於裝好了,讓我開始Ubuntu下的開發吧。安裝JDK、tomcate、eclipse、myeclipse以及破解什麼的網上到處有教程,是在不難,關鍵在於多倒騰。

攔截器,所謂攔截器就是你在進行http請求時,stuts2攔截你的請求(AOP),然後做一定的處理,這就是攔截器的作用。這樣說很抽象,舉個例子:假如你現在有一個系統,進入系統要先登錄,登錄後纔可以做一些其他操作。那你如何保證你做一些操作時保證用戶已經登錄了,而不是用戶知道你的一些操作的URL直接訪問的呢?於是你就可以在用戶http請求時,攔截他的請求檢查session中是否有用戶的用戶名,如果有就正常運行結果,如果沒有讓他重新登錄。

攔截器其實很簡單看下下面的配置,聰明如你肯定是能理解的了。


以下代碼是struts.xml裏的代碼:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!--  修改stuts2攔截後綴 -->
	<constant name="struts.action.extension"  value="do"></constant>
	<package name="default" extends="struts-default">
		<!--  攔截器 -->
		<interceptors>
			<!--  聲明自定義攔截器 -->
			<interceptor name="loginInterceptor" class="com.hbyooge.interceptor.LoginInterceptor"></interceptor>
			<!--  攔截器棧 -->
			<interceptor-stack name="checkLoginStack">
				<!--  struts2默認攔截器 -->
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<!--  自定義攔截器 -->
				<interceptor-ref name="loginInterceptor"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		
		<!--  聲明默認攔截器。那麼在所有的action中如果不顯示配置攔截器的話,就默認調用這個聲明的攔截器 -->
		<default-interceptor-ref name="checkLoginStack"></default-interceptor-ref>
		
		<!-- 全局結果 -->
		<global-results>
			<result name="login">/reLogin.jsp</result>
		</global-results>
		
		<!-- Action -->
		<action name="default_*" class="com.hbyooge.action.BussinessAction" method="{1}">
			<result name="success" >/index.jsp</result>
			<!--  顯示聲明在這個Action中使用checkLoginStack攔截器 -->
			<interceptor-ref name="checkLoginStack"/>
		</action>
	</package>
	
	<package name="public" extends="default">
		
		<!-- 登錄 -->
		<action name="login_*" class="com.hbyooge.action.LoginAction" method="{1}">
			<result name="success">/index.jsp</result>
			<!--  顯示聲明在這個Action中使用defaultStack攔截器 -->
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
		<!--  業務 -->
		<action name="bussiness_*" class="com.hbyooge.action.BussinessAction" method="{1}">
			<result name="success">/index.jsp</result>
		</action>
	</package>
	
</struts>    


1、用interceptor聲明一個自定義的攔截器,name攔截器名稱,class用來實例化攔截器的類

<interceptor name="loginInterceptor" class="com.hbyooge.interceptor.LoginInterceptor"></interceptor>
2、interceptor-stack聲明一個攔截棧
<pre name="code" class="html"><interceptor-stack name="checkLoginStack">
	<!--  struts2默認攔截器 -->
	<interceptor-ref name="defaultStack"></interceptor-ref>
	<!--  自定義攔截器 -->
	<interceptor-ref name="loginInterceptor"></interceptor-ref>
</interceptor-stack>


攔截器LoginInterceptor.java的源碼

package com.hbyooge.interceptor;

import java.util.Map;

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

/**
 * 攔截器
 * @author hugsunshine
 */
public class LoginInterceptor extends AbstractInterceptor {

	private static final long serialVersionUID = 1L;
	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		// 獲取session
		Map<String,Object> session = arg0.getInvocationContext().getSession();
		// 獲取登錄後的用戶名
		Object obj = session.get("username");
		if(obj != null){
			// 已經登錄 
			return arg0.invoke();
		}
		else{
			// 沒有登錄
			return "login";
		}
	}
}

LoginAction.java的源碼

package com.hbyooge.action;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

public class LoginAction {
	/**
	 * 登錄驗證
	 * @return
	 */
	public String login(){
		HttpSession session = ServletActionContext.getRequest().getSession();
		session.setAttribute("username", "admin");
		return "success";
	}
}

Bussinessction.java的源碼

package com.hbyooge.action;

public class BussinessAction {
	public String index(){
		return "success";
	}
}

login.jsp主要代碼片段

<body>
  <h1>登錄</h1>
  <hr/>
    <form action="login_login.do">
    	用戶名:<input name="username"/><br/>
    	密碼:<input name="password"/><br/>
    	<input type="submit"  value="登錄"/>
    </form>
  </body>

relogin.jsp主要代碼片段

  <body>
    您還沒有登錄,請登錄! <br>
    <s:include value="/login.jsp"></s:include>
  </body>


index.jsp主要代碼片段
<body>
    登錄成功! <br>
  </body>


運行結果一:直接敲入URL---http://localhost:8080/HelloWordTest/bussiness_index.do


說明:HelloWordTest是我的Web工程名字,bussiness_index.do .do後綴是我修改了,你也可以自定義自己的後綴


運行結果二:

1、敲入URL:http://localhhost:8080/HelloWordTest


說明:通常默認首頁是index.jsp,我這裏默認首頁就是login.jsp(如何修改成login.jsp,自己百度去吧)

如圖所示填寫,點擊登錄


2、在瀏覽器的新的選項卡的地址欄敲入:http://localhost:8080/HelloWordTest/bussiness_index.do


看到如上代碼以及結果,聰明如你一定已經理解了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章