拦截器(Interceptor)的学习

Similar documents
Stateless Session Beans(无状态bean)的学习

EJB-Programming-4-cn.doc

EJB3.0实例教程.doc

EJB3.0实例教程.doc

EJB3.0实例教程.doc

Microsoft Word - ejb3.0实例教程.docx

EJB-Programming-3.PDF

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Microsoft Word - EJB3.0实例教程1.doc

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

untitled

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Microsoft Word - 01.DOC

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

untitled

chp6.ppt

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

JavaIO.PDF

2013年度西藏自治区教育厅

實用文格式大全.doc

个 小 小 的 乡 下 人 木 匠 的 儿 子, 竟 然 有 这 么 大 的 力 量 其 实 就 是 这 点, 祂 活 出 来 的 那 种 爱, 是 世 界 上 没 有 的 祂 活 出 来 的 爱 是 世 界 上 的 人 都 需 要 的, 但 却 是 人 人 在 这 个 世 界 上 都 得 不 到

薛 秦 高 继 宁 宋 明 锁 文 洪 梁 瑞 敏 贾 跃 进 内 蒙 古 自 治 区 (3 人 ) 琪 格 其 图 米 子 良 赵 震 生 辽 宁 省 (8 人 ) 田 素 琴 白 凤 鸣 肖 瑞 崇 黄 恩 申 白 长 川 杨 世 勇 李 敬 林 王 秀 云 吉 林 省 (5 人 ) 赵 继 福

Chapter 9: Objects and Classes

秘密大乘佛法(下)

Page 2 of 12

!! :!!??!!?!??!!!... :... :'?'?! :' ' :'?' :'?' :'!' : :? Page 2

<D2B0D0C4D3C5D1C52DC8CED6BEC7BF202D20BCC7CAC2B1BE>

國立臺東高級中學102學年度第一學期第二次期中考高一國文科試題

Microsoft Word - Sunday

鎶ョ焊0

1.5招募说明书(草案)

IoC容器和Dependency Injection模式.doc


RUN_PC連載_12_.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

untitled

untitled

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

会话Bean与实体Bean(CMP)使用

《大话设计模式》第一章

untitled

untitled

使用MapReduce读取XML文件

Java

epub 61-2

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

Microsoft Word doc

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

untitled

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Struts2自定义类型转换.doc

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

Swing-02.pdf

软件工程文档编制

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

Microsoft Word - Broker.doc

( 含 要 ) 1-2 用 或 雇 用, 抑 或 有 無 俸 給 文 職 或 武 職, 政 官 或 事 官 均 屬 之, 其 不 以 具 備 人 資 格 為 限, 因 此 屬 於 最 廣 義 之 念 四 廣 義 念 之 依 服 24 條 之 規 定 : 本 於 受 有 俸 給 之 文 武 職, 及

发展党员材料填写参考(上网).doc

J2EE MVC with Webwork2 Xwork, to J2EE MVC with Webwork2 Xwork

《计算概论》课程 第十九讲 C 程序设计语言应用

第一章 章标题-F2 上空24,下空24

1.加入党组织主要经过哪些程序?

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

RunPCPB8 new feature.PDF

RunPC2_.doc

untitled

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

當母親禱告時

Microsoft PowerPoint - 09Future

JBuilder Weblogic

Microsoft Word - Sing Fu

javaexample-02.pdf

在 ongodb 中实现强事务

使用Cassandra和Spark 2.0实现Rest API服务

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

Guava学习之Resources

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

湖北省高等教育自学考试新生注册管理办法

96年第2次勘誤( 新增)

新版 明解C++入門編

1.5招募说明书(草案)

2009年9月全国计算机等级考试二级Java真题及答案

Microsoft PowerPoint - ch6 [相容模式]

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Ellen G. White Writings

FileMaker 16 ODBC 和 JDBC 指南

设计模式 Design Patterns

PrintWriter s = new PrintWriter(writer); ex.printstacktrace(s); mv.addobject("exception", writer.tostring()); mv.setviewname("error"); return


ebook 96-16

Microsoft Word - Learn Objective-C.doc

输入 project name 选择完成

Transcription:

二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器 HelloInterceptor 对 HelloChinaBean 中的所有方法进行监听 HelloChinaBean.java package com.foshanshop.ejb3.impl; import com.foshanshop.ejb3.hellochina; import com.foshanshop.ejb3.hellochinaremote; import javax.ejb.local; import javax.ejb.remote; import javax.ejb.stateless; import javax.interceptor.interceptors; @Stateless @Remote (HelloChinaRemote.class) @Local(HelloChina.class) @Interceptors(HelloInterceptor.class) public class HelloChinaBean implements HelloChina,HelloChinaRemote { public String SayHello(String name) { return name +" 说 : 你好! 中国."; public String Myname() { return " 我是佛山人 "; 拦截器 HelloInterceptor.java package com.foshanshop.ejb3.impl; import javax.interceptor.aroundinvoke; import javax.interceptor.invocationcontext; public class HelloInterceptor { @AroundInvoke

public Object log(invocationcontext ctx) throws Exception { System.out.println("*** HelloInterceptor intercepting"); long start = System.currentTimeMillis(); try{ if (ctx.getmethod().getname().equals("sayhello")){ System.out.println("*** SayHello 已经被调用! *** " ); if (ctx.getmethod().getname().equals("myname")){ System.out.println("*** Myname 已经被调用! *** " ); return ctx.proceed(); catch (Exception e) { throw e; finally { long time = System.currentTimeMillis() - start; System.out.println(" 用时 :"+ time + "ms"); public Object XXX(InvocationContext ctx) throws Exception XXX 代表方法名可以任意 拦截器的实现规则 : 必须使用标注 @AroundInvoke 表示其为用作拦截器的方法, 这一方法必须遵守以下格式 :public Object xxx(javax.interceptor.invocationcontext ctx)throws Exception, 其中 xxx 可以任意取名, javax.interceptor.invocationcontext 封装了客户端所调用业务方法的一些信息 必须调用 InvocationContext 对象的 proceed() 方法作为返回结果, 否则其他拦截器和业务方法不会执行. 下面是 HelloChinaBean 的本地及远程业务接口 HelloChina.java package com.foshanshop.ejb3; public interface HelloChina extends HelloChinaRemote{ HelloChinaRemote.java package com.foshanshop.ejb3; public interface HelloChinaRemote { public String SayHello(String name); public String Myname();

下面是 Session Bean 的 JSP 客户端代码 : InterceptorTest.jsp <%@ page contenttype="text/html; charset=gbk"%> <%@ page import="com.foshanshop.ejb3.hellochinaremote, javax.naming.*, java.util.properties"%> <% props.setproperty("java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory"); props.setproperty("java.naming.provider.url", "localhost:1099"); props.setproperty("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext ctx; try { ctx = new InitialContext(props); HelloChinaRemote hellochinaremote = (HelloChinaRemote) ctx.lookup("hellochinabean/remote"); out.println(hellochinaremote.sayhello(" 东方通 ")); out.println("<br>"+ hellochinaremote.myname()); catch (NamingException e) { out.println(e.getmessage()); %> 除了可以在外部定义拦截器之外, 还可以将 Session Bean 中的一个或多个方法定义为拦截器 下面以上 面的 HelloChinaBean 为例, 介绍在 Session Bean 中如何定义拦截器 HelloChinaBean.java package com.foshanshop.ejb3.impl; import com.foshanshop.ejb3.hellochina; import com.foshanshop.ejb3.hellochinaremote; import javax.ejb.local; import javax.ejb.remote; import javax.ejb.stateless; import javax.interceptor.aroundinvoke; import javax.interceptor.invocationcontext; @Stateless @Remote ({HelloChinaRemote.class) @Local(HelloChina.class) public class HelloChinaBean implements HelloChina,HelloChinaRemote { public String SayHello(String name) {

return name +" 说 : 你好! 中国."; public String Myname() { return " 我是佛山人 "; @AroundInvoke public Object log(invocationcontext ctx) throws Exception { try{ if (ctx.getmethod().getname().equals("sayhello")){ System.out.println("*** HelloChinaBean.SayHello() 已经被调用! *** " ); if (ctx.getmethod().getname().equals("myname")){ System.out.println("*** HelloChinaBean.Myname() 已经被调用! *** " ); return ctx.proceed(); catch (Exception e) { throw e; 上面只需一个 @AroundInvoke 注释就指定了要用作拦截器的方法 http://localhost:8080/ejbtest/interceptortest.jsp 访问客户端 TONGWEB5.0 中拦截器 HelloInterceptor 和 HelloChinaBean 写法是一致的, 只是 Session Bean 的 JSP 客户端代码有改进 1 调用的 Properties 不同, JBOSS 调用方式 : props.setproperty("java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory"); props.setproperty("java.naming.provider.url", "localhost:1099"); props.setproperty("java.naming.factory.url.pkgs", "org.jboss.naming"); TWEB5.0 调用方式 : props.setproperty("java.naming.factory.initial","com.tongweb.naming.serialinitcontextfactory "); props.setproperty("java.naming.factory.url.pkgs","com.tongweb.naming"); props.setproperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.jndist atefactoryimpl"); props.setproperty("org.omg.corba.orbinitialhost","168.1.90.6"); props.setproperty("org.omg.corba.orbinitialport","5800");

2 ctx.lookup REMOTE 方式不同 : JBOSS lookup ctx.lookup("hellochinabean/remote"); TONGWEB5.0 lookup ctx.lookup(com.foshanshop.ejb3.hellochinaremote) 代码如下 : InterceptorTest.jsp <%@ page contenttype="text/html;charset=gbk"%> <%@ page import="com.foshanshop.ejb3.hellochinaremote, javax.naming.*, java.util.properties"%> <% props.setproperty("java.naming.factory.initial","com.tongweb.naming.serialinitcontextfactory" ); props.setproperty("java.naming.factory.url.pkgs","com.tongweb.naming"); props.setproperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.jndista tefactoryimpl"); props.setproperty("org.omg.corba.orbinitialhost","168.1.90.6"); props.setproperty("org.omg.corba.orbinitialport","5800"); InitialContext ctx; try { ctx = new InitialContext(props); System.out.println("=======1=============="); HelloChinaRemote hellochinaremote=(hellochinaremote) ctx.lookup("com.foshanshop.ejb3.hellochinaremote"); System.out.println("=======3=============="); out.println(hellochinaremote.sayhello(" 东方通 ")); out.println("<br>"+ hellochinaremote.myname()); catch (NamingException e) { out.println(e.getmessage()); %> 运行结果 :http://168.1.90.6:8880/interceptor/index.jsp [2010-12-30 14:12:56] [INFO] [system.out] [=======1==============] [2010-12-30 14:12:56] [INFO] [system.out] [=======3==============] 东方通说 : 你好! 中国. 我是佛山人 [2010-12-30 14:12:56] [INFO] [system.out] [*** HelloInterceptor intercepting] [2010-12-30 14:12:56] [INFO] [system.out] [*** SayHello 已经被调用! *** ] [2010-12-30 14:12:56] [INFO] [system.out] [ 用时 :0ms] [2010-12-30 14:12:56] [INFO] [system.out] [*** HelloInterceptor intercepting] [2010-12-30 14:12:56] [INFO] [system.out] [*** Myname 已经被调用! *** ]

[2010-12-30 14:12:56] [INFO] [system.out] [ 用时 :0ms] 在 TW5.0 上调试好的应用 Interceptor.ear.rar