struts2的拦截器

匿名 (未验证) 提交于 2019-12-03 00:41:02

 

  Struts2框架的底层依赖的是XWork框架,XWork框架是命令模式的实现,提供了Action的管理,Result对象的处理以及最重要的组件“拦截器”(interceptor)。在Struts2接收request到完成响应response的过程中,struts2框架内部对功能上进行了封装,比如上传、数据验证,以及登录功能中对Action属性的赋值,都是拦截器在起作用。拦截器可以将组件进行松耦合开发。

  可以在项目中创建多个拦截器,为了对拦截器有效管理,可以将它们分组,形成拦截器栈,在struts-default.xml 中就有一个名为defaultStack拦截器栈。

  定义拦截器就要继承AbstractInterceptor类重写intercept()方法,进行业务处理,ActionInterceptor的invoke()主要功能就是执行Action中的内容,返回值就是result的逻辑名称。

  接下来举个栗子:

先定义一个action,在struts.xml中声明为printUsername.action,result对应的页面自定义

 1 package com.hyp.controller;  2   3 /**  4  * @author hyp  5  * Project name is LearnStruts  6  * Include in com.hyp.controller  7  * hyp create at 2018/7/14  8  **/  9 public class PrintUsername { 10     private String username; 11     public String execute() 12     { 13         System.out.println("PrintUsername execute()"+username); 14         return "toPrintUsernameJSP"; 15     } 16  17     public String getUsername() { 18         return username; 19     } 20  21     public void setUsername(String username) { 22         this.username = username; 23     } 24 }

 

接下来定义一个interceptor类,继承于AbstractInterceptor,重写intercept方法。

package com.hyp.interceptor;  import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  /**  * @author hyp  * Project name is LearnStruts  * Include in com.hyp.interceptor  * hyp create at 2018/7/14  **/ public class TheInterceptor extends AbstractInterceptor {     @Override     public String intercept(ActionInvocation actionInvocation) throws Exception {         System.out.println("ǰ");         String resultValue=actionInvocation.invoke();         System.out.println("后");         return resultValue;     } }

 

在struts.xml文件中增加

 <package name="testtest" extends="struts-default">         <interceptors>         <interceptor name="theInterceptor" class="com.hyp.interceptor.TheInterceptor"/>         <interceptor-stack name="theInterceptorStack">             <interceptor-ref name="defaultStack"/>             <interceptor-ref name="theInterceptor"/>         </interceptor-stack>     </interceptors>         <action name="printUsername" class="com.hyp.controller.PrintUsername">             <result name="toPrintUsernameJSP">/printUsername.jsp</result>             <interceptor-ref name="theInterceptorStack"/>         </action>      </package>

然后运行程序,在浏览器输入http://localhost:8080/printUsername.action?username=hyp,刷新后会在console中发现

在action执行的前后执行输出,有点像面对切面编程。

 

原文:https://www.cnblogs.com/pingxin/p/p00005.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!