拦截器是Struts2的基础,什么是拦截器呢?(二)

package tutorial;

import com.opensymphony.xwork2.ActionSupport;

public class AuthorizatedAccess extends ActionSupport implements RoleAware  {
   
private String role;
   
   
public void setRole(String role)  {
       
this .role = role;
   }

   
   
public String getRole()  {
       
return role;
   }


   @Override
   
public String execute()  {
       
return SUCCESS;
   }

}

以下是ShowUser.jsp的代码:

<% @ page  contentType = " text/html; charset=UTF-8 " %>
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
   
< title > Authorizated User </ title >
</ head >
< body >
   
< h1 > Your role is: < s:property value ="role" /></ h1 >
</ body >
</ html >

然后,创建tutorial.Roles初始化角色列表,代码如下:

package tutorial;

import java.util.Hashtable;
import java.util.Map;


public class Roles  {
   
public Map < String, String > getRoles() 
{
       Map
< String, String > roles = new Hashtable < String, String > ( 2
);
       roles.put(
" EMPLOYEE " , " Employee "
);
       roles.put(
" MANAGER " , " Manager "
);
       
return
roles;
   }

}

接下来,新建Login.jsp实例化tutorial.Roles,并将其roles属性赋予<s:radio>标志,代码如下:

<% @ page  contentType = " text/html; charset=UTF-8 " %>
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
   
< title > Login </ title >
</ head >
< body >
   
< h1 > Login </ h1 >
    Please select a role below:
   
< s:bean id ="roles" name ="tutorial.Roles" />
   
< s:form action ="Login" >
       
< s:radio list ="#roles.roles" value ="'EMPLOYEE'" name ="role" label ="Role" />
       
< s:submit />
   
</ s:form >
</ body >
</ html >

创建Action类tutorial.Login将role放到session中,并转到Action类tutorial.AuthorizatedAccess,代码如下:

package tutorial;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport implements SessionAware  {
   
private
String role;    
   
private
Map session;

   
public String getRole() 
{
       
return
role;
   }


   
public void setRole(String role)  {
       
this .role =
role;
   }

   
   
public void setSession(Map session)  {
       
this .session =
session;
   }


   @Override
   
public String execute()  {
       session.put(
" ROLE "
, role);
       
return
SUCCESS;
   }
   
}

最后,配置struts.xml文件,内容如下:

<! DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"
>
< struts >
   
< include file ="struts-default.xml" />    
   
<
package name ="InterceptorDemo" extends ="struts-default" >
       
< interceptors >
           
< interceptor name ="auth" class ="tutorial.AuthorizationInterceptor" />
       
</ interceptors >
       
< action name ="Timer" class ="tutorial.TimerInterceptorAction" >
           
< interceptor-ref name ="timer" />
           
< result > /Timer.jsp </ result >
       
</ action >
       
< action name ="Login" class ="tutorial.Login" >
           
< result type ="chain" > AuthorizatedAccess </ result >
       
</ action >
       
< action name ="AuthorizatedAccess" class ="tutorial.AuthorizatedAccess" >
           
< interceptor-ref name ="auth" />
           
< result name ="login" > /Login.jsp </ result >
           
< result name ="success" > /ShowRole.jsp </ result >
       
</ action >
   
</ package >
</ struts >

发布运行应用程序,在浏览器地址栏中输入:http://localhost:8080/Struts2_Interceptor/AuthorizatedAccess.action。由于此时,session还没有键为“ROLE”的值,所以返回Login.jsp页面,如图2所示:

 
图2 Login.jsp

选中Employee,点击Submit,出现图3所示页面:

 
图3 ShowRole.jsp

总结

拦截器是Struts 2比较重要的一个功能。通过正确地使用拦截器,我们可以编写高可复用的代码

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值