一、EL表达式: Expression Language提供了在 JSP 脚本编制元素范围外(例如:脚本标签)使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算
1)语法结构
${expression}
2)[]与.运算符
EL 提供.和[]两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。
例如:${user.My-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用[]来做,而.无法做到动态取值。
例如:${sessionScope.user[data]}中data 是一个变量
3)变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为 username的变量。
它会依序从Page、Request、Session、Application范围查找(范围从小到大)。
如果找到则停止,并且不显示null,而是不显示值,这也是el表达式的优点,同时也是使用EL表达式取值进行判断时应该注意的
例如:在js中使用s标签并配合EL表达式取值做判断
var username = ${username};
<s:if test="username ==null">这样的判断是错误的,因为EL表达式如果去不出值,是不会显示null的
正确的方式为:<s:if test='username ==""'>(注意单引号和双引号的使用)或者:<s:if test="${username ==null}">
属性范围在EL中的名称 使用方式: 相当于:
Page PageScope ${ pageScope.page_name }
Request RequestScope ${ requestScope.request_name } <%=request.getAttribute("request_name");%>
Session SessionScope ${ sessionScope.session_name } <%=session.getAttribute("session_name");%>
Application ApplicationScope ${ applicationScope.application_name } <%=application.getAttribute("application_name");%>
二、有效表达式
有效表达式可以包含文字、操作符、变量(对象引用)和函数调用。
1)文字:
文字文字的值
Boolean true 和 false 例如:${true}
Integer 与 Java 类似。可以包含任何正数或负数,例如 24、-45、567 例如:${23+45}
Floating Point 与 Java 类似。可以包含任何正的或负的浮点数,例如 -1.8E-45、4.567
String 任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠,使用反斜杠字符作为转义序列。
必须注意,如果在字符串两端使用双引号,则单引号不需要转义。
Null null
2)操作符
JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:
术语定义
算术型 +、-(二元)、*、/、div、%、mod、-(一元)
逻辑型 and、&&、or、||、!、not
关系型 ==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
空空操作符是前缀操作,可用于确定值是否为空。例如:${empty user.username} ${not empty user.username}
条件型 A ?B :C。根据 A 赋值的结果来赋值 B 或 C。
3)隐式对象
最常用的隐式对象有${param}和${paramValues}.
param 将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。
getParameter (String) 方法返回带有特定名称的参数。表达式 $(param . name) 相当于 < %=request. getParameter(“username”)% >
例如在一个页面地址栏里面传的参数可以在另一个页面中通过这样的方式取出
paramValues 将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。
它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name) 相当于 request.getParamterValues(name)。
header 储存用户浏览器和服务端用来沟通的数据(通过调用 ServletRequest.getHeader(String name) 获得)。
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。表达式 ${header. name} 相当于 request.getHeader(name)。
headerValues 有可能同一标头名称拥有不同的值(通过调用 ServletRequest.getHeaders(String) 获得)。
它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
cookie 将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。
表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值。
如果请求包含多个同名的 cookie,则应该使用 ${headerValues. name} 表达式。
initParam 将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。
表达式${initParam.userid}相当于application.getInitParameter("userid");
pageContext取得其他有关用户要求或页面的详细信息。
${pageContext.request.queryString} 取得请求的参数字符串 相当于<%=request.getQueryString()%>
${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串 <%=request.getRequestURL()%>
${pageContext.request.contextPath} 服务的web application 的名称 相当于<%=request.getContextPath()%>
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
另外:上面提到的pageScope、requestScope、sessionScope 和 applicationScope也都是EL的隐式对象
例如:<%=user.getAddr( ) %> 等价于 ${user.addr} (user为一个变量,在action或者severlet中存放于指定的作用域中,addr为user的属性)
三、特别强调
1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。
例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
2、注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。
四、JSTL(C)标签:
由于EL表达式不能循环取出集合对象的值,所以可以通过使用jstl标签中的方法解决这个循环取出集合对象的问题
jstl是建立在el表达式基础上的语言,属于jsp外部的一个标准标签,库导入标签格式为:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSTL部分介绍:
1、 <c:out value="${属性名}"></c:out>:输出标签
2、迭代标签
语法:<c:forEach items="userList" var="user" varStatus=“status” begin=“int“ end=”int” step=“int” >
//循环体
<c:out value="${status.index}"></c:out>
<c:out value="${status.count}"></c:out>
<c:out value="${ user.name }"></c:out>
<c:out value="${ user.age }"></c:out>
</c:forEach>
说明:1)items:是集合,用EL表达式;
2)var:变量名,存放items ,代表集合中每一条数据
3)varStatus: 显示循环状态的变量,有一下几个属性:
①index:从0开始; 显示当前迭代的索引值
②count:元素位置,从1开始; 显示当前迭代显示的行位置,通过配合判断语句,实现给奇、偶行着不同的色,以进行分区
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
4)begin:循环的初始值(整型);
5)end: 循环结束 ;
6)step:步长,循环间隔的数值;
3、 <c:if test="判断语句"></c:if>:若果满足test中的条件,则执行<c:if></if>标签对之间的的语句,相当于if....的结构功能
4、<c:choose>:由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用<c:choose>
结构形式:
<c:choose>
<c:when test="判断语句1">执行语句1</c:when>
<c:when test="判断语句2">执行语句1</c:when>
..........
<c:otherwise>前面都不符合,执行此默认语句
</c:otherwise>
</c:choose>:用于选择标签对之间满足条件的语句,相当于switch语句
5、、<c:redirect>标签
说明:标签将请求重新定向到另外一个页面,它有以下属性
例子: <c:redirect url="http://www.baidu.com/login.jsp"/>
将请求重新定向到http://www.baiddu.com/login.jsp页,相当于response.setRedirect ("http://www.yourname.com/login.jsp");
6、<c:param>标签
说明:<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性
例子: <c:redirect url="http://www.baidu.com/login.jsp">
<c:param name="paramName" value="paramValue"/>
</c:redirect>
这个就在地址栏里面显示的形式为:http://www.baidu.com/login.jsp?paramName=paramValue
五、<fmt:>格式化标签,并显示
说明:需要导入 <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>
1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>
Value:通过EL表达式或<%new Date() %> 取的日期值;
Pattern:输出的日期格式;诉讼
例如:
<fmt:formatDate value="${date }" pattern="yyyy-MM-dd"/>
<fmt:formatDate value="${date }" pattern="yyyy年MM月dd日"/>
2) 格式化数字<fmt:formatNumber value="${number}" pattern="###,###.##" />
用过struts1.x的人都知道,标签库有html、bean、logic、tiles,而struts2.0里的标签却没有分类,只用在jsp头文件加上
<%@ taglib prefix="s" uri="/struts-tags" %>
就能使用struts2.0的标签库,JSTL中有部分在Struts2中得到完善和增强,以下列出Struts2常见的标签以作备忘(有错请指正):
A:
<s:a href=""></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>标签的内容,这个是ajax
B:
<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=""></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>-----创建ur
相关推荐
### JSTL与Struts标签库详解 #### JSTL(JavaServer Pages Standard Tag Library)简介 JSTL,即JavaServer Pages Standard Tag Library(JavaServer Pages标准标签库),是为简化JavaServer Pages (JSP) 页面开发...
jstl和struts2标签截取字符串 从给定的文件信息中,我们可以看到,jstl和struts2标签都是用于截取字符串的。下面我们将对这两个标签进行详细的介绍和分析。 jstl标签 jstl标签是一种基于Java的标签库,它提供了...
Struts标签和JSTL(JavaServer Pages Standard Tag Library)标签是Java Web开发中的两种重要组件,...深入研究“Struts标签参考.CHM”和“jstl-1_1-mr2-spec.pdf”这两个文档,将有助于你更好地理解和运用这些技术。
**与 JSTL 的区别**: OGNL 是 Struts2 的一部分,主要用于对象图导航,而 JSTL 是一组标准标签库,用于控制流和数据操作。 #### 四、Struts 标签 **定义**: Struts 标签是 Struts 框架提供的用于简化 JSP 页面开发...
### 从JSTL和STRUTS的TLD文件到自定义EL函数 #### TLD文件简介 在Java Web开发中,特别是在使用JSP技术时,我们经常需要使用到一些预定义好的标签库来简化页面的开发过程。JSTL(JavaServer Pages Standard Tag ...
这只是Struts2标签库的一小部分,实际上还有更多标签,如动作标签(`s:action`)、标签选择器(`s:ifequals`、`s:switch`等)以及与国际化相关的标签。Struts2的这些标签极大地提高了开发效率,让开发者可以专注于...
struts jstl el表达式示例代码 struts jstl el 表达式 源码
下面将详细解析如何在项目中混用JSTL、EL与Struts框架,以及相关的配置和注意事项。 ### JSTL(JavaServer Pages Standard Tag Library) JSTL是一种标准的标签库,它提供了许多预定义的标签,简化了JSP页面中的...
1. **Struts1.2基础**:理解MVC模式,学习Action和Form Bean的概念,配置struts-config.xml文件,使用Struts提供的各种标签(如<s:form>、<s:textfield>)。 2. **JSTL应用**:掌握JSTL的各个标签库,学会如何在JSP...
Struts标签库与JSTL(JavaServer Pages Standard Tag Library)是Java Web开发中的两个重要组件,它们极大地简化了HTML页面的编码工作,提升了代码的可读性和维护性。这两个库,尤其是jstl.jar和standard.jar,是...
Struts2是其后续版本,引入了更多先进的特性,例如拦截器(Interceptors)和OGNL(Object-Graph Navigation Language)表达式语言,但在此实例中,我们讨论的是较早的Struts1版本。 JSTL(JavaServer Pages ...
Struts2标签集合是Struts2框架中的一大特色,它提供了丰富的标签库,极大地简化了JSP页面中的Java代码,使页面逻辑与表现层更加分离,提升了开发效率和可维护性。Struts2的标签库与框架的其他部分紧密集成,能够方便...
### 使用JSP标准标签库(JSTL)与Struts框架 #### JSTL与Struts结合的关键知识点 **一、JSTL简介** JSP Standard Tag Library (JSTL)是JavaServer Pages (JSP)的一个扩展,它提供了一系列预定义的标签,用于简化...
1. **标签库**:Struts2提供了丰富的标签库,简化了视图层的开发,如s:form、s:textfield、s:submit等,与JSP EL和JSTL等配合使用,提高了开发效率。 2. **表单标签**:s:form用于创建HTML表单,s:textfield、s:...
4. **设计JSP页面**:在视图层使用Struts的标签和JSTL的标签共同构建动态页面,如使用`<s:form>`和`<s:submit>`处理表单,用JSTL标签处理逻辑和数据展示。 **总结** Struts与JSTL的结合,使得Java Web开发更加高效...
使用JSTL EL表达式语言和Struts框架结合,开发者可以创建更清晰、更模块化的JSP页面,同时利用Struts的控制层优势,实现业务逻辑和表现层的分离,提高应用的可扩展性和可维护性。在实际开发中,JSTL EL可以用于显示...
5、本系统采用到的技术:JSP+Struts+JSTL+EL,我本人喜欢JSTL+EL的组合方式,他不景向页面美观! 6、mysql.sql这个文件是mysql的脚本文件,您可以用它来创建数据库! <!DOCTYPE ...
2. **I/O 标签库 (JSTL IO)** - `<fmt:bundle>` 和 `<fmt:message>`:处理国际化和本地化。 - `<fn:escapeXml>` 和 `<fn:replace>`:字符串操作函数,如转义 XML 字符和替换子串。 3. **XML 标签库 (XML Tags)** ...
- Struts2标签库提供了丰富的标签用于简化页面开发,这些标签支持使用EL表达式来访问应用中的数据。因此,选项B是正确的。至于其他选项: - A. 导入struts标签库的正确代码应该是`<%@ taglib uri="/struts-tags" ...