- 浏览: 310237 次
最新评论
-
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
hunanjun000:
《研磨struts2》第四章 Action 之 4.5 Action的其它重要知识
12.6 加入拦截器
12.6.1 回顾拦截器
拦截器是Struts2的核心概念,可以在Action运行之前或Result运行之后执行一些共通的任务。
虽然学过了,但是还从来没有使用过,接下来,我们就来为这个示例添加一个自定义的拦截器,实现如下的功能:可以打印出所调用的Action,调用Action的哪个方法,所有的request参数,以及最后要跳转到哪个页面。这样有利于调试,不需要对Action或JSP的代码有任何变化,就可以在控制台里清楚的看到整个提交的细节。
还是首先回忆一下拦截器的相关知识:
- 编写自定义拦截器要实现Interceptor接口,在其中的intercept方法里,调用了invocation.invoke()方法则继续向内层调用。可以在invocation.invoke()方法之前或者之后做一些事情。
- 拦截器的声明和拦截器栈的组织引用。
- Action引用拦截器有两种方式:
l <action>元素可以指定<interceptor-ref>子元素,这意味着这个Action自己声明了引用哪些拦截器,与其他Action无关。
l <package>元素可以指定<default-interceptor-ref>子元素,这意味着这个包内的所有Action都要引用这些拦截器。当然,这个包内的Action可以通过为自己的<action>元素指定<interceptor-ref>子元素,来覆盖包中的定义。
- Action引用了哪些拦截其的查找顺序:
l 先看自己的<action>元素有没有<interceptor-ref>子元素。
l 再看自己所在的<package>元素有没有<default-interceptor-ref>子元素。
l 还要看父包的<package>元素有没有<default-interceptor-ref>子元素。而且,这个过程是递归的,父包看完还要看祖包,等等。
回顾了基础知识后,就来看看,我们要为示例加入拦截器的功能,究竟要做些什么事情:
- 实现一个自定义拦截器的类
l 在Action运行之前打印到底调用哪个Action。
l 在Action运行之前打印调用这个Action的哪个方法。
l 在Action运行之前打印request中的所有参数。
l 在Result运行之后打印到底跳转到哪个Result。
- 在struts.xml中定义这个拦截器
- 在struts.xml中定义一个拦截器栈,包括自定义拦截器和默认引用的defaultStack。
- 由于这个包内的所有Action都要引用自定义拦截器,所以在这个包的<package>元素下添加<default-interceptor-ref>子元素来引用刚刚定义的拦截器栈。
12.6.2 编写自定义拦截器
看到上面描述的自定义拦截器要完成的功能,估计很多朋友都会说,实现这些功能的拦截器在6.4.1里面已经实现过了,没错,这里就是直接使用前面讲述过的那个拦截器。
为了大家阅读起来方便,还是把代码在这里示例一下,就不过多去讲述了。示例代码如下:
- public class LoggerInterceptor implements Interceptor{
- public void destroy() { }
- public void init() { }
- public String intercept(ActionInvocation invocation) throws Exception {
- System.out.println("-------------------------------");
- //找到运行的Action对象,并打印其类名
- System.out.println("Action:"+invocation.getAction().getClass().getName());
- //找到运行的ActionProxy对象,并打印其要运行的方法名
- System.out.println("Method:"+invocation.getProxy().getMethod());
- //找到这次请求的request中的parameter参数,并打印
- Map<String, Object> params = invocation.getInvocationContext().getParameters();
- for (String key:params.keySet()){
- Object obj = params.get(key);
- if(obj instanceof String[]){
- String[] arr = (String[]) obj;
- System.out.println("Param:"+key);
- for (String value:arr){
- System.out.println(value);
- }
- }
- }
- //运行拦截器所包含的内容
- String resultCode = invocation.invoke();
- //在Action和Result运行之后,得到Result对象
- //并在可以强制转换成ServletDispatcherResult时,打印其下一个JSP的位置
- Result rresult = invocation.getResult();
- if (rresult instanceof ServletDispatcherResult){
- ServletDispatcherResult result = (ServletDispatcherResult) rresult;
- System.out.println("JSP:"+result.getLastFinalLocation());
- }
- System.out.println("-------------------------------");
- return resultCode;
- }
- }
如果有什么不太清楚的,可以回去看看,这里就不赘述了。
12.6.3 配置自定义拦截器
在配置自定义拦截器中,需要做以下的事情:
- 定义这个自定义拦截器。
- 定义一个拦截器栈,包括自定义拦截器和默认引用的defaultStack。
- 由于这个包内的所有Action都要引用自定义拦截器,所以在这个包的<package>元素下添加<default-interceptor-ref>子元素来引用刚刚定义的拦截器栈。
因此,struts.xml中的<package>元素要变成如下配置:
- <package name="crud1" namespace="/crud1" extends="struts-default">
- <interceptors>
- <!-- 定义这个自定义拦截器-->
- <interceptor name="mylogger"
- class="cn.javass.framework.web.interceptor.LoggerInterceptor"/>
- <!-- 定义一个拦截器栈,包括自定义拦截器和默认引用的defaultStack -->
- <interceptor-stack name="myStack">
- <interceptor-ref name="mylogger"/>
- <interceptor-ref name="defaultStack"/>
- </interceptor-stack>
- </interceptors>
- <!-- 为包添加默认拦截器引用,引用刚刚建立的拦截器栈 -->
- <default-interceptor-ref name="myStack"/>
- <action name="userToList" class="cn.javass.crud1.action.UserAction" method="toList">
- <result name="toList">/jsp/list.jsp</result>
- </action>
- <action name="userToAdd" class="cn.javass.crud1.action.UserAction" method="toAdd">
- <result name="toAdd">/jsp/add.jsp</result>
- </action>
- <!-- 其他action -->
- </package>
12.6.4 使用自定义拦截器的效果
在运行之前,先来思考几个小问题:
- UserAction改变了吗?
- 各个JSP改变了吗?
- struts.xml中<action>元素的配置改变了吗?
当然,答案是都没有改变。所以,加上和去掉这个拦截器,对程序的主体代码不产生影响。
以添加页面提交为例,提交后,控制台打印出:
这样,由哪个Action响应,调用哪个方法,request中的所有参数,最后跳转到哪个JSP完全一目了然,如果出错了,不需要一点一点去打印、测试,直接在控制台就能看到绝大多数细节。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4114.html】
欢迎访问http://sishuok.com获取更多内容
发表评论
-
研磨struts2 目录贴
2012-08-24 12:12 163531.1 《研磨struts2》 第一章 Struts2 ... -
跟着cc学设计 之 研磨设计模式 视频教程 出炉了
2012-08-15 07:16 2研磨设计模式——跟着CC学设计系列精品课程,上线了! ... -
研磨struts2 目录
2012-07-30 21:15 2471.1 《研磨struts2》 第一章 Strut ... -
研磨struts2 目录
2012-07-30 16:54 361.1 《研磨struts2》 第一章 Stru ... -
《研磨struts2》A.2 struts.properties的配置 之 A.2.1 概述
2012-07-09 12:10 3071A.2.1 概述 如果我们希望覆盖在 ... -
《研磨struts2》附录A Struts2的配置 之 A.1 struts.xml的配置
2012-07-09 12:10 2719A.1 struts.xml的配置 A.1.1 ... -
《研磨struts2》第二十一章 零配置 之 21.3 通过注解来实现零配置
2012-07-06 08:07 293021.3 通过注解来实现零配置 21.3.1 ... -
《研磨struts2》第二十一章 零配置 之 21.2 约定大于配置
2012-07-05 10:44 247421.2 约定大于配置 21.2.1 约定 ... -
《研磨struts2》第二十一章 零配置 之 21.1 概述
2012-07-05 10:44 232621.1 概述 21.1.1 零配置概述 在 ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh
2012-07-04 08:15 2089在Struts2中使用SiteMesh ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.2 单独使用SiteMesh
2012-07-03 08:00 210520.2 单独使用SiteMesh 20. ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.1 调整应用的风格
2012-07-03 07:59 187020.1 调整应用的风 ... -
《研磨struts2》19.2 使用execAndWait拦截器模拟进度条 之 19.2.1 模拟长时间运行的Action
2012-07-02 12:24 215019.2.1模拟长时间运行的Action ... -
《研磨struts2》第十九章 进度条 之 19.1 使用“进度条”告知用户进度
2012-07-02 12:23 215219.1 使用“进度条”告知用户进度 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.3 Struts2结合JFreeChart
2012-06-28 12:12 201518.3 Struts2结合JFreeChart ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.2 Struts2插件概述
2012-06-28 12:11 2031Struts2并没有求大求全,企图把所有 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
2012-06-20 15:48 229618.1 JFreeChart使用 18.1.1概 ... -
研磨struts2(1-10章)电子书下载
2012-06-19 07:30 6078研磨struts2的博客文章 私塾在线学习网 《研 ... -
《研磨struts2》第十七章 防止重复提交 之 17.3 更强大的tokenSession拦截器
2012-06-18 13:46 208217.3 更强大的tokenSession拦截器 ... -
《研磨struts2》第十七章 防止重复提交 之 17.2 使用标签
2012-06-18 13:45 234017.2 使用<s:token/>标签 ...
相关推荐
本文将详细解析Struts2中的拦截器(Interceptor)、CRUD操作以及Action的执行流程。 首先,让我们聚焦于Struts2的拦截器机制。拦截器是Struts2的核心组件,它们在Action执行前后运行,提供了AOP(面向切面编程)的...
通过分析和运行这个项目,开发者可以深入理解Struts2的拦截器、结果类型、Action和Value Stack的概念,同时也能掌握Hibernate的实体管理、事务控制和查询API。这有助于提升对Java Web开发的理解,尤其是对于那些刚...
3. **Interceptor(拦截器)**:拦截器是Struts2的一大特色,它允许我们在Action执行前后添加额外的功能,如日志、权限检查等。常见的拦截器有Params(处理请求参数)、Validation(表单验证)和Stack(默认拦截器栈...
Struts2 CRUD是一个基于Apache Struts2框架实现的创建、读取、更新和删除(Create, Read, Update, Delete)操作的示例项目。这个项目主要用于演示如何在Web应用程序中使用Struts2来处理基本的数据操作。Struts2是...
Struts2是Java Web开发中一个非常流行的MVC框架,它极大地简化了Web应用程序的构建,特别是对于实现CRUD(创建、读取、更新、删除)操作。在本篇文章中,我们将深入探讨如何使用Java Struts2框架来完成这些基本的...
### Struts 2中实现CRUD操作详解 #### 一、引言 CRUD操作是软件开发中最常见的数据处理方式之一,它代表了对数据进行的四种...希望本文能帮助读者更好地理解Struts 2中的CRUD操作实现方法,并能在实际项目中灵活运用。
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的不同层面上发挥着重要作用。Struts2作为MVC(Model-View-Controller)框架,负责处理请求和展示视图;Spring则是一个全面的后端解决...
【Spring4-Struts2-Hibernate4 CRUD Demo_3】是一个综合性的开发示例,它展示了如何在Java Web应用程序中整合三大主流框架:Spring 4、Struts 2和Hibernate 4来实现CRUD(创建、读取、更新、删除)操作。这个Demo...
2. **strutsCRUD**:这是一个目录,可能包含了项目的源代码、配置文件(如struts-config.xml)、JSP页面和其他相关资源。在这个目录下,你可能会找到Action类、ActionForm类、JSP文件以及配置文件。 在strutsCRUD...
以及拦截器的功能实现源码"是一个典型的业务操作示例,它展示了如何利用Struts2框架处理基本的CRUD(创建、读取、更新、删除)操作,并且涵盖了Struts2拦截器的使用。接下来,我们将详细探讨这两个核心概念。 首先...
Struts2是一个开源的Java Web框架,它简化了MVC模式的实现,提供了丰富的特性如动作映射、结果类型、拦截器等,使开发者能够更高效地构建Web应用。在这个CRUD项目中,Struts2将作为Controller层的核心,连接Model和...
5. **Interceptor拦截器**:拦截器是Struts2的核心特性之一,它们可以在Action方法执行前后插入额外的逻辑,如数据校验、事务管理、权限控制等。在CRUD操作中,拦截器可以用来确保数据完整性和安全性。 6. **结果...
3. **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它们按照预定义的顺序在Action调用前后执行,可以实现事务管理、权限验证等功能。 4. **Result类型**:Action执行后,会返回一个Result,决定如何...
Struts2 CRUD-2 是一个基于Struts2框架实现的简单数据操作示例,主要涵盖了创建(Create)、读取(Read)、更新(Update)和删除(Delete)这四个数据库操作的基本功能。Struts2是一个非常流行的Java Web开发框架,...
【Spring4-Struts2-Hibernate4 CRUD Demo_5】是一个综合性的开发示例,它展示了如何在Java Web应用程序中整合三大主流框架:Spring 4、Struts2和Hibernate4,进行基本的数据创建(Create)、读取(Read)、更新...
Hibernate+Spring+Struts2+ExtJS开发CRUD功能
在Struts2中,可以通过拦截器或Action类中的参数处理分页请求,结合Hibernate的Query或Criteria API设定查询范围,如设置`setFirstResult()`和`setMaxResults()`。 在“jy20191002”这个压缩包文件中,可能包含了...
Struts2-CRUD是一个基于Struts2框架的简单示例,用于展示如何在实际应用中实现创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,这是许多Web应用的基础功能。Struts2是一个强大的、成熟的Java ...