Struts2 拦截器(interceptor) 与 模型驱动3中传值方式 一.属性驱动 } 二.对象驱动 三.模型驱动 }
1:拦截器 (理解为 符合拦截的要求 就可以 继续访问执行对应的Action 不符合我的要求就会做出对应的处理。)
拦截器和Action完全松耦合。
Struts2的默认使用拦截器有18个
实现步骤:
1 编写一个普通的java类 实现 Intercepter接口
public class lJqAction implements Interceptor { @Override public void destroy() { } @Override public void init() { } @Override public String intercept(ActionInvocation invocation) throws Exception { String username = ServletActionContext.getRequest().getParameter("username"); if(username.equalsIgnoreCase("admin")){ return invocation.invoke(); //如果正确就会直接通过 invocation.invoke继续执行需要访问的Action类 }else { ActionContext.getContext().getValueStack().push("不好意思你输入的有错误"); //错误就会直接通过返回的值 对应配置的结果集跳入对应的页面 return "error"; } } }
action类
public class OGNLDemo extends ActionSupport { public String testOgnl(){ ActionContext.getContext().getValueStack().push("正确访问"); return "success"; } }
2在struts.xml文件配置自定义拦截器栈
片段代码
<interceptors> <interceptor name="privilege1" class="com.ognl.lJqAction"></interceptor> <interceptor-stack name="p"> <interceptor-ref name="privilege1"></interceptor-ref><!--自定义的--> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="p"></default-interceptor-ref>
完整代码
<package>
<interceptors> <interceptor name="privilege1" class="com.ognl.lJqAction"></interceptor> <interceptor-stack name="p"> <interceptor-ref name="privilege1"></interceptor-ref><!--自定义的--> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="p"></default-interceptor-ref> <action name="ognlTest" class="com.ognl.OGNLDemo" method="testOgnl"> <result name="error" >/index.jsp</result> <result name="success" >/success.jsp</result> </action> </package>
模型驱动