文档章节

Struts2核心 拦截器(初识拦截器)———struts2第五讲

一别经年
 一别经年
发布于 2014/06/13 21:18
字数 921
阅读 19
收藏 0
点赞 0
评论 0

拦截器 struts2 核心

注:本文系作者在看了浪曦的风中叶老师的struts2视频的个人总结,希望能帮助广大struts2的初学者。 

第一步:(这一步和其他一样,这里从简)依旧是新建一个web project,命名为interceptor1,导入struts2必须的包。在src目录下新建struts.xml,修改web.xml文件。 

第二步:在前面几讲中已经对一个struts2的web project有了一个具体的说明 这里只给代码: 

目录结构为: 

 

web.xml 

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <web-app version="2.4"   

  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   

  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   

  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   

  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  

  7.   

  8.     <filter>  

  9.         <filter-name>struts2</filter-name>  

  10.         <!-- 控制器 -->  

  11.         <filter-class>  

  12.         org.apache.struts2.dispatcher.FilterDispatcher  

  13.         </filter-class>  

  14.     </filter>                                                                 

  15.                

  16.                

  17.              <filter-mapping>  

  18.                 <filter-name>struts2</filter-name>  

  19.                 <!-- 任何请求均有过滤器 -->  

  20.                 <url-pattern>/*</url-pattern>  

  21.              </filter-mapping>  

  22. </web-app>  


test.jsp 

Jsp代码  收藏代码

  1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>  

  2. <%  

  3. String path = request.getContextPath();  

  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  

  5. %>  

  6. <%@ taglib prefix="s" uri="/struts-tags" %>  

  7.   

  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  

  9. <html>  

  10.   <head>  

  11.     <base href="<%=basePath%>">  

  12.       

  13.     <title>My JSP 'index.jsp' starting page</title>  

  14.     <meta http-equiv="pragma" content="no-cache">  

  15.     <meta http-equiv="cache-control" content="no-cache">  

  16.     <meta http-equiv="expires" content="0">      

  17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  

  18.     <meta http-equiv="description" content="This is my page">  

  19.     <!--  

  20.     <link rel="stylesheet" type="text/css" href="styles.css">  

  21.     -->  

  22.   </head>  

  23.     

  24.   <body>  

  25.                 <s:form action="test_interceptor">  

  26.                           

  27.                       <s:submit name="submit"></s:submit>  

  28.                           

  29.                 </s:form>  

  30.   </body>  

  31. </html>  


success.jsp 

Jsp代码  收藏代码

  1. <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>  

  2. <%  

  3. String path = request.getContextPath();  

  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  

  5. %>  

  6.   

  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  

  8. <html>  

  9.   <head>  

  10.     <base href="<%=basePath%>">  

  11.       

  12.     <title>My JSP 'success.jsp' starting page</title>  

  13.       

  14.     <meta http-equiv="pragma" content="no-cache">  

  15.     <meta http-equiv="cache-control" content="no-cache">  

  16.     <meta http-equiv="expires" content="0">      

  17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  

  18.     <meta http-equiv="description" content="This is my page">  

  19.     <!--  

  20.     <link rel="stylesheet" type="text/css" href="styles.css">  

  21.     -->  

  22.   

  23.   </head>  

  24.     

  25.   <body>  

  26.   去看看控制台吧  

  27.   </body>  

  28. </html>  



Test_InterceptorAction 

Java代码  收藏代码

  1. package cn.edu.hdu.action;  

  2.   

  3. import com.opensymphony.xwork2.ActionSupport;  

  4.   

  5. public class Test_InterceptorAction extends ActionSupport    

  6.   

  7. {  

  8.       

  9.     private String username;  

  10.   

  11.     public String getUsername() {  

  12.         return username;  

  13.     }  

  14.   

  15.     public void setUsername(String username) {  

  16.         this.username = username;  

  17.     }  

  18.       

  19.       

  20.     public String execute() throws Exception  

  21.     {  

  22.         return SUCCESS;  

  23.     }  

  24.       

  25.     public String test() throws Exception  

  26.     {  

  27.           

  28.         System.out.println("此时所有拦截器完毕,已经调用了action中的test方法");  

  29.         return SUCCESS;  

  30.     }  

  31.   

  32. }  



以上几个文件基本没有什么花头,接下去我们写自己定义的拦截器MyInterceptor.java 
现在src下建包 cn.edu.hdu.interceptor 在里面建拦截器(说白了就是一个类) 
代码如下:注意一些注释: 

Java代码  收藏代码

  1. package cn.edu.hdu.interceptor;  

  2.   

  3. import com.opensymphony.xwork2.ActionInvocation;  

  4. import com.opensymphony.xwork2.interceptor.Interceptor;  

  5.   

  6. public class MyInterceptor implements Interceptor {  

  7.   

  8.     public void destroy() {  

  9.   

  10.         System.out.println("destroy");  

  11.     }  

  12.   

  13.     public void init() {                 

  14.   

  15.                        System.out.println("拦截器已经被加载");  

  16.     }  

  17.   

  18.     public String intercept(ActionInvocation invocation) throws Exception {  

  19.   

  20.                                      System.out.println("调用intercept方法");  

  21.                                        

  22.                                      String result = invocation.invoke();       // invocation.invoke()方法检查是否还有拦截器 有的话继续调用余下的拦截器 没有了  执行action的业务逻辑  

  23.         return result;  

  24.     }  

  25.   

  26. }  



这个类使我们自己定义的。 

1.继承interceptor接口中的三个方法 
public void init(); 
public void destroy(); 
public String interceptor(ActionInvocation invocation); 
2.在interceptor中调用invocation.invoke(); 当执行完当前拦截器。检查是否还有拦截器需要存在。 

好了。拦截器写好了。要怎样将它插入action中去呢? 

struts.xml 
注意一些注释 

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8" ?>  

  2. <!DOCTYPE struts PUBLIC  

  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  

  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  

  5.   

  6.   

  7. <struts>  

  8.         <package name="interceptor1" extends="struts-default">  

  9.                             

  10.                           <!-- 定义拦截器 -->  

  11.                           <interceptors>  

  12.                                 <interceptor name="myInterceptor" class="cn.edu.hdu.interceptor.MyInterceptor"></interceptor>  

  13.                           </interceptors>  

  14.                            

  15.                         <!-- 配置action -->  

  16.                         <action name="test_interceptor" calss="cn.edu.hdu.action.Test_InterceptorAction">  

  17.                             <result name="success">/success.jsp</result>  

  18.                             <result name="input">/test.jsp</result>  

  19.                             <!-- 将声明好的拦截器插入action中 -->  

  20.                                 <interceptor-ref name="myInterceptor"></interceptor-ref>  

  21.                         </action>  

  22.                           

  23.                           

  24.         </package>  

  25. </struts>  



好了。现在来检测一下吧: 

首先是启动tomcat 
注意控制台的信息,如下: 

 

看到中文那行了吧,说明什么? 自己想咯…… 
浏览器中输入: 
http://localhost:8080/interceptor1/test.jsp 
单击submit 
发现控制台有什么? 
刷新试试看? 
再刷? 
再试试看? 
哈哈 

附件中有源码

Struts2输入校验2(框架效验)———stru ... | struts2 核心拦截器2 (微微进阶)——stru ...


    本文转载自:http://javaweb.group.iteye.com/group/wiki/1513-core-struts2-interceptors-interceptors-acquaintanc...

    共有 人打赏支持
    一别经年
    粉丝 17
    博文 173
    码字总数 58546
    作品 0
    西安
    程序员
    struts2基于动态代理的Interceptor

    struts2核心功能都是基于struts2拦截器的,而拦截器又是基于java的动态代理。 要实现struts2拦截器,需在struts.xml中配置拦截器,每个action可以指定拦截器,指定了拦截器之后默认的拦截器链...

    cjun1990
    2015/10/23
    1K
    0
    Java程序员从笨鸟到菜鸟之(三十七)细谈struts2(二)开发第一个struts2的实例

    本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 前面一篇博客(细谈struts2之自己实现struts2框架)带大家对基于mvc业务流程熟悉了一下,现在我们就用对mvc...

    长平狐
    2012/11/12
    42
    0
    Java程序员从笨鸟到菜鸟之(四十六)细谈struts2(八)拦截器的实现原理及源码剖析

    本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和res...

    长平狐
    2012/11/12
    44
    0
    Struts2 的ModelDriven 二——ModelDrive

    继上篇博客介绍了值传递的几种形式,这篇博客,来说说struts2是如何实现的? 有这么两个概念和modelDriven实现有关:ValueStack,ModelDrivenInterceptor。 一、ModelDrivenInterceptor 首先...

    一零贰IV
    05/12
    0
    0
    Struts学习之值栈的理解

    页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心(值栈)填充数据,所处理工作与业务无关),Action,Result。 1,经过一系列拦截器 介绍其中的两个拦截器:Model...

    ke_ry
    2016/12/28
    0
    0
    Java程序员从笨鸟到菜鸟之(三十八)细谈struts2(三)struts2拦截器源码分析

    本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 前面博客我们介绍了开发struts2应用程序的基本流程(细谈struts2之开发第一个struts2的实例),通过前面我们...

    长平狐
    2012/11/12
    191
    0
    (总结)Struts1和Struts2的区别

    以前学的时候我们就是直接接触struts2,也没太关心这个struts1,正好我们公司用的是struts1,上网看过很多写这方面的博文的,写的也都很好、讲解的很详细、但是各有各的优点、我就总结了一下拿...

    IT妖姬
    2014/10/21
    0
    0
    struts2系统架构及处理流程

    一、struts2系统架构 · 1.FilterDispatcher是整个Struts2的调度中心,也就是MVC中的C(控制中心),根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理...

    J星星点灯
    2017/12/21
    0
    0
    新书预告 :《Struts2技术内幕》 —— Struts2源码研究和Web开发研究

    http://www.iteye.com/topic/1117044 简单做一个新书预告,我写的《Struts2技术内幕》将在下个月问世。 这本书应该是国内比较少见的以研究Struts2的源码为主要目标的技术书籍。源码研究类的书...

    ddatsh
    2011/10/26
    1K
    8
    Struts2学习(三):所有基本功能详解

    总结 struts2的常用东东: 一、验证,包括声明式(XML)和编程式验证(java),常用于后台验证 1.在action中复写 validate() 方法,此方法是通用验证 2.创建validateXxx()方法,此方法是专用于X...

    这个人很懒-啥都没写
    2013/08/22
    0
    1

    没有更多内容

    加载失败,请刷新页面

    加载更多

    下一页

    代码生成利器:IDEA 强大的 Live Templates

    代码生成利器:IDEA 强大的 Live Templates

    qwfys
    24分钟前
    1
    0
    spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

    最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

    北岩
    28分钟前
    1
    0
    告警系统邮件引擎、运行告警系统

    告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

    Zhouliang6
    31分钟前
    0
    0
    日常运维--rsync同步工具

    rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

    chencheng-linux
    35分钟前
    1
    0
    Java工具类—随机数

    Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

    PrivateO2
    47分钟前
    1
    0
    关于java内存模型、并发编程的好文

    Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

    DannyCoder
    昨天
    0
    0
    dubbo @Reference retries 重试次数 一个坑

    在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

    奋斗的小牛
    昨天
    1
    0
    数据结构与算法3

    要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

    沉迷于编程的小菜菜
    昨天
    0
    0
    spring boot应用测试框架介绍

    一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

    yangjianzhou
    昨天
    1
    0
    rsync工具介绍/rsync通过ssh同步

    rsync工具介绍 数据备份是必不可少,在Linux系统下数据备份的工具很多,其中重点介绍就是rsync工具,rsync不仅可以远程同步数据,还可以本地同步数据,且不会覆盖以前的数据在已经存在的数据...

    Hi_Yolks
    昨天
    2
    0

    没有更多内容

    加载失败,请刷新页面

    加载更多

    下一页

    返回顶部
    顶部