当前位置: 首页 > news >正文

专业网站建设 公司哪家好上海工商企业查询网

专业网站建设 公司哪家好,上海工商企业查询网,做动漫网站要多少钱,致设计网站官网在此示例中#xff0c;我们将看到如何在EJB中使用拦截器并使用简单的Web应用程序对其进行测试。 1.简介 顾名思义#xff0c;当您想拦截对EJB方法的调用时#xff0c;将使用拦截器。 如果为Bean声明一个拦截器#xff0c;则每次调用该Bean的方法时#xff0c;该拦截器的一… 在此示例中我们将看到如何在EJB中使用拦截器并使用简单的Web应用程序对其进行测试。 1.简介 顾名思义当您想拦截对EJB方法的调用时将使用拦截器。 如果为Bean声明一个拦截器则每次调用该Bean的方法时该拦截器的一个方法都将拦截该方法。 这意味着执行直接进入了拦截器的方法。 然后拦截方法可以决定是调用被拦截的EJB方法还是简单地替换它。 您可能会发现上述行为类似于面向方面的编程哲学并且您是正确的。 尽管这两种技术的实现方式完全不同但事实是它们可以用于相同的目的。 例如当您想在执行Beans方法之前或之后记录某些内容时。 或者当您要强制执行有关方法调用的特定策略时例如身份验证输入检查等。当然EJB可以具有一系列拦截器这些拦截器将按特定顺序拦截该方法。 在这个示例中我们将创建一个EAR项目和一个EJB项目它们将托管我们的EJB和拦截器以及一个动态Web应用程序它将托管一个Servlet以测试上述行为。 我们将使用Eclipse Java EE IDE 4,3 Kepler和Glassfish 4.0作为容器。 2.创建一个新的企业应用程序项目 创建一个名为EJBInterceptorEAR的新企业应用程序项目。在Eclipse IDE中选择File- EJBInterceptorEAR Enterprise Application Project并填写表单然后单击Finish 3.创建一个新的EJB Projet 创建一个名为InterceptorsEJB的新EJB项目。 我们将基于此创建会话bean。 转到文件-新建- EJB项目并填写表单。 注意选择“ Add EAR Project”然后选择“ EJBInterceptorEAR ”作为EAR项目名称 单击下一步两次然后选择创建EJB客户端JAR以及生成ejb-jar.xml部署描述符 4.创建一个简单的拦截器类 我们将定义一个只有一种方法的简单拦截器。 在InterceptorsEJB项目的ejbModule文件夹下创建一个名为com.javacodegeeks.enterprise.ejb.interceptor的新包并创建以下类 SimpleInterceptor.java package com.javacodegeeks.enterprise.ejb.interceptor;import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext;public class SimpleInterceptor {AroundInvokepublic Object intercept(InvocationContext context) throws Exception {System.out.println(SimpleInterceptor - Logging BEFORE calling method :context.getMethod().getName() );Object result context.proceed();System.out.println(SimpleInterceptor - Logging AFTER calling method :context.getMethod().getName() );return result;} } 请注意使用AroundInvoke注释的public Object intercept 。 这意味着该特定方法将在EJB方法调用上进行拦截。 重要的是要解决这样一个事实即拦截器类可以具有任意数量的方法但是AroundInvoke只能注释一个方法。 可以将intercept方法的InvocationContext参数用于两个目的。 您可以提取与被拦截的EJB方法有关的有用信息例如我们使用getMethod().getName() API调用链来获取被拦截方法的名称也可以使用proceed() API继续执行方法。 如果链中没有拦截器则此方法会将执行流切换到链中的下一个拦截器或切换到实际的拦截的EJB方法。 该方法将返回EJB方法调用的结果。 但是我们不知道返回的类型因此proceed()返回一个Object实例。 如果您确实知道EJB方法的返回类型则可以将proceed()的结果转换为该特定类型然后根据需要使用该实例。 注意 intercept方法还返回实际EJB调用的结果。 这将被传递到拦截器链中的下一个拦截器或者如果没有其他拦截器则传递给客户端。 因此在调用实际的EJB方法之前要执行的任何业务逻辑都应放在调用proceed()之前。 因此在调用proceed()之后将要执行的代码放入实际的EJB方法之后。 当然如果需要您可以一起绕过EJB方法的常规执行。 4.创建一个简单的EJB 这是将使用上述拦截器拦截其方法的EJB。 在InterceptorsEJB项目的ejbModule文件夹下创建一个名为com.javacodegeeks.enterprise.ejb的新包并创建以下类 package com.javacodegeeks.enterprise.ejb;import javax.ejb.Stateless; import javax.interceptor.Interceptors;import com.javacodegeeks.enterprise.ejb.interceptor.SimpleInterceptor;Stateless Interceptors(SimpleInterceptor.class) public class SimpleEJB {public String printMessage(String message) {System.out.println( Executing method : printMessage message);return Message is message;}} 如您所见我们已使用Interceptors(SimpleInterceptor.class)批注标记了该类。 这意味着该类的所有方法将被SimpleInterceptor拦截 让我们创建一个简单的Servlet来测试所需的功能。 5.创建一个新的动态Web项目 转到文件-新建-动态Web项目。 填写表单确保您选中“将项目添加到EAR”并把EJBInterceptorEAR作为“ EAR项目名称” 单击“完成”后转到项目资源管理器然后右键单击“ Project InterceptorTesting然后转到“属性”-“部署程序集”-“添加”-“项目”-“ EJBInterceptorEAR 6.创建新的Servlet 转到 InterceptorTesting Web项目并创建一个名为 TestSerlvet 的新Servlet 让我们看一下该Servlet的代码 TestServlet.java package com.javacodegeeks.enterprise.servlet;import java.io.IOException;import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import com.javacodegeeks.enterprise.ejb.SimpleEJB;WebServlet(/TestSerlvet) public class TestSerlvet extends HttpServlet {private static final long serialVersionUID 1L;public TestSerlvet() {super();}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println(Hello from Servlet);InitialContext ic;SimpleEJB bean;String message request.getParameter(printMessage);if (message ! null) {try {ic new InitialContext();bean (SimpleEJB) ic.lookup(java:global/EJBInterceptorEAR/InterceptorTesting/SimpleEJB! com.javacodegeeks.enterprise.ejb.SimpleEJB);bean.printMessage(message);} catch (NamingException e) {e.printStackTrace();}}} } 正如你可以看到我们简单的解析printMessage查询参数和我们的价值传递给printMessage的方法SimpleEJB 。 提示 如果您在找出EJB PassivationObject的可移植JNDI名称时遇到麻烦请在部署项目时查看Glassfish的日志或输出您会发现这样的一行2014-01-09T151414.627 0200 | INFO EJB5181EJB SimpleEJB的便携式JNDI名称javaglobal / EJBInterceptorEAR / InterceptorTesting / SimpleEJB com.javacodegeeks.enterprise.ejb.SimpleEJBjavaglobal / EJBInterceptorEAR / InterceptorTesting / SimpleEJB 7.测试 您可以在Glassfish上部署您的应用程序并发出以下请求 http://localhost:8080/InterceptorTesting/TestSerlvet?printMessageHello%20From%20JCG 如果您在控制台上观看Glassfish的输出则会看到 2014-01-09T17:43:14.3560200|INFO: Hello from Servlet 2014-01-09T17:43:14.3570200|INFO: Logging BEFORE calling method :printMessage 2014-01-09T17:43:14.3570200|INFO: Executing method : printMessage : Hello From JCG 2014-01-09T17:43:14.3570200|INFO: Logging AFTER calling method :printMessage 8.多个拦截器 继续在com.javacodegeeks.enterprise.ejb.interceptor包下的InterceptorsEJB项目中创建另一个新的Interceptor。 这里是 SecondInterceptor.java package com.javacodegeeks.enterprise.ejb.interceptor;import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext;public class SecondInterceptor {AroundInvokepublic Object intercept(InvocationContext context) throws Exception {System.out.println(SecondInterceptor - Logging BEFORE calling method :context.getMethod().getName() );Object result context.proceed();System.out.println(SecondInterceptor -Logging AFTER calling method :context.getMethod().getName() );return result;} } 这是SimpleEJB 。 SimpleEJB.java package com.javacodegeeks.enterprise.ejb;import javax.ejb.Stateless; import javax.interceptor.Interceptors;import com.javacodegeeks.enterprise.ejb.interceptor.SecondInterceptor; import com.javacodegeeks.enterprise.ejb.interceptor.SimpleInterceptor;Stateless Interceptors({SimpleInterceptor.class, SecondInterceptor.class}) public class SimpleEJB {public String printMessage(String message) {System.out.println( Executing method : printMessage message);return Message is message;}} 现在如果我们再次发出相同的请求 http://localhost:8080/InterceptorTesting/TestSerlvet?printMessageHello%20From%20JCG 如果您在控制台上观看Glassfish的输出则会看到 2014-01-09T17:59:55.6470200|INFO: Hello from Servlet 2014-01-09T17:59:55.6590200|INFO: SimpleInterceptor - Logging BEFORE calling method :printMessage 2014-01-09T17:59:55.6590200|INFO: SecondInterceptor - Logging BEFORE calling method :printMessage 2014-01-09T17:59:55.6600200|INFO: Executing method : printMessageHello From JCG 2014-01-09T17:59:55.6600200|INFO: SecondInterceptor -Logging AFTER calling method :printMessage 2014-01-09T17:59:55.6600200|INFO: SimpleInterceptor -Logging AFTER calling method :printMessage 9.方法层拦截器 有时您可能不希望所有的bean方法都被拦截。 您可以通过注释来选择要拦截的方法而不是整个类。 让我们看看如何 SimpleEJB.java package com.javacodegeeks.enterprise.ejb;import javax.ejb.Stateless; import javax.interceptor.Interceptors;import com.javacodegeeks.enterprise.ejb.interceptor.SimpleInterceptor;Stateless public class SimpleEJB {Interceptors(SimpleInterceptor.class)public String printMessage(String message) {System.out.println( Executing method : printMessage : message);return Message is message;}public String printSomething(String message) {System.out.println( Executing method : printSomething : message);return Message is message;}} TestServlet.java package com.javacodegeeks.enterprise.servlet;import java.io.IOException;import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import com.javacodegeeks.enterprise.ejb.SimpleEJB;WebServlet(/TestSerlvet) public class TestSerlvet extends HttpServlet {private static final long serialVersionUID 1L;public TestSerlvet() {super();}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println(Hello from Servlet);InitialContext ic;SimpleEJB bean;String message request.getParameter(printMessage);if (message ! null) {try {ic new InitialContext();bean (SimpleEJB) ic.lookup(java:global/EJBInterceptorEAR/InterceptorTesting/SimpleEJB! com.javacodegeeks.enterprise.ejb.SimpleEJB);bean.printMessage(message);bean.printSomething(This method is not intercepted);} catch (NamingException e) {e.printStackTrace();}}}} 现在如果我们再次发出相同的请求 http://localhost:8080/InterceptorTesting/TestSerlvet?printMessageHello%20From%20JCG 如果您在控制台上观看Glassfish的输出则会看到 2014-01-09T19:52:00.9090200|INFO: Hello from Servlet 2014-01-09T19:52:00.9200200|INFO: SimpleInterceptor - Logging BEFORE calling method :printMessage 2014-01-09T19:52:00.9210200|INFO: Executing method : printMessage : Hello From JCG 2014-01-09T19:52:00.9210200|INFO: SimpleInterceptor -Logging AFTER calling method :printMessage 2014-01-09T19:52:00.9210200|INFO: Executing method : printSomething :This method is not intercepted 下载Eclipse项目 这是EJB拦截器上的一个示例。 下载本教程的Eclipse项目 EJBInterceptor.zip 翻译自: https://www.javacodegeeks.com/2013/07/java-ee-ejb-interceptors-tutorial-and-example.html
http://wiki.neutronadmin.com/news/190387/

相关文章:

  • 南昌网站制作上海网站优化推广公司
  • 上海高端网站设计公司价格汕头网站建设维护
  • 做网站公司不给源码室内设计考研有哪些学校
  • 重庆施工员证书查询官方网站网站开发建设及推广合同
  • 网站托管套餐怎么在网页中加入图片
  • 深圳高端网站建设电话html5产品展示网站模板
  • 瑞安企业做网站垂直门户网站有哪些
  • 自己做网站赚钱吗社区门户网站模板
  • 大良营销网站建设好么设备网站模板
  • 做网站是网络维护好学吗
  • 用群晖做网站wordpress必备优化插件
  • muse怎么做响应式网站鄂州网吧暂停营业
  • 企业做定制网站的好处手机网站静态模板
  • 巴中 网站建设凡客诚品是什么牌子
  • 网上做设计的网站有哪些手术室专科建设网站
  • windows10网站建设wordpress阅读数
  • 南京建网站公司软件最全的网站
  • 旅游网站建设备案建设网站好公司简介
  • 用python写一个简单的网站营销型网站建设的标准
  • 合网站 - 百度昭通网站seo优化
  • 台州哪家做企业网站比较好网站跟网页的区别
  • ui的含义网站建设免费php网站模板
  • 做电脑网站用什么软件好用吗wordpress架设服务器
  • 怎样做网站关键字生产许可证查询官网
  • 淘宝禁止了网站建设类学做粤菜的网站有哪些
  • 招聘做网站专业人员wordpress缩略图题目文本链接
  • 个人网站设计源代码企业天眼查询信息官网
  • 河北集团网站建设网站开发前端基础
  • 外贸推广免费网站wordpress修改邮件地址
  • 如何判断网站程序使用asp还是php给企业做网站 内容需要对方提供