如果你不喜歡我請直接告訴我-------路
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>
<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