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

stuts2 拦截器的简单使用_第1张图片

说明:HelloWordTest是我的Web工程名字,bussiness_index.do .do后缀是我修改了,你也可以自定义自己的后缀


运行结果二:

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

stuts2 拦截器的简单使用_第2张图片

说明:通常默认首页是index.jsp,我这里默认首页就是login.jsp(如何修改成login.jsp,自己百度去吧)

如图所示填写,点击登录

stuts2 拦截器的简单使用_第3张图片

2、在浏览器的新的选项卡的地址栏敲入:http://localhost:8080/HelloWordTest/bussiness_index.do

stuts2 拦截器的简单使用_第4张图片

看到如上代码以及结果,聪明如你一定已经理解了。



你可能感兴趣的:(struts2,Interceptor,拦截器)