您好,登錄后才能下訂單哦!
Struts2的核心功能是action,對于開發(fā)人員來說,使用Struts2主要就是編寫action,action類通常都要實現(xiàn)com.opensymphony.xwork2.Action接口,并實現(xiàn)該接口中的execute()方法。
該方法如下:
public String execute() throws Exception
Struts2并不是要求所有編寫的action類都要實現(xiàn)Action接口,也可以直接編寫一個普通的Java類作為action,只要實現(xiàn)一個返回類型為String的無參的public方法即可:
public String xxx()
步入正文:
建立一個攔截器對象,當(dāng)有客戶端的請求要訪問action對象的時候?qū)|發(fā)當(dāng)前的攔截器對象,來對當(dāng)前的請求數(shù)據(jù)進(jìn)行過濾操作。
建立一個登錄界面用于進(jìn)行用戶名和密碼的輸入操作,當(dāng)?shù)卿浗缑娈?dāng)中的表單對象當(dāng)中的數(shù)據(jù)提交到action類對象之前,會被攔截器對象進(jìn)行攔截操作,攔截器對象會從session對象當(dāng)中進(jìn)行注冊信息的獲取操作,通過注冊信息registerMessage是否為空來判斷當(dāng)前用戶是否有權(quán)限對action類對象進(jìn)行訪問操作,如果registerMessage為null,則當(dāng)前用戶必須要先進(jìn)行用戶信息的注冊操作,在注冊頁面當(dāng)中將registerMessage屬性變量添加到session對象當(dāng)中去然后才能夠去進(jìn)行登錄操作,訪問action對象。
建立一個攔截器對象用于實現(xiàn)對所有訪問action對象的請求數(shù)據(jù)進(jìn)行攔截操作。
1:建立一個攔截器對象MyInterceptor該對象繼承了抽象攔截器對象類。
2:在建立了攔截器對象之后要想進(jìn)行使用首先要對該攔截器對象進(jìn)行注冊操作,具體的方式
是在struts.xml當(dāng)中使用interceptors標(biāo)簽來實現(xiàn)攔截器的注冊操作
<interceptors> <interceptor name="MyInterceptor" class="com.interceptots.MyInterceptor"/> </interceptors>
3:要將當(dāng)前所注冊的攔截器對象與指定的action類進(jìn)行綁定操作,所以用interceptor
標(biāo)簽對象來將其所在的action類與指定的攔截器對象進(jìn)行綁定操作.
<interceptor-ref name="MyInterceptor"/>
4:注意如果只綁定指定的攔截器對象就會對struts-default.xml對象當(dāng)中所默認(rèn)的攔截
器對象進(jìn)行覆蓋操作,在默認(rèn)的對象當(dāng)中所綁定的是一個攔截器棧,該棧當(dāng)中有二十多個攔截器對
象,所以必須要對原來struts-default.xml文件當(dāng)中的攔截器進(jìn)行重新綁定操作.
在自定義的攔截器對象當(dāng)中實現(xiàn)對action對象進(jìn)行權(quán)限攔截操作:
用戶要想實現(xiàn)登錄來訪問action對象,必須要先注冊一個registerMessage信息到session對象當(dāng)中才行,否則在請求訪問
action對象的時候,將會被攔截器對象進(jìn)行攔截操作,發(fā)現(xiàn)當(dāng)前的session會話當(dāng)中所獲取到的注冊信息為空時,將會返回到注冊失
敗的頁面當(dāng)中去.
登錄界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="SystemAction"> <s:textfield name="username" label="用戶名"/><br> <s:textfield name="password" label="密碼"/><br> <a href="register.jsp" rel="external nofollow" rel="external nofollow" >進(jìn)行用戶的注冊</a><br> <a href="destroy.jsp" rel="external nofollow" rel="external nofollow" >進(jìn)行用戶的注銷</a><br> 當(dāng)前用戶名:${sessionScope.registerMessage } <br> <input type="submit" value="提交"> </form> </body> </html>
注冊界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注冊頁面</title> </head> <body> <% session.setAttribute("registerMessage","qingzhiyu"); if(session.getAttribute("registerMessage")!=null) { %> <h4>注冊成功</h4> <% } %> <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >進(jìn)行登錄</a> ${sessionScope.registerMessage } </body> </html>
action類實例對象:
package com.action; /** * * @author Administrator * */ public class SystemAction { private String username; private String password; /** * @return the username */ public String getUsername() { return username; } /** * @param username the username to set */ public void setUsername(String username) { this.username = username; } /** * @return the password */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } public String execute() { System.out.println("已經(jīng)進(jìn)入到了系統(tǒng)action類當(dāng)中"); return "success"; } }
攔截器對象:
package com.interceptots; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; /** * * @author Administrator *自定義一個攔截器對象,該攔截器對象實現(xiàn)抽象類AbstractInterceptor攔截器對象 */ public class MyInterceptor extends AbstractInterceptor{ /* (non-Javadoc) * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation) *對抽象類當(dāng)中的方法進(jìn)行重寫操作。invocation(請求,調(diào)用) */ @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("執(zhí)行攔截方法"); //從session會話對象當(dāng)中進(jìn)行注冊信息的獲取操作 String registerMessage=(String) ActionContext.getContext().getSession().get("registerMessage"); /*Map session=(Map)invocation.getInvocationContext().getSession(); String registerMessage=(String) session.get("registerMessage");*/ System.out.println("registerMessage="+registerMessage); if(registerMessage!=null) { //表明本次會話當(dāng)中用戶已經(jīng)進(jìn)行了信息的注冊,所以擁有訪問action類對象的權(quán)限,所以使用調(diào)度對象來調(diào)用action //對象當(dāng)中所指定的方法來實現(xiàn)業(yè)務(wù)的控制操作 /*類似于過濾器鏈對象當(dāng)中的chain方法實現(xiàn)過濾權(quán)限的轉(zhuǎn)交操作*/ String result=invocation.invoke(); System.out.println("invocation當(dāng)中的返回值為:"+result); return result; } else {//表明當(dāng)前請求訪問action對象的用戶并沒有進(jìn)行信息的注冊所以不具有訪問action對象的權(quán)限,所以返回失敗頁面 return "fail"; } } }
攔截器對象要想使用,必須要在配置文件當(dāng)中進(jìn)行配置操作之后才會起作用
struts.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="default-package" namespace="/" extends="struts-default"> <!--使用interceptors標(biāo)簽對象來進(jìn)行一個攔截器對象的注冊操作--> <interceptors> <interceptor name="MyInterceptor" class="com.interceptots.MyInterceptor"/> </interceptors> <action name="SystemAction" class="com.action.SystemAction"> <result name="success">/success.jsp</result> <result name="input">/login.jsp</result> <result name="fail">/fail.jsp</result> <interceptor-ref name="MyInterceptor"/> <!--對原有的默認(rèn)攔截器對象進(jìn)行綁定操作--> <interceptor-ref name="defaultStack"/> </action> </package> </struts>
登錄成功界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>登錄成功</h3> 用戶名:${username } <br> 密碼: ${password } <br> <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >返回登錄首頁</a> <a href="destroy.jsp" rel="external nofollow" rel="external nofollow" >注銷登錄</a> </body> </html>
登錄失敗界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>權(quán)限登錄失敗界面</title> </head> <body> 您沒有進(jìn)行信息的注冊,所以無權(quán)進(jìn)行action對象的訪問操作 <a href="register.jsp" rel="external nofollow" rel="external nofollow" >進(jìn)行用戶注冊</a> <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >返回登錄界面</a> </body> </html>
進(jìn)行當(dāng)前用戶信息的注銷界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>進(jìn)行用戶信息的注銷操作</title> </head> <body> <% session.removeAttribute("registerMessage"); String registerMessage=(String)session.getAttribute("registerMessage"); if(registerMessage==null) { %> 用戶信息注銷成功 <% } %> <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >login</a> </body> </html>
程序的運行結(jié)果:
登錄界面
注冊界面
登錄成功界面:
如果沒有進(jìn)行用戶注冊直接進(jìn)行登錄操作
總結(jié)
以上所述是小編給大家介紹的Struts2實現(xiàn)對action請求對象的攔截操作方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。