Struts2框架高級

一、自定義攔截器開發

1、目錄結構
在這裏插入圖片描述

2、文件
login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄頁面</title>
</head>
<body>
	<h1>登錄頁面</h1>
	<form action="<%=request.getContextPath()%>/user_login" method="post">
		<input type="text" name="userName" value="zs">
		<input type="password" name="password" value="123456">
		<input type="submit" value="確定">
	</form>
</body>
</html>

LoginAction.java

package com.test.ljq;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

	private static final long serialVersionUID = 1L;

	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;
	}

	public String login() {
		// TODO Auto-generated method stub
		if("zs".equals(userName)&&"123456".equals(password)) {
			ServletActionContext.getRequest().getSession().setAttribute("userName", userName);
			System.out.println("登錄成功");
			return SUCCESS;
		}
		else {
			System.out.println("登錄失敗");
			return LOGIN;
		}
	}
}

struts_ljq.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>
	<package name="ljq_pg" namespace="/" extends="struts-default">
		<!-- 註冊攔截器 -->
		<interceptors>
			<interceptor name="LoginInterc" class="com.test.interceptor.LoginIntercetor"></interceptor>
			<!-- 擴展系統默認攔截器棧 -->
			<interceptor-stack name="mystack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="LoginInterc"></interceptor-ref>			
			</interceptor-stack>
		</interceptors>
		
		<!-- 使用已配置的默認攔截器 -->
		<default-interceptor-ref name="mystack"/>
		
		<!-- 全局result -->		
		<global-results>
			<result name="login">/ljq/login.jsp</result>
		</global-results>
		
		<!-- 登錄的Action -->
		<action name="user_*" class="com.test.ljq.LoginAction" method="{1}">
			<!-- 登錄不用擴展攔截器 -->
			<interceptor-ref name="defaultStack"/>
			<!-- 重定向 -->
			<result name="success" type="redirectAction">index</result>
			<!-- 轉發 -->
			
			<!-- *代表方法 -->
			<allowed-methods>login</allowed-methods>
		</action>
		
		<!-- 首頁的Action -->
		<action name="index" class="com.test.ljq.IndexAction" method="index">
			<result name="inx">/ljq/index.jsp</result>
		</action>
	</package>


	<!-- include用於包含配置 -->
	<include file="example.xml" />

	<!-- Add packages here -->

</struts>

struts.xml

<include file="com/test/ljq/struts_ljq.xml" />

攔截器類:LoginIntercetor.java

package com.test.interceptor;

import java.util.Map;

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

public class LoginIntercetor extends AbstractInterceptor{

	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		//獲取上下文
		ActionContext actionContext = invocation.getInvocationContext();
		//獲取Session
		Map<String, Object> session = actionContext.getSession();
		Object object = session.get("USER_INFO");
		if(object!=null) {//已經存在這個session,證明登陸過
			//放行
			return invocation.invoke();
		}
		return Action.LOGIN;
	}

}

IndexAction.java

package com.test.ljq;

import com.opensymphony.xwork2.ActionSupport;

public class IndexAction extends ActionSupport{

	
	private static final long serialVersionUID = 1L;
	
	public String index() {
		System.out.println("首頁執行代碼");
		return "inx";
	}
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
	<h1>用戶中心</h1><br>
	用戶信息:<%=session.getAttribute("userName").toString()%>
</body>
</html>

原始鏈接:點擊查看

二、方法級別攔截器

可以具體攔截到某一個action的具體方法。

struts_ljq.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>
	<package name="ljq_pg" namespace="/" extends="struts-default">
		<!-- 註冊攔截器 -->
		<interceptors>
		<!-- 調用方法級別的攔截器 -->
			<interceptor name="LoginInterc" class="com.test.interceptor.MethodIntercetor">
				<param name="ExcludeMethods">login</param>
			</interceptor>
			<!-- 擴展系統默認攔截器棧 -->
			<interceptor-stack name="mystack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="LoginInterc"></interceptor-ref>			
			</interceptor-stack>
		</interceptors>
		
		<!-- 使用已配置的默認攔截器 -->
		<default-interceptor-ref name="mystack"/>
		
		<!-- 全局result -->		
		<global-results>
			<result name="login">/ljq/login.jsp</result>
		</global-results>
		
		<!-- 登錄的Action -->
		<action name="user_*" class="com.test.ljq.LoginAction" method="{1}">
			<!-- 登錄不用擴展攔截器 -->
			<!-- <interceptor-ref name="defaultStack"/> -->
			<!-- 重定向 -->
			<result name="success" type="redirectAction">index</result>
			<!-- 轉發 -->
			
			<!-- *代表方法 -->
			<allowed-methods>login</allowed-methods>
		</action>
		
		<!-- 首頁的Action -->
		<action name="index" class="com.test.ljq.IndexAction" method="index">
			<result name="inx">/ljq/index.jsp</result>
		</action>
	</package>


	<!-- include用於包含配置 -->
	<include file="example.xml" />

	<!-- Add packages here -->

</struts>

攔截器類:MethodIntercetor

package com.test.interceptor;

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

public class MethodIntercetor extends MethodFilterInterceptor{

	private static final long serialVersionUID = 1L;

	@Override
	protected String doIntercept(ActionInvocation arg0) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}
	
	//需要攔截的
	@Override
	public void setIncludeMethods(String includeMethods) {
		// TODO Auto-generated method stub
		super.setIncludeMethods(includeMethods);
	}
	
	//不需要攔截的
	@Override
	public void setExcludeMethods(String excludeMethods) {
		// TODO Auto-generated method stub
		super.setExcludeMethods(excludeMethods);
	}

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