struts拦截器

1.拦截器工作流程

2.系统预定义拦截器

拦截器

名字

说明

Scoped Model Driven

scoped-model-driven

如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

Parameters Interceptor

params

将请求中的参数设置到Action中去。

Prepare Interceptor

prepare

如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor

scope

将Action状态存入session和application的简单方法。

Servlet Config Interceptor

servletConfig

提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

Static Parameters Interceptor

staticParams

从struts.xml文件中将中的中的内容设置到对应的Action中。

Roles Interceptor

roles

确定用户是否具有JAAS指定的Role,否则不予执行。

Timer Interceptor

timer

输出Action执行的时间

Token Interceptor

token

通过Token来避免双击

Token Session Interceptor

tokenSession

和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

Validation Interceptor

validation

使用action-validation.xml文件中定义的内容校验提交的数据。

Workflow Interceptor

workflow

调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor

N/A

从参数列表中删除不必要的参数

Profiling Interceptor

profiling

通过参数激活profile

 

拦截器

名字

说明

Scoped Model Driven

scoped-model-driven

如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

Parameters Interceptor

params

将请求中的参数设置到Action中去。

Prepare Interceptor

prepare

如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor

scope

将Action状态存入session和application的简单方法。

Servlet Config Interceptor

servletConfig

提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

Static Parameters Interceptor

staticParams

从struts.xml文件中将中的中的内容设置到对应的Action中。

Roles Interceptor

roles

确定用户是否具有JAAS指定的Role,否则不予执行。

Timer Interceptor

timer

输出Action执行的时间

Token Interceptor

token

通过Token来避免双击

Token Session Interceptor

tokenSession

和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

Validation Interceptor

validation

使用action-validation.xml文件中定义的内容校验提交的数据。

Workflow Interceptor

workflow

调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor

N/A

从参数列表中删除不必要的参数

Profiling Interceptor

profiling

通过参数激活profile

3.struts.xml里继承的struts-default.xml

拦截器和拦截器栈

<interceptor name="noop" class="org.apache.struts2.interceptor.NoOpInterceptor" />

<interceptor-stack name="emptyStack">

<interceptor-ref name="noop"/>

</interceptor-stack>

排除拦截的方法

<interceptor-ref name="validation">

<param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref>

默认的拦截器栈

<default-interceptor-ref name="defaultStack"/>

<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />

4.自定义拦截器

(1)登录拦截器

public class LoginInterceptor extends AbstractInterceptor{

 

@Override

public String intercept(ActionInvocation inv) throws Exception {

Object login = ActionContext.getContext().getSession().get("login");

String result = "";

if (login!=null) {

result = inv.invoke();

}else{

result = "login";

}

return result;

}

 

}

(2)配置struts.xml

<interceptors>

<interceptor name="login" class="net.study.interceptor.LoginInterceptor"

</interceptor>

<interceptor-stack name="mystack">

<interceptor-ref name="logger"></interceptor-ref>

<interceptor-ref name="login"></interceptor-ref>

<interceptor-ref name="timer"></interceptor-ref>

<interceptor-ref name="defaultStack"></interceptor-ref>

</interceptor-stack>

</interceptors>

<default-interceptor-ref name="mystack"></default-interceptor-ref>

<global-results>

<result name="login">/login.jsp</result>

</global-results>

(3)测试login

@Actions({

@Action(value="/login",results={

@Result(name="success",location="/hello.jsp"),

},interceptorRefs={

@InterceptorRef("defaultStack")

}

)

})

public String login() throws Exception

{

if("zhangsan".equals(username)&& "123".equals(passwd)){

ActionContext.getContext().getSession().put("login", "OK");

}

else{

return "login";

}

return "success";

}

(4)login.jsp页面

<body>

<form action="../hello/login" method="post">

yonghuming: <input type="text" name="username">

mima: <input type="password" name="passwd">

<input type="submit" value="tijiao">

</form>

</body>

5.方法拦截器

(1)创建方法拦截器

public class MyMethodInterception extends MethodFilterInterceptor{

 

@Override

protected String doIntercept(ActionInvocation arg0) throws Exception {

System.out.println("拦截" + arg0.getProxy().getMethod());

return arg0.invoke();

}

 

}

(2)配置struts.xml

<interceptors>

<interceptor name="login" class="net.study.interceptor.LoginInterceptor"></interceptor>

<interceptor name="myMethod" class="net.study.interceptor.MyMethodInterception">

</interceptor>

<interceptor-stack name="mystack">

<interceptor-ref name="logger"></interceptor-ref>

<!-- <interceptor-ref name="login"></interceptor-ref> -->

<interceptor-ref name="timer"></interceptor-ref>

<interceptor-ref name="myMethod">

<!-- 排除方法 -->

<param name="excludeMethods">login</param>

</interceptor-ref>

<interceptor-ref name="defaultStack"></interceptor-ref>

</interceptor-stack>

</interceptors>

<default-interceptor-ref name="mystack"></default-interceptor-ref>

<global-results>

<result name="login">/login.jsp</result>

</global-results>

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值