Work hard
[原创]Struts2 拦截器浅析
上一篇 /
下一篇 2008-05-12 00:01:57
/ 个人分类:Web Framework
查看( 44 ) /
评论( 0 )
海岸线网络聚合8{TGHZF
s"yeStruts2的拦截器采用的是AOP的思想,但是有人说拦截器能完成的工作servlet的filter也能完成。其实,struts2的拦截器更能显示出软件复用的思想。
u,[8S^bV-E0在struts2的配置文件struts.xml中,每个package都有一个默认的拦截器,在默认的情况下会引用此拦截器。如果我们需要采用自己定义的拦截器时必须先引用默认的拦截器,因为,自己定义的拦截器会覆盖默认的拦截器,如果不引用的话会出现错误,不如下面的代码片断先引用了默认的拦截器:
f"p7u,rG? s0i0 <interceptor-ref name="defaultStack"/>
.caaP(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"Px0海岸线网络聚合!b7p"?MC%[[
B
import com.opensymphony.xwork2.Action;
)c%eb8u(~!Vp0j0import com.opensymphony.xwork2.ActionContext;
sQ-yc&D\0海岸线网络聚合8v:pkM9WR(]%Fl
public class LoginAction implements Action{海岸线网络聚合.VrF f w ?O]/i[^
private String username;海岸线网络聚合W-NLH H*s$]4v
private String password;海岸线网络聚合F!J [zZX
AL0K}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@'J C6b6i0 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%dJ5P L
this.password = password;
_ _(@aK.@0 }海岸线网络聚合onl&yZ+B*{j
海岸线网络聚合2D3y
|%PenB
public String execute() throws Exception
QE7ZVCZ:f0 {海岸线网络聚合6H
gR*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
}海岸线网络聚合b4s2aP3W&eg.p
else
3n:xqa/lpQ:RQ#n0 return ERROR;
L$v'k'FLMa0 }
(aSB@,[gB4SP0}海岸线网络聚合0mCK%]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;
Ev@ A`,_ }0海岸线网络聚合;zC-}8o[J
D M
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;海岸线网络聚合IV
R6QV e
Nz8t_v0public class AuthorityInterceptor extends AbstractInterceptor{海岸线网络聚合I/V~k S4@j2ES5va
public String intercept(ActionInvocation invocation)throws Exception海岸线网络聚合(D"r3j5iN`X
{海岸线网络聚合0@8Td.i'l XS
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
{海岸线网络聚合5D7gU:qF+[e
return invocation.invoke();
/~-HL%vlW$l
n0 }海岸线网络聚合H;q-\[&s?D
ctx.put("tip", "您还没登陆,请输入正确的用户名和密码!");海岸线网络聚合`+IxE+GWA
h"n@&ny(j BTyY0 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
Vz
<interceptor name="authority" class="com.hopeteam.struts.Interceptor.AuthorityInterceptor"/>海岸线网络聚合4r(_fav:JJ__J
</interceptors>海岸线网络聚合L7mhGPN0^Y%u
;\}/L|!bUg0 <global-results>
PEI]
r:B0 <result name="login">/login.jsp</result>
8eyIb.Wi1t0 </global-results>海岸线网络聚合;U@}
s6csM?$D+{
o5r uDu:?"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]([dIu4[
XA
<interceptor-ref name="defaultStack"/>
OwFm#IR!j B0 <interceptor-ref name="authority"/>海岸线网络聚合BO/@e-pkPYQ};S
</action>
k+OKO6|&C ~ZXw0 </package>
0y Q9sov+sq(a0</struts>
+[5nT#v$@8v7Ws Tn9n0海岸线网络聚合9gXG7} @:W6y`v*f
来看一下运行的效果图,这是没登陆之前,想访问“测试Struts2拦截器”海岸线网络聚合"S3V~k^sS
xi%bRw/I|z&[0
海岸线网络聚合I0J$u"u"l
~:Tg
f+d$m~;|e5Z0这是登陆以后的界面海岸线网络聚合 z%jL4?i$xpZe$Rj
海岸线网络聚合va+Mi/r)B.X$G
海岸线网络聚合3Ok
[5AF这是访问“测试Struts2拦截器”的界面
S2TB*h{~0
海岸线网络聚合gN{&k5\1dG{
@F*u
论坛模式
推荐
收藏
分享给好友
推荐到圈子
管理
TAG:
原创
拦截器
浅析