OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例

合集下载

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。

如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。

我的E-MAIL:Max.M.Yuan@。

在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。

分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。

1.非UI标志o if、elseif和else描述:执行基本的条件流转。

参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。

在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。

JAVAWEB面试题(含答案)

JAVAWEB面试题(含答案)

1、jsp和servlet的区别、共同点、各自应用的范围??JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。

JSP编译后是“类servlet”。

Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。

而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

JSP侧重于视图,Servlet主要用于控制逻辑。

在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.2、cookie和session的作用、区别、应用范围,session的工作原理Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。

Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。

存储的数据量大,安全性高。

占用服务端的内存资源。

3、jstl是什么?优点有哪些??JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml和sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。

优点有:最大程序地提高了WEB应用在各应用服务器在应用程序服务器之间提供了一致的接口,最大程序地提高了1、在应用程序服务器之间提供了一致的接口,之间的移植。

2、简化了JSP和WEB应用程序的开发。

3、以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet 代码的程序。

在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。

4、允许JSP设计工具与WEB应用程序开发的进一步集成。

相信不久就会有支持JSTL的IDE 开发工具出现。

4、j2ee的优越性主要表现在哪些方面?MVC模式a、J2EE基于JAVA技术,与平台无关b、J2EE拥有开放标准,许多大型公司实现了对该规范支持的应用服务器。

java ognl 表达式

java ognl 表达式

java ognl 表达式
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在Java应用程序中动态访问和操作对象图。

在Java中,OGNL表达式可以通过点运算符来访问对象的属性和方法。

它可以在不直接访问对象字段的情况下,通过对象的getter和setter方法来获取和设置属性值。

这种方式使得代码更加简洁和安全。

OGNL表达式还支持使用方括号来访问对象的集合属性。

例如,可以使用OGNL表达式来获取一个List对象的第一个元素:list[0]。

还可以使用OGNL表达式来遍历一个Map对象的所有键值对,如:map.keySet()。

除了访问对象的属性和方法,OGNL表达式还支持一些常用的操作符,如算术运算符、逻辑运算符和比较运算符。

这些运算符可以用于对对象进行计算和比较操作。

OGNL表达式还提供了一些高级功能,如条件表达式、循环表达式和正则表达式。

这些功能可以使开发人员更加灵活地处理复杂的业务逻辑。

总结来说,OGNL是一种强大而灵活的表达式语言,可以在Java应用程序中动态访问和操作对象图。

它的简洁语法和丰富功能使得开发人员能够更加高效地编写代码,并提高应用程序的可读性和可维
护性。

无论是简单的属性访问还是复杂的业务逻辑处理,OGNL都能帮助开发人员快速实现。

html和javascript中常用的数学及特殊符号标记

html和javascript中常用的数学及特殊符号标记

html和javascript中常⽤的数学及特殊符号标记chr HexCode Numeric HTML entity escape(chr) encodeURI(chr) Description"\x22&#34;&quot;%22%22quotation mark&\x26&#38;&amp;%26&ampersand<\x3C&#60;&lt;%3C%3C less-than sign>\x3E&#62;&gt;%3E%3E greater-than sign\xA0&#160;&nbsp;%A0%C2%A0non-breaking space¡\xA1&#161;&iexcl;%A1%C2%A1inverted exclamation mark¢\xA2&#162;&cent;%A2%C2%A2cent sign£\xA3&#163;&pound;%A3%C2%A3pound sign¤\xA4&#164;&curren;%A4%C2%A4currency sign¥\xA5&#165;&yen;%A5%C2%A5yen sign = yuan sign¦\xA6&#166;&brvbar;%A6%C2%A6broken vertical bar§\xA7&#167;&sect;%A7%C2%A7section sign¨\xA8&#168;&uml;%A8%C2%A8diaeresis = spacing diaeresis©\xA9&#169;&copy;%A9%C2%A9copyright signª\xAA&#170;&ordf;%AA%C2%AA feminine ordinal indicator«\xAB&#171;&laquo;%AB%C2%AB left-pointing double angle quotation mark = left pointing guillemet ¬\xAC&#172;&not;%AC%C2%AC not sign\xAD&#173;&shy;%AD%C2%AD soft hyphen = discretionary hyphen®\xAE&#174;&reg;%AE%C2%AE registered sign = registered trademark sign¯\xAF&#175;&macr;%AF%C2%AF macron = spacing macron = overline = APL overbar°\xB0&#176;&deg;%B0%C2%B0degree sign±\xB1&#177;&plusmn;%B1%C2%B1plus-minus sign = plus-or-minus sign²\xB2&#178;&sup2;%B2%C2%B2superscript two = superscript digit two = squared³\xB3&#179;&sup3;%B3%C2%B3superscript three = superscript digit three = cubed´\xB4&#180;&acute;%B4%C2%B4acute accent = spacing acuteµ\xB5&#181;&micro;%B5%C2%B5micro sign¶\xB6&#182;&para;%B6%C2%B6pilcrow sign = paragraph sign·\xB7&#183;&middot;%B7%C2%B7middle dot = Georgian comma = Greek middle dot¸\xB8&#184;&cedil;%B8%C2%B8cedilla = spacing cedilla¹\xB9&#185;&sup1;%B9%C2%B9superscript one = superscript digit oneº\xBA&#186;&ordm;%BA%C2%BA masculine ordinal indicator»\xBB&#187;&raquo;%BB%C2%BB right-pointing double angle quotation mark = right pointing guillemet ¼\xBC&#188;&frac14;%BC%C2%BC vulgar fraction one quarter = fraction one quarter½\xBD&#189;&frac12;%BD%C2%BD vulgar fraction one half = fraction one half¾\xBE&#190;&frac34;%BE%C2%BE vulgar fraction three quarters = fraction three quarters¿\xBF&#191;&iquest;%BF%C2%BF inverted question mark = turned question mark×\xD7&#215;&times;%D7%C3%97multiplication sign÷\xF7&#247;&divide;%F7%C3%B7division signƒ\u0192&#402;&fnof;%u0192%C6%92latin small f with hook = function = florinˆ\u02C6&#710;&circ;%u02C6%CB%86modifier letter circumflex accent˜\u02DC&#732;&tilde;%u02DC%CB%9C small tilde \u2002&#8194;&ensp;%u2002%E2%80%82en space \u2003&#8195;&emsp;%u2003%E2%80%83em space \u2009&#8201;&thinsp;%u2009%E2%80%89thin space\u200C&#8204;&zwnj;%u200C%E2%80%8C zero width non-joiner\u200D&#8205;&zwj;%u200D%E2%80%8D zero width joiner\u200E&#8206;&lrm;%u200E%E2%80%8E left-to-right mark\u200F&#8207;&rlm;%u200F%E2%80%8F right-to-left mark–\u2013&#8211;&ndash;%u2013%E2%80%93en dash—\u2014&#8212;&mdash;%u2014%E2%80%94em dash‘\u2018&#8216;&lsquo;%u2018%E2%80%98left single quotation mark’\u2019&#8217;&rsquo;%u2019%E2%80%99right single quotation mark‚\u201A&#8218;&sbquo;%u201A%E2%80%9A single low-9 quotation mark“\u201C&#8220;&ldquo;%u201C%E2%80%9C left double quotation mark”\u201D&#8221;&rdquo;%u201D%E2%80%9D right double quotation mark…\u201E&#8222;&bdquo;%u201E%E2%80%9E double low-9 quotation mark†\u2020&#8224;&dagger;%u2020%E2%80%A0dagger‡\u2021&#8225;&Dagger;%u2021%E2%80%A1double dagger•\u2022&#8226;&bull;%u2022%E2%80%A2bullet = black small circle…\u2026&#8230;&hellip;%u2026%E2%80%A6horizontal ellipsis = three dot leader‰\u2030&#8240;&permil;%u2030%E2%80%B0per mille sign′\u2032&#8242;&prime;%u2032%E2%80%B2prime = minutes = feet″\u2033&#8243;&Prime;%u2033%E2%80%B3double prime = seconds = inches‹\u2039&#8249;&lsaquo;%u2039%E2%80%B9single left-pointing angle quotation mark›\u203A&#8250;&rsaquo;%u203A%E2%80%BA single right-pointing angle quotation mark›\u203A&#8250;&rsaquo;%u203A%E2%80%BA single right-pointing angle quotation mark‾\u203E&#8254;&oline;%u203E%E2%80%BE overline = spacing overscore⁄\u2044&#8260;&frasl;%u2044%E2%81%84fraction slash€\u20AC&#8364;&euro;%u20AC%E2%82%AC euro signℑ\u2111&#8465;&image;%u2111%E2%84%91blackletter capital I = imaginary partℓ\u2113&#8467;%u2113%E2%84%93script small L№\u2116&#8470;%u2116%E2%84%96numero sign℘\u2118&#8472;&weierp;%u2118%E2%84%98script capital P = power set = Weierstrass pℜ\u211C&#8476;&real;%u211C%E2%84%9C blackletter capital R = real part symbol™\u2122&#8482;&trade;%u2122%E2%84%A2trademark signℵ\u2135&#8501;&alefsym;%u2135%E2%84%B5alef symbol = first transfinite cardinal←\u2190&#8592;&larr;%u2190%E2%86%90leftwards arrow↑\u2191&#8593;&uarr;%u2191%E2%86%91upwards arrow→\u2192&#8594;&rarr;%u2192%E2%86%92rightwards arrow↓\u2193&#8595;&darr;%u2193%E2%86%93downwards arrow↔\u2194&#8596;&harr;%u2194%E2%86%94left right arrow↵\u21B5&#8629;&crarr;%u21B5%E2%86%B5downwards arrow with corner leftwards = carriage return ⇐\u21D0&#8656;&lArr;%u21D0%E2%87%90leftwards double arrow⇑\u21D1&#8657;&uArr;%u21D1%E2%87%91upwards double arrow⇒\u21D2&#8658;&rArr;%u21D2%E2%87%92rightwards double arrow⇓\u21D3&#8659;&dArr;%u21D3%E2%87%93downwards double arrow⇔\u21D4&#8660;&hArr;%u21D4%E2%87%94left right double arrow∀\u2200&#8704;&forall;%u2200%E2%88%80for all∂\u2202&#8706;&part;%u2202%E2%88%82partial differential∃\u2203&#8707;&exist;%u2203%E2%88%83there exists∅\u2205&#8709;&empty;%u2205%E2%88%85empty set = null set = diameter∇\u2207&#8711;&nabla;%u2207%E2%88%87nabla = backward difference∈\u2208&#8712;&isin;%u2208%E2%88%88element of∉\u2209&#8713;&notin;%u2209%E2%88%89not an element of∋\u220B&#8715;&ni;%u220B%E2%88%8B contains as member∏\u220F&#8719;&prod;%u220F%E2%88%8F n-ary product = product sign∑\u2211&#8721;&sum;%u2211%E2%88%91n-ary sumation−\u2212&#8722;&minus;%u2212%E2%88%92minus sign∗\u2217&#8727;&lowast;%u2217%E2%88%97asterisk operator√\u221A&#8730;&radic;%u221A%E2%88%9A square root = radical sign∝\u221D&#8733;&prop;%u221D%E2%88%9D proportional to∞\u221E&#8734;&infin;%u221E%E2%88%9E infinity∠\u2220&#8736;&ang;%u2220%E2%88%A0angle∧\u2227&#8743;&and;%u2227%E2%88%A7logical and = wedge∨\u2228&#8744;&or;%u2228%E2%88%A8logical or = vee∩\u2229&#8745;&cap;%u2229%E2%88%A9intersection = cap∪\u222A&#8746;&cup;%u222A%E2%88%AA union = cup∫\u222B&#8747;&int;%u222B%E2%88%AB integral∴\u2234&#8756;&there4;%u2234%E2%88%B4therefore∼\u223C&#8764;&sim;%u223C%E2%88%BC tilde operator = varies with = similar to≅\u2245&#8773;&cong;%u2245%E2%89%85approximately equal to≈\u2248&#8776;&asymp;%u2248%E2%89%88almost equal to = asymptotic to≠\u2260&#8800;&ne;%u2260%E2%89%A0not equal to≡\u2261&#8801;&equiv;%u2261%E2%89%A1identical to≤\u2264&#8804;&le;%u2264%E2%89%A4less-than or equal to≥\u2265&#8805;&ge;%u2265%E2%89%A5greater-than or equal to⊂\u2282&#8834;&sub;%u2282%E2%8A%82subset of⊃\u2283&#8835;&sup;%u2283%E2%8A%83superset of⊄\u2284&#8836;&nsub;%u2284%E2%8A%84not a subset of⊆\u2286&#8838;&sube;%u2286%E2%8A%86subset of or equal to⊇\u2287&#8839;&supe;%u2287%E2%8A%87superset of or equal to⊕\u2295&#8853;&oplus;%u2295%E2%8A%95circled plus = direct sum⊗\u2297&#8855;&otimes;%u2297%E2%8A%97circled times = vector product⊥\u22A5&#8869;&perp;%u22A5%E2%8A%A5up tack = orthogonal to = perpendicular⋅\u22C5&#8901;&sdot;%u22C5%E2%8B%85dot operator⌈\u2308&#8968;&lceil;%u2308%E2%8C%88left ceiling = apl upstile⌉\u2309&#8969;&rceil;%u2309%E2%8C%89right ceiling⌊\u230A&#8970;&lfloor;%u230A%E2%8C%8A left floor = apl downstile⌋\u230B&#8971;&rfloor;%u230B%E2%8C%8B right floor⟨\u2329&#9001;&lang;%u2329%E2%8C%A9left-pointing angle bracket = bra⟩\u232A&#9002;&rang;%u232A%E2%8C%AA right-pointing angle bracket = ket◊\u25CA&#9674;&loz;%u25CA%E2%97%8A lozenge♠\u2660&#9824;&spades;%u2660%E2%99%A0black spade suit♣\u2663&#9827;&clubs;%u2663%E2%99%A3black club suit = shamrock♥\u2665&#9829;&hearts;%u2665%E2%99%A5black heart suit = valentine♦\u2666&#9830;&diams;%u2666%E2%99%A6black diamond suit。

struts1和strtus2的区别

struts1和strtus2的区别

struts1和strtus2的区别1、Action类Struts 1的Action类扩展一个抽象基类。

在Struts 1是一个常见的问题抽象类而不是接口编程。

Struts 2的行动可能实现一个Action接口,连同其他接口,使可选和定制的服务。

Struts 2中提供了一个基础ActionSupport类实现常用的接口。

虽然,Action接口不是必需的。

任何的POJO对象与一个执行签名可以用作Struts 2的Action对象。

2、线程模型Struts 1的动作是单身,必须是线程安全的,因为只会有一个类的一个实例来处理所有的请求,该行动。

的单身战略名额限制什么可以做Struts 1的操作和发展,需要格外小心。

Action 资源必须是线程安全的或同步的。

在Struts 2 Action对象为每一个请求实例化,因此没有线程安全问题。

(在实践中,servlet 容器会产生许多被丢弃的对象,每个请求,以及一个新的对象并没有对性能上的损失或影响垃圾收集)。

3、Servlet的依赖Struts 1的操作的servlet API的依赖,因为HttpServletRequest和HttpServletResponse被传递给execute方法的调用时采取行动。

Struts 2的动作没有连接到容器中。

最经常使用的servlet上下文被表示为简单的地图,让行动单独测试。

Struts 2的动作仍然可以访问原始的请求和响应,如果需要的话。

然而,其他建筑元素减少或消除的,需要访问HttpServetRequest直接或HttpServletResponse的。

4、可测性测试Struts 1行动的主要障碍是execute方法暴露了Servlet API。

一个第三方扩展中,Struts TestCase中,提供了一组Struts 1的模拟对象。

Struts 2的动作可以测试通过实例的操作,设置属性和调用方法。

依赖注入的支持也使测试更简单。

OGNL表达式

OGNL表达式

OGNL表达式1.什么是OGNLOGNL:Object Graphic Navigation Language(对象图导航语⾔)它是Struts2中默认的表达式语⾔。

使⽤表达式需要借助Struts2的标签.OGNL与EL的区别:EL/JSTL 数学运算等等表达式: 都有⼀个明确的返回值,都只能取值。

OGNL表达式: 它不仅可以取值,还可以赋值(赋值操作只能由Struts来完成)OGNL表达式的写法: 属性.属性.属性的⽅式 <input type="text" name="er"/>OGNL表达式的基本使⽤:使⽤s:property标签输出内容访问普通⽅法访问静态⽅法访问静态属性操作集合(List AND Map)<title>Struts2OGNL表达式的基本使⽤</title></head><body><!-- a、使⽤s:property标签输出内容:要想输出内容到页⾯得使⽤Struts2的标签库value属性:把value取值所对应的内容输出到页⾯若想直接输出⽂本,则需要⽤引号引起来。

-->输出基本内容:<s:property value="'OGNLExpresession'"/><hr/><!-- b、访问普通⽅法 -->输出字符串的长度:<s:property value="'OGNLExpresession'.length()"/><br/>输出转⼤写字符:<s:property value="'OGNLExpresession'.toUpperCase()"/><br/>切割字符串:<s:property value="'OGNLExpresession'.split('L')"/><hr/><!-- c、访问静态属性语法:@类的全路径@静态字段-->输出整数的最⼤值:<s:property value="@ng.Integer@MAX_VALUE"/><hr/><!-- d、访问静态⽅法语法:@类的全路径@静态⽅法注意:使⽤静态⽅法时,需要在struts.xml中开启静态⽅法调⽤的开关。

Struts2标签库和OGNL

Struts2标签库和OGNL

第8章?第9章Struts2标签库和OGNL学习内容Struts 2标签库OGNL能力目标熟练使用Struts 2常用标签熟练使用OGNL本章简介前面我们编写的案例使用的都是HTML 标签,这些标签并不能很好的与Struts 2框架结合,Struts 2和Struts 1一样都自带了功能强大、成熟完善的标签库供我们使用,通过使用这些标签库可以大大提高开发效率和代码的可维护性。

其实Struts 2的标签库是建立在OGNL 基础上的,OGNL 是一种功能强大的表达式语言,通过简单的语法即可存取对象的属性、调用对象的方法、遍历等功能。

本章将学习OGNL 和Struts 2标签库,包括数据访问标签、控制标签、表单标签和非表单标签等。

核心技能部分9.1 OGNL9.1.1 ActionContextStruts 2中的ActionContext 、ValueStack 和StackContext 对象与OGNL 密切相关,理解这三个对象时学习OGNL 的前提。

在前面的学习中,我们已经在使用ActionContext 、ValueStack 和StackContext 对象了,这三个对象的作用及其之间的关系如图8.1.1所示。

图8.1.1ActionContext1. ActionContext 对象ActionContextValueStackStackContextAction 其他Session Request Application Parameters Attribute 其他ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文。

我们可以把上下文可以看作是一个容器,用于存放Action执行时需要使用的对象,例如请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)等。

黑盒法

黑盒法

黑盒法:该方法是把被测试对象看成一个黑盒子,测试人员完全不考虑程序内部结构和处理过程.只在软件的接口处进行测试,根据需求规格说明书.检查程序是否满足功能要求.因此黑盒测试有称为功能测试或数据驱动测试/白盒法:该方法是把测试对象看作一个打开的盒子,测试人员须了解程序的内部结构和处理过程,一检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致.Action 类:? Struts1要求Action类继承一个抽象基类。

Struts1的一个普遍问题是使用抽象类编程而不是接口。

? Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。

Struts2提供一个ActionSupport基类去实现常用的接口。

Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式:? Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。

单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。

Action资源必须是线程安全的或同步的。

? Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)Servlet 依赖:? Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和HttpServletResponse 被传递给execute方法。

? Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。

如果需要,Struts2 Action仍然可以访问初始的request和response。

STRUTS2标签中符号#,$,%的用法示例

STRUTS2标签中符号#,$,%的用法示例

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。

在这里笔者简单介绍它们的相应用途。

1.#符号的用途一般有三种。

1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。

实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttrib ute(”msg”) 。

2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。

2.%符号%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。

如下面的代码所示:构造Map<s:set name=”foobar” value=”#{’foo1′:’bar1′,‘foo2′:’bar2′}” /><p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p><p>不使用%:<s:url value=”#foobar['foo1']” /></p><p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>3.$符号$符号主要有两个方面的用途。

在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

aop el表达式

aop el表达式

aop el表达式AOP(面向切面编程)是一种面向对象编程的重要手段,常常用于实现系统的复杂业务逻辑和前置、后置处理。

而EL表达式(表达式语言)则是为了简化JSP页面中JSTL表达式以及Struts2框架中的OGNL表达式而生的一种简单而强大的表达式语言。

AOP和EL表达式都在现代开发中扮演着不可或缺的角色,通过了解AOP和EL表达式,我们可以更好地提高我们的开发效率,下面就为大家介绍一下关于AOP EL表达式的相关知识。

1. AOP概述AOP是一种不同于OOP的编程范式,它利用了OOP中的封装、继承、多态等特性,同时也强调了代码的切面性,这就是其名称“面向切面编程”的由来。

AOP的思想是,将系统中的一些特定行为(例如日志、事务、安全控制等)从具体业务逻辑中解耦出来,通过特殊的机制引入系统中去,从而达到增强系统可维护性和灵活性运作的目的,可以说AOP是OOP的一个有力补充和支持。

目前,JavaSpring框架就是一种基于AOP思想的设计,它利用AspectJ等机制来实现对代码切面的管理、控制和维护。

2. EL表达式概述EL表达式是表达式语言,它是为了简化JSP页面中JSTL表达式以及Struts2框架中的OGNL表达式而设计的,可以将JavaBean的属性通过特定的语法而在表达式中得以使用。

EL表达式非常简单易懂,例如${variable}就是一个EL表达式,它会将JavaBean中的“variable”属性表现到页面的文本内容中。

3. 合并AOP和EL表达式在JavaSpring框架中,我们可以在AOP的拦截器中通过EL表达式来引用特定的JavaBean的属性,从而实现更灵活、动态的系统设计和实现。

例如,我们可以在Spring配置文件中通过如下代码来定义一个基于EL表达式的前置通知:<aop:aspectj-autoproxy /><bean id="myAspect" class="example.MyAspect" /><aop:config><aop:aspect id="log" ref="myAspect"><aop:before method="before" pointcut="execution(*\*.do*(..))"arg-names="param1,param2"expression="#param1 eq'admin'and#param2 eq'123456'"></aop:before></aop:aspect></aop:config>这段代码的效果是,当执行do系列方法时,检查参数列表中的第1个和第2个参数是否分别为“admin”和“123456”,如果满足条件,则执行MyAspect类中定义的before()方法,均不满足则不执行before()方法。

jstl(jsp标签大全)

jstl(jsp标签大全)
JSTL
JSTL
JSTL: JSP 标 准 标 记 库 ( JSP Standard Tag Library,JSTL)是一个实现 Web 应用 程序中常见的通用功能的定制标记库集, 这些功能包括迭代和条件判断、数据管 理格式化、XML 操作以及数式标签库 sql标签库 xml标签库 函数标签库 c fmt sql xml fn <c:out> <fmt:format Date> <sql:query> <xml:forEach> <fn:split>
JSTL fmt
<fmt:formatNumber> 格式化数字 属性: value: 要格式化的值 type: 格式化的方式 (currency, number, percent) maxIntegerDigits: 最长的整数位 maxIntegerDigits: 最长的小数位 pattern: 格式化输出样式
JSTL core
<c:out>:主要用来显示内容 属性 value:需要显示的值 default:如果值为null,显示default的值 escapeXml:是否转换特殊符号
JSTL core
<c:set> :主要用来将值存储到jsp范围 中或javaBean中 属性 value:要储存的值 var:欲存入的容器名称 scope:var的范围 target:为javaBean或Map property:javaBean或Map的属性
JSTL core
<c:url>:用来产生一个url 属性: 与import基本相同
JSTL core
<c:redirect>:重定向 属性: url:导向的目标位址

Java在Java中执行动态表达式语句:前中后缀、Ognl、SpEL、Groovy、Jexl3

Java在Java中执行动态表达式语句:前中后缀、Ognl、SpEL、Groovy、Jexl3

Java在Java中执⾏动态表达式语句:前中后缀、Ognl、SpEL、Groovy、Jexl3在⼀些规则集或者⼯作流项⽬中,经常会遇到动态解析表达式并执⾏得出结果的功能。

规则引擎是⼀种嵌⼊在应⽤程序中的组件,它可以将业务规则从业务代码中剥离出来,使⽤预先定义好的语义规范来实现这些剥离出来的业务规则;规则引擎通过接受输⼊的数据,进⾏业务规则的评估,并做出业务决策。

⼯作流(Workflow),是对⼯作流程及其各操作步骤之间业务规则的抽象、概括描述。

⼯作流建模,即将⼯作流程中的⼯作如何前后组织在⼀起的逻辑和规则,在计算机中以恰当的模型表達并对其实施计算。

⼯作流要解决的主要问题是:为实现某个业务⽬标,利⽤计算机在多个参与者之间按某种预定规则⾃动传递⽂档、信息或者任务。

Table of Contents⽬录前缀、中缀、后缀表达式(逆波兰表达式)最早接触的表达式解析是在上数据结构的时候,当时课设作业是 “ 做⼀个简单的四则混合运算语句解析并计算结果 ”,简单说就是计算器。

中缀表达式将运算符写在两个操作数中间的表达式,称作中缀表达式。

中缀表达式是我们最熟悉和阅读最容易的表达式⽐如:12 + 34 + 5 * 6 - 30 / 5也就是我们常⽤的数学算式就是⽤中缀表达式表⽰的后缀表达式将运算符写在两个操作数之后的表达式称作后缀表达式。

12 34 + 5 6 * + 30 5 / -前缀表达式需要从左往右读,遇到⼀个运算法,则从左边取 2 个操作数进⾏运算从左到右读则可分为((12 34 + )(5 6 * )+ )(30 / 5) -括号只是辅助,实际上没有前缀表达式前缀表达式是将运算符写在两个操作数之前的表达式。

前缀表达式需要从右往左读,遇到⼀个运算法,则从右边取 2 个操作数进⾏运算12 + 34 + 5 * 6 - 30 / 5- + + 12 34 * 5 6 / 30 5中缀:12 + 34 + 5 * 6 - 30 / 5后缀:12 34 + 5 6 * + 30 5 / -前缀:- + + 12 34 * 5 6 / 30 5OGNLOGNL(Object-Graph Navigation Language的简称),对象图导航语⾔,它是⼀门表达式语⾔,除了⽤来设置和获取Java对象的属性之外,另外提供诸如集合的投影和过滤以及lambda表达式等。

联合永道java面试题

联合永道java面试题

设置超时:采用HTTPclient访问远程地址并提交数据的过程如下:1建立Socket连接2通过GET/POST方法提交数据3等待对方服务器应答,接收返回数据因此从上述过程看,超时会涉及1和3,也就是说超时的原因主要有二:一是建立网络连接慢,二是虽然成功建立连接但是对方页面处理过慢,返回数据超时。

而这两个过程是互不覆盖的。

因此,超时就得针对这两个过程设置:client.getHttpConnectionManager().getParams().setConnectionTimeout(30000);// 针对连接建立时间client.getHttpConnectionManager().getParams().setSoTimeout(3);// 针对页面返回数据时间Servlet对于servlet的认识,对于forward和redirect概念Servlet运行在servlet容器中,其生命周期由容器来管理。

他的生命周期通过servlet接口中的init()、service()、destory()方法1.从地址栏显示Forward:是容器控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个地址的URL的响应内容读取过来,发送给浏览器,浏览器不知道服务器发送的内容是从哪里来的,所以它的地址栏中还是原来的地址Redirect就是服务器根据逻辑啊,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,并且可以看到跳转后的链接地址。

Forward更加高效,并且有助于隐藏实际链接2.从数据共享来说forward:转发页面和转发到的页面可以共享request里面的数据.redirect:不能共享数据.jsp和servlet的区别jsp是servlet技术的扩展,本质上是servlet的简易方式,更强调应用的外表表达。

Jsp编译后就是“类servlet”。

Ognl表达式基本原理和使用方法

Ognl表达式基本原理和使用方法

Ognl表达式基本原理和使⽤⽅法Ognl表达式基本原理和使⽤⽅法1.Ognl表达式语⾔1.1.概述OGNL表达式OGNL是Object Graphic Navigation Language(对象图导航语⾔)的缩写,他是⼀个开源项⽬。

Struts框架使⽤OGNL作为默认的表达式语⾔。

OGNL优势⽀持对象⽅法调⽤,如:×××.doSomeSpecial();⽀持类静态的⽅法调⽤和值访问,表达式的格式@[类全名(包括包路径)]@[⽅法名 | 值名],例如:@ng.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;⽀持赋值操作和表达式串联,如price=100, discount=0.8,calculatePrice(),这个表达式会返回80;访问OGNL上下⽂(OGNL context)和ActionContext;操作(创建)集合对象。

总结:OGNL 有⼀个上下⽂(Context)概念,说⽩了上下⽂就是⼀个MAP结构,它实现了java.utils.Map 的接⼝。

Struts框架默认就⽀持Ognl表达式语⾔。

(从struts项⽬必须引⼊ognl.jar包可以看出)Ognl表达式语⾔的作⽤:jsp页⾯取值⽤EL表达式语⾔,也⽤于页⾯取值,是jsp页⾯取值的标准(默认就可以使⽤)Ognl表达式语⾔,Struts标签默认⽀持的表达式语⾔,必须配置Struts标签⽤,不能离开Struts标签直接使⽤,就是说Ognl必须在Struts 中使⽤对⽐来看,EL使⽤范围更⼴,项⽬中不限制使⽤哪⼀种,哪⼀种熟悉就使⽤哪⼀种1.2.OgnlContext对象(了解)OgnlContext对象是ognl表达式语⾔的核⼼。

但是项⽬中不会要求写OgnlContext的代码,Ognl标签其实是调⽤了OgnlContext对象。

struts2标签详解

struts2标签详解

Struts2 标签详解详细的说明了struts2所有标签由整理版权属 以及原作者。

由于标签太多难做目录索引,如果你觉得有目录索引更好,请到/p/myjdemo/downloads/list 下载CHM版本的Struts2标签详解,谢谢。

aa标签创建一个HTML超链接,等价于HTML 的<a href=""....示范代码:<s:a href="login.action">登陆</s:a>action使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。

如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。

action标签的属性:id:可选属性,该属性将会作为该Action的引用IDname:必填属性,指定该标签调用哪个Actionnamespace:可选,指定该标签调用的Action所在的namespace. executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。

默认是false,即不包含ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。

下面是本示例应用中的Action类,包含连个处理逻辑。

代码如下public class TagAction extednds ActionSupport{//封装用户请求参数的author属性private String author;//author的get和set的方法,省略……public String execute() throws Exception{return "done";}public String login() throws Exception{ServletActionContext.getRequest().setAttribute("author",getAuthor()); return "done";}}上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。

struts2常用标签详解

struts2常用标签详解

struts2标签详解A:<s:a xhref=""></s:a>-----超链接,类似于html里的<a></a><s:action name=""></s:action>-----执行一个view里面的一个action<s:actionerror/>-----如果action的errors有值那么显示出来<s:actionmessage/>-----如果action的message有值那么显示出来<s:append></s:append>-----添加一个值到list,类似于list.add();<s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,这个是ajaxB:<s:bean name=""></s:bean>-----类似于struts1.x中的,JavaBean的值C:<s:checkbox></s:checkbox>-----复选框<s:checkboxlist list=""></s:checkboxlist>-----多选框<s:combobox list=""></s:combobox>-----下拉框<s:component></s:component>-----图像符号D:<s:date/>-----获取日期格式<s:datetimepicker></s:datetimepicker>-----日期输入框<s:debug></s:debug>-----显示错误信息<s:div></s:div>-----表示一个块,类似于html的<div></div><s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----双下拉框E:<s:if test="#name=‟hujianqiang‟">asdfasdf</s:if><s:elseif test=""></s:elseif><s:else></s:else>-----这3个标签一起使用,表示条件判断F:<s:fielderror></s:fielderror>-----显示文件错误信息<s:file></s:file>-----文件上传<s:form action=""></s:form>-----获取相应form的值G:<s:generator separator="" val=""></s:generator>----和<s:iterator>标签一起使用H:<s:head/>-----在<head></head>里使用,表示头文件结束<s:hidden></s:hidden>-----隐藏值I:<s:i18n name=""></s:i18n>-----加载资源包到值堆栈<s:include value=""></s:include>-----包含一个输出,servlet或jsp页面<s:inputtransferselect list=""></s:inputtransferselect>-----获取form的一个输入<s:iterator></s:iterator>-----用于遍历集合L:<s:label></s:label>-----只读的标签M:<s:merge></s:merge>-----合并遍历集合出来的值O:<s:optgroup></s:optgroup>-----获取标签组<s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右选择框P:<s:param></s:param>-----为其他标签提供参数<s:password></s:password>-----密码输入框<s:property/>-----得到'value'的属性<s:push value=""></s:push>-----value的值push到栈中,从而使property标签的能够获取value的属性R:<s:radio list=""></s:radio>-----单选按钮<s:reset></s:reset>-----重置按钮S:<s:select list=""></s:select>-----单选框<s:set name=""></s:set>-----赋予变量一个特定范围内的值<s:sort comparator=""></s:sort>-----通过属性给list分类<s:submit></s:submit>-----提交按钮<s:subset></s:subset>-----为遍历集合输出子集T:<s:tabbedPanel id=""></s:tabbedPanel>-----表格框<s:table></s:table>-----表格<s:text name=""></s:text>-----I18n文本信息<s:textarea></s:textarea>-----文本域输入框<s:textfield></s:textfield>-----文本输入框<s:token></s:token>-----拦截器<s:tree></s:tree>-----树<s:treenode label=""></s:treenode>-----树的结构U:<s:updownselect list=""></s:updownselect>-----多选择框<s:url></s:url>-----创建urlStruts2常用的Ajax标签Struts2为了简化Ajax过程,提供了一些常用的Ajax标签,对于一些更复杂的Ajax通信过程,我们可以使用JSON插件来实现。

JSTL常用标签总结

JSTL常用标签总结

JSTL常用标签汇总JSTL的核心标签库主要包括:表达式操作、流程控制、迭代操作和URL 操作。

以下是JSTL常用标签的用法总结:一、表达式操作1.<c:out>作用:用于显示数据的内容。

语法1:没有本体内容<c:out value="value" [escapeXml="{true|false}"][default="defaultValue"] />语法2:有本体内容<c:out value="value" [escapeXml="{true|false}"]>default value</c:out>属性说明:value:需要显示出来的值。

default:如果value的值为null时,则显示default指定的值。

escapeXml:是否转换特殊字符,默认为true。

即默认会将<、>、’、” 和 & 转换为 &lt;、&gt;、&#039;、&#034和&amp。

如果设为 false,则不进行转换。

2.<c:set>作用:用于将变量的值存储在JSP范围中或JavaBean的属性中。

语法1:将value的值存储在范围为scope的varName变量中<c:set value="value" var="varName" [scope="{page|request|session|application}"] />语法2:将本体内容的数据存储在范围为scope的varName变量中<c:set var="varName" [scope="{page|request|session|application}"] >...本体内容</c:set>语法3:将value的值存储在target对象的propertyName属性中<c:set value="value" target="target" property="propertyName" />语法4:将本体内容的数据存储在target对象的propertyName属性中 <c:set target="target" property="propertyName">...本体内容</c:set>属性说明:value:要被存储的值。

s1与s2区别

s1与s2区别

s1与s2区别struts1和struts2的区别struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势。

1.action类struts1要求继承一个抽象的基类(MappingDispatchAction),而且是使用抽象类编程不是接口struts2 action类可以实现action接口但是不是必须的,任何有execute标识的POJO对象都可以用作struts2的action对象2. 线程模式struts1 action是一个单例模式并且必须是线程安全的,单例策略限制了struts1 action的行为,action资源必须是线程安全的或者是同步的.struts2 action对象为每一个请求产生一个实例,因此没有线程安全的问题.3.servlet依赖struts1 action 严重依赖于servlet的API(应用程序接口),调用action被调用时httpservletrequest和httpservletresponse被传递给execute方法strurs2 action不依赖于容器,action可以单独被测试,同时如果需要httpservletrequest和httpservletresponse也可以从ServletActionContext类用对应的get方法获取4.可测试性struts1 execute方法使用了servlet API很难测试虽然可以借助struts Testcase提供对象来测试但是也很麻烦struts2 Struts2只要实现了一个public String execute()就可以了,这样Action就可以实现脱离Servlet 测试.5.接受输入struts1使用actionForm对象来接受输入。

所有的actionform都必须继承该基类。

因为他javaBean不能当做作actionform,导致开发者经常创建多余的类来捕获输入。

jstl标签

jstl标签

jstl标签JSP标签1.jsp便签的作⽤ jsp标签作⽤:替换jsp脚本 1)流程判断(if for循环) 2)跳转页⾯(转发,重定向) 3)…………2.jsp标签分类 1)内置标(动作标签):不需要在jsp页⾯导⼊标签 2)jstl便签:需要在jsp页⾯中导⼊标签 3)⾃定义标签:开发者⾃⾏定义,需要在jsp页⾯中导⼊标签3.动作标签 转发标签:<jsp:forward> 包含标签:<jsp:include> 参数标签:<jsp:param> 原理:包含与被包含的页⾯先各⾃翻译成java源⽂件,然后再运⾏时合并在⼀起。

静态包含 vs 动态包含的区别 1)语法不同 静态包含语法:<%@incle file="被包含的页⾯"%> 动态包含语法:<jsp:include page="被包含的页⾯"> 2)参数传递不同 静态包含不能向被包含页⾯传递参数 动态包含可以向被包含页⾯传递参数 3)原理不同 静态包含:先合并在翻译 动态包含:先翻译在合并JSTL1.概念javaServer Pages Tag Library JSP标准标签库 是由Apache组织提供的开源的免费的jsp标签 核⼼标签库(c标签)(⽤的多) 国际化标签(fmt标签库) EL函数库(fn函数库) xml标签库(x标签库) sql标签库(SQL标签库)2.作⽤:⽤于简化和替换jsp页⾯上的java代码3.使⽤步骤: 1.导⼊jstl相关的jar架包 因为是web项⽬,遵守规范,要在WEB-INF⽬录下创建lib⽬录,然后右键lib⽬录选择Add as Libary… -->>Module Libay(重点) 2.引⼊标签库:taglib指令: <%@ taglib prefix="c" uri="/jsp/jstl/core"%> 3.使⽤便签 4.核⼼便签库的常⽤标签 单条件判断 <c:if test=""></c:if> 多条件判断 <c:choose> <c:when test=""></c:when> <c:otherwise></c:otherwise> </c:choose> 循环数据 <c:forEach begin=" " end=" " step=" " var=" " items=" " varStatus=" " ></c:forEach> 重定向 <c:redirect url=" " ><c:redirect> JavaBean1.JavaBean是⼀种开发规范,也可以说是⼀种技术。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可以使用 ${erid}来取得名称为userid
pageContext
pageContext取得其他有关用户要求或页面的详细信息。
${pageContext.request.queryString} 取得请求的参数字符串
${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
三、EL运算符
1.算术运算符有五个:+、-、*或$、/或div、%或mod
*
</c:if>
判定条件一般为一个EL表达式。
<c:if>并没有提供else子句,使用的时候可能有些不便,此时我们可以通过<c:choose>
tag来达到类似的目的:
<c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
<s:property value="#erId"/><br>
${erId}<br>
${erId}<br>
基本语法
一、EL简介
1.语法结构
${expression}
其中的表达式可以是一个常量(如上),也可以是一个具体的表达语句(如forEach循环体中
的情况)。典型案例如下:
? ${ername}
这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引
用对象的属性,也可以用“[]”引用对象属性,如${logininfo[username]}
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
request.getParameterValues(String name)
在EL中则可以使用param和paramValues两者来取得数据。
${}
${}
3.其他隐含对象
cookie
JSTL并没有提供设定cookie的动作,
置到HttpServletRequest 对象中返回(具体实现可参见Spring 源码中
org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributes方法的实现代码),也就是说Spring
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
在EL中则使用下列方法
${ername}
2.与输入有关的隐含对象
与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。
例如我们要取得用户的请求参数时,可以利用下列方法:
request.getParameter(String name)
OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例
取Session中的值
<c:out value="${erId}"></c:out><br>
<c:out value="${erLoginName}"></c:out><br>
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
session.getAttribute("username") 取得username的值,
${ername}
${ername}
${ername}
在Spring 中,所有逻辑处理单元返回的结果数据,都将作为Attribute 被放
(LoginInfo)session.getAttribute(“logininfo”);
String username = logininfo.getUsername();
可以看到,EL大大节省了编码量。
这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,对于
${ername}这样的表达式而言,首先会从当前页面中寻找之前是
${er[data]}中data 是一个变量
3.变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
${pageContext.request.contextPath} 服务的web application 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
……
</c:forEach>
OUT:
<c:out value="${ername}"/>
c:out>将value 中的内容输出到当前位置,这里也就是把logininfo 对象的
username属性值输出到页面当前位置。
${……}是JSP2.0 中的Expression Language(EL)的语法。它定义了一个表达式,
2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.逻辑运算符有三个:&&或and、||或or、!或not
4.其它运算符有三个:Empty运算符、条件运算符、()运算符
例:${empty }、${A?B:C}、${A*(B+C)}
另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。
initParam
initParam取得设定web站点的环境参数(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
四、EL函数(functions)。
语法:ns:function( arg1, arg2, arg3 …. argN)
其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置
---------------------------------------------
补充:
2.[]与.运算符
EL 提供.和[]两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。例如:
${user.My-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:
!
</c:otherwise>
</c:choose>
类似Java 中的switch 语句,<c:choose>提供了复杂判定条件下的简化处理手法。其
中<c:when>子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,
而偶数行时输出“!”。
---------------------------------------------
MVC 中,结果数据对象默认都是requestScope。因此,在Spring MVC 中,
以下寻址方法应慎用:
${ername}
${ername}
? ${1+2}
结果为表达式计算结果,即整数值3。
否定义了变量logininfo,如果没有找到则依次到Request、Session、
ApplicaБайду номын сангаасion 范围内寻找,直到找到为止。如果直到最后依然没有找到匹配的
变量,则返回null.
如果我们需要指定变量的寻找范围,可以在EL表达式中指定搜寻范围:
${ername}
再补充:
1 EL表达式用${}表示,可用在所有的HTML和JSP标签中 作用是代替JSP页面中复杂的JAVA代码.
2 EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话范围内的变量.applicationScope表示应用范围的变量.
相关文档
最新文档