博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CDI Features
阅读量:6687 次
发布时间:2019-06-25

本文共 6560 字,大约阅读时间需要 21 分钟。

EL/springEL:

●什么是EL表达式:

Expression Language————表达式语言

●EL表达式的作用

  获取数据

  执行运算

  获取Web开发常用对象

  执行Java方法

●获取数据:

<%    User user = new User("旺财", "幸福路", 18);    pageContext.setAttribute("pageContextUser", user);    request.setAttribute("requestUser", user);    session.setAttribute("sessionUser", user);    application.setAttribute("applicationUser", user);%>

获取page域对象

${pageContextUser.name}----${pageContextUser.addr}-----${pageContextUser.age}
${pageScope.pageContextUser.name}----${pageScope.pageContextUser.addr}-----${pageScope.pageContextUser.age}

获取request域对象

${requestUser.name}----${requestUser.addr}-----${requestUser.age}
${requestScope.requestUser.name}----${requestScope.requestUser.addr}-----${requestScope.requestUser.age}

获取session域对象

${sessionUser.name}----${sessionUser.addr}-----${sessionUser.age}
${sessionScope.sessionUser.name}----${sessionScope.sessionUser.addr}-----${sessionScope.sessionUser.age}

获取application域对象

${applicationUser.name}----${applicationUser.addr}-----${applicationUser.age}
${applicationScope.applicationUser.name}----${applicationScope.applicationUser.addr}-----${applicationScope.applicationUser.age}


<%User user2 = new User("小强", "健康街", 28);User[] users = {user,user2};List
userList = new ArrayList
();userList.add(user);userList.add(user2);pageContext.setAttribute("arrayUser", users);pageContext.setAttribute("listUser", userList); %>

利用.和[]获取数组中的对象中的值

${pageScope.arrayUser[0].name }---${pageScope.arrayUser[0].addr }---${pageScope.arrayUser[0].age }
${pageScope.arrayUser[1].name }---${pageScope.arrayUser[1].addr }---${pageScope.arrayUser[1].age }

利用.和[]获取集合中的对象中的值

${pageScope.listUser[0].name }---${pageScope.listUser[0].addr }---${pageScope.listUser[0].age }
${pageScope.listUser[1].name }---${pageScope.listUser[1].addr }---${pageScope.listUser[1].age }

利用[]获取对象中的值

${pageScope.listUser[0]["name"] }---${pageScope.listUser[0]["addr"] }---${pageScope.listUser[0]["age"] }
${pageScope.listUser[1]["name"] }---${pageScope.listUser[1]["addr"] }---${pageScope.listUser[1]["age"] }


●EL表达式获取在Web开发中常用的对象:

EL表达式的11个隐式对象

pageContext

pageScope

requestScope

SessionScope

ApplicationScope

cookie

initParam

param

paramValues

header

headerValues

注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]

${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}

 

●EL执行运算

 

${3+2*8+5/8 }

 

 

 

●简易版自定义函数编写配置方法:

 

    EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。

 

    在EL表达式中调用的只能是Java类的静态方法。

 

    这个Java类的静态方法需要在TLD(Tagliary Definition)文件中描述,才可以被EL表达式调用。

 

    EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

 

1.编写调用自定义函数的类,编写类中具体实现的静态方法

 

2.编写tld文件在web-inf目录下

 

3.jsp中使用taglib指令导入自定义函数库

 

4.使用

Interceptor:

●让我们写一个简单的应用程序,让我们预订电影节目的门票。与所有应用程序一样,日志记录是我们所关注的一个跨领域问题。

(相关的片段是内联的,但您可以从提供的链接中查看完整的代码)

我们如何标记哪些方法被截获?注释类似的方法不是很方便吗?

@Logpublic void aMethod(){...}

让我们创建一个“标记”拦截方法的注释。

@InterceptorBinding@Target({ TYPE, METHOD })@Retention(RUNTIME)public @interface Log {}

当然,你没有错过上面的@InterceptorBinding注释!现在我们已经创建了自定义注释,让我们将它附加(或者使用更好的术语,“绑定它”)到拦截器。

所以这是我们的日志拦截器。一个@AroundInvoke方法,我们差不多完成了

@Interceptor@Log  //binding the interceptor here. now any method annotated with @Log would be intercepted by logMethodEntrypublic class LoggingInterceptor {    @AroundInvoke    public Object logMethodEntry(InvocationContext ctx) throws Exception {        System.out.println("Entering method: " + ctx.getMethod().getName());        //or logger.info statement         return ctx.proceed();    }}

现在我们创建的@Log注释绑定到这个拦截器。

完成后,让我们在课堂级别或方法级别进行注释,并进行有趣的拦截!

@Log@Statefulpublic class BookShow implements Serializable {    private static final long serialVersionUID = 6350400892234496909L;    public List
getMoviesList() { List
moviesAvailable = new ArrayList
(); moviesAvailable.add("12 Angry Men"); moviesAvailable.add("Kings speech"); return moviesAvailable; } public Integer getDiscountedPrice(int ticketPrice) { return ticketPrice - 50; } // assume more methods are present}

@Log在类级别应用的注释表示应该拦截所有方法LoggingInterceptor

在我们说“全部完成”之前,我们还剩下最后一件事!启用拦截器!

让我们快速提出一个[beans.xml文件]

org.superbiz.cdi.bookshow.interceptors.LoggingInterceptor

在META-INF中

beans.xml中的那些行不仅“启用”拦截器,还定义了拦截器的“执行顺序”。但是我们会在另一个关于多cdi拦截器的例子中看到。

启动测试,我们应该在控制台中看到“输入方法:getMoviesList”。

Apache OpenEJB 4.0.0-beta-2    build: 20111103-01:00http://tomee.apache.org/INFO - openejb.home = /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptorsINFO - openejb.base = /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptorsINFO - Using 'javax.ejb.embeddable.EJBContainer=true' INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)INFO - Found EjbModule in classpath: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors/target/classesINFO - Beginning load: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors/target/classesINFO - Configuring enterprise application: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptorsINFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)INFO - Auto-creating a container for bean cdi-simple-interceptors.Comp: Container(type=MANAGED, id=Default Managed Container)INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)INFO - Auto-creating a container for bean BookShow: Container(type=STATEFUL, id=Default Stateful Container)INFO - Enterprise application "/media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors" loaded.INFO - Assembling app: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptorsINFO - Jndi(name="java:global/cdi-simple-interceptors/BookShow!org.superbiz.cdi.bookshow.beans.BookShow")INFO - Jndi(name="java:global/cdi-simple-interceptors/BookShow")INFO - Created Ejb(deployment-id=BookShow, ejb-name=BookShow, container=Default Stateful Container)INFO - Started Ejb(deployment-id=BookShow, ejb-name=BookShow, container=Default Stateful Container)INFO - Deployed Application(path=/media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors)Entering method: getMoviesList

 

测试:

转载于:https://www.cnblogs.com/railgun1/p/11031047.html

你可能感兴趣的文章
Hadoop之HDFS分布式文件系统具有哪些优点?
查看>>
小型企业公司路由器做DHCP服务器
查看>>
愿不负青春 历经风雨 归期我们仍是少年|六一大童节
查看>>
洞悉物联网发展1000问之物联网与大数据,人工智能到底是什么关系?
查看>>
JAVA数组和面向对象
查看>>
NVisionXR_iOS教程四 —— 在立方体上贴材质
查看>>
Microsoft Visual C++ Runtime library not enough space for thread data
查看>>
Centos 7 ntp时间服务器搭建
查看>>
电压电流采集模块,温湿度采集,称重模块,变送器,adc模数转换模块
查看>>
RAID和LVM
查看>>
学hadoop需要什么基础
查看>>
2019北京物联网智慧城市大数据博览会开启中国之路
查看>>
华为云网络服务两场景
查看>>
将 Desktop Central 与帮助台和 OS Deployer 集成
查看>>
技巧分享:caj怎么转化为pdf
查看>>
WebPack牛刀小试
查看>>
技巧: iPhone玩游戏手机发烫?有妙招
查看>>
标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)
查看>>
SQL Server 2008高可用×××介绍
查看>>
STP收敛
查看>>