Work hard

[原创]Struts2 拦截器浅析

上一篇 / 下一篇  2008-05-12 00:01:57 / 个人分类:Web Framework

查看( 44 ) / 评论( 0 )
海岸线网络聚合8{TGH ZF s"ye

Struts2的拦截器采用的是AOP的思想,但是有人说拦截器能完成的工作servletfilter也能完成。其实,struts2的拦截器更能显示出软件复用的思想。
u,[8S^ bV-E0struts2的配置文件struts.xml中,每个package都有一个默认的拦截器,在默认的情况下会引用此拦截器。如果我们需要采用自己定义的拦截器时必须先引用默认的拦截器,因为,自己定义的拦截器会覆盖默认的拦截器,如果不引用的话会出现错误,不如下面的代码片断先引用了默认的拦截器:

f"p7u,rG?s0i0           <interceptor-ref name="defaultStack"/>
.ca a P(P4a0           <interceptor-ref name="authority"/>海岸线网络聚合7wK*|K\,Q

u%uRrY0多个拦截器可以组成一个拦截器链,拦截器链的使用就如同一个拦截器一样,这体现了复用的思想。
&M'Cs~.tm+N0如果在某个package中的每个Action都需要调用同一个拦截器,则可以将此拦截器与默认的拦截器组合成一个拦截器链,方便调用,因为使用自己定义的拦截器可以覆盖默认的拦截器。海岸线网络聚合b9um:U-Pp
海岸线网络聚合N&XdR&p1U
下面举一个简单的例子:海岸线网络聚合"{/dL:JryA\,d.k"}
登陆的LoginAction
e,tyi#mpJ0package com.hopeteam.struts.actions;
]-`9GL3jR+DY"P x0海岸线网络聚合!b7p"?MC%[[ B
import com.opensymphony.xwork2.Action;
)c%eb8u(~!Vp0j0import com.opensymphony.xwork2.ActionContext;
sQ-yc&D\0海岸线网络聚合8v:p k M9WR(]%Fl
public class LoginAction implements Action{海岸线网络聚合.VrFf w?O]/i[ ^
    private String username;海岸线网络聚合W-N LH H*s$]4v
    private String password;海岸线网络聚合F!J [zZX
    
A L0K}2jG3@4d1k#p0    public String getUsername() {海岸线网络聚合-\9r3^[*FC`
       return username;海岸线网络聚合#ha}Z&n$w
    }海岸线网络聚合OQS G*gD
    public void setUsername(String username) {海岸线网络聚合y};]1Q%g*l
       this.username = username;海岸线网络聚合t ]2pH.s,c@6|f#pT'A
    }
\n:O c"@{5@'JC6b6i0    public String getPassword() {
.JV,M3MEku@0       return password;海岸线网络聚合&Z_ K c;` fU
    }海岸线网络聚合'z*|G8~"mV!B qa
    public void setPassword(String password) {海岸线网络聚合2\"IV;F%dJ5PL
       this.password = password;
__(@aK.@0    }海岸线网络聚合onl&y Z+B*{j
    海岸线网络聚合2D3y |%PenB
    public String execute() throws Exception
QE7ZV CZ:f0    {海岸线网络聚合6H g R*l6gzPf
       if (getUsername().equals("fengzhizi")海岸线网络聚合Q l@ d*MIl GCDq9Z
              && getPassword().equals("123456"))
%TP/@3U@*[QI(h0       {海岸线网络聚合*o!f.Z?|fe*gu
           ActionContext.getContext().getSession().put("user", getUsername());
zk#J+@]k(S ^v0           return SUCCESS;海岸线网络聚合:PC\r.j
       }海岸线网络聚合b4s2a P3W&eg.p
       else
3n:xqa/lpQ:RQ#n0           return ERROR;
L$v'k'FLMa0    }
(aSB@,[gB4SP0}海岸线网络聚合0mC K%]DI1uiG
海岸线网络聚合3nt*Z$pn.D
权限拦截器海岸线网络聚合Q*J6Y#?,m
package com.hopeteam.struts.Interceptor;海岸线网络聚合T!RN lB4QjNR;j
海岸线网络聚合2{F@ h [H$m b~
import java.util.Map;
E v@A`,_ }0海岸线网络聚合;zC-}8o[J DM
import com.opensymphony.xwork2.Action;海岸线网络聚合i0B6zZ%J)Y+g,[
import com.opensymphony.xwork2.ActionContext;
m8k#PLc:z h(]"FQ0import com.opensymphony.xwork2.ActionInvocation;海岸线网络聚合l3@q&|a2Y
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;海岸线网络聚合I V R6QV e

Nz8t_v0public class AuthorityInterceptor extends AbstractInterceptor{海岸线网络聚合I/V~kS4@j2E S5v a
    public String intercept(ActionInvocation invocation)throws Exception海岸线网络聚合(D"r3j5iN`X
    {海岸线网络聚合0@8Td.i'lXS
       ActionContext ctx = invocation.getInvocationContext();海岸线网络聚合mk|KM
       Map session = ctx.getSession();海岸线网络聚合NU{{1V!G0w8q
      
1Kc"B%o v*o1@0       String user =(String)session.get("user");海岸线网络聚合A/Xz[}9L%d `1h
       if(user!=null && user.equals("fengzhizi"))海岸线网络聚合 IuT4tBke
       {海岸线网络聚合5D7g U:qF+[e
           return invocation.invoke();
/~-HL%vlW$l n0       }海岸线网络聚合H;q-\[&s?D
       ctx.put("tip", "您还没登陆,请输入正确的用户名和密码!");海岸线网络聚合`+IxE+GWA
      
h"n@&ny(j BTy Y0       return Action.LOGIN;海岸线网络聚合;R(S8z&Ceg(^g'M:^7N
    }
C7T[Mar0}海岸线网络聚合h:P9j,U3Q*c6F%}l6V
海岸线网络聚合c z9[ s(J-jw3n

Dvhxow:gp0在struts.xml中的配置:海岸线网络聚合"dWr6@,@Yi
<?xml version="1.0" encoding="UTF-8"?>海岸线网络聚合4\acq(^ s+B:m^X
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
fR1Df&v8H0"http://struts.apache.org/dtds/struts-2.0.dtd">
1LvJ'K0i[0
&G ?b+fh&S1{0<struts>海岸线网络聚合"Nh1M-{;Cb;uH
    <package name="fengzhizi" extends="struts-default">海岸线网络聚合ZT9s~3P hdiI"T
       <interceptors>海岸线网络聚合OXk V z
           <interceptor name="authority" class="com.hopeteam.struts.Interceptor.AuthorityInterceptor"/>海岸线网络聚合4r(_fa v:JJ__J
       </interceptors>海岸线网络聚合 L7mhG PN0^ Y%u
      
;\}/L|!bUg0       <global-results>
PEI ] r:B0            <result name="login">/login.jsp</result>
8eyIb.Wi1t0       </global-results>海岸线网络聚合;U@} s6csM?$D+{
      
o5ruDu:?"R0       <action name="Login"
T(}pe#R"k0           class="com.hopeteam.struts.actions.LoginAction">海岸线网络聚合AO'E!a BdZ^
           <result name="error">/error.jsp</result>海岸线网络聚合R[ m;[.L
           <result name="success">/welcome.jsp</result>海岸线网络聚合 T?I(n(g`Y

!l%h8ieT9s,Ol0       </action>海岸线网络聚合g ^-n5m]2Fm
       <action name="interceptorAction">
n1WNdRr&U.T8i/{0海岸线网络聚合^0f.P;ey;EQS
            <result>/WEB-INF/jsp/test.jsp</result>海岸线网络聚合.i4`X;T_D/c:t
           <!-- 拦截器一般配置在result元素之后! -->海岸线网络聚合9wX8j!C]([dI u4[ XA
           <interceptor-ref name="defaultStack"/>
OwFm#IR!jB0           <interceptor-ref name="authority"/>海岸线网络聚合BO/@e-pkPYQ};S
        </action>
k+OKO6|&C ~ ZXw0    </package>
0y Q9sov+sq(a0</struts>
+[5nT#v$@8v7Ws Tn9n0海岸线网络聚合9gX G7}@:W6y`v*f
来看一下运行的效果图,这是没登陆之前,想访问“测试Struts2拦截器”海岸线网络聚合"S3V~k^s S

xi%bR w/I|z&[0海岸线网络聚合I0J$u"u"l ~:Tg

f+d$m~;|e5Z0这是登陆以后的界面海岸线网络聚合 z%jL4?i$xp Ze$R j
海岸线网络聚合va+Mi/r)B.X$G

海岸线网络聚合3Ok [5AF

这是访问“测试Struts2拦截器”的界面
S2T B*h{~0海岸线网络聚合gN{&k5\1dG{ @ F*u


TAG: 原创 拦截器 浅析

我来说两句

(可选)

日历

« 2009-07-04  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 1285
  • 日志数: 23
  • 建立时间: 2007-05-21
  • 更新时间: 2008-05-18

RSS订阅

Open Toolbar