您的位置:首页 > Web前端 > JavaScript

JSP第三章知识点总结——JSTL EL

2013-01-22 10:39 441 查看
JSP第三章知识点总结——JSTL EL
 

知识点预览

一.使用JSP EL

二.EL运算符

三.标准标记库JSTL    

四  EL示例

五 JSTL示例

一 使用JSP EL

 

a)         <jsp:getProperty>的property属性只能访问Bean的属性,而不能访问嵌套的属性

b)        使用JSP EL(即表达式语言Expression Language)Web应用上的过滤器

 

<%@ page contentType="text/html; charset=gb2312" %>

<html>

<body>

我的狗的名字是:${person.dog.name}

</body>

</html>

 

c)         EL表达式和JSP脚本表达式

 

EL表达式总是放在大括号里,而且前面有一个美元符前缀   ${person.name}

与JSP脚本表达式比较:

外温度是 <%= temp %>度。

如果使用EL,则是:

室外温度是${temp}度。

d)        在EL表达式中使用隐式变量

 



二 EL运算符

 

a)         EL运算符可以分为四类

i.          属性和集合访问运算符

ii.        算术运算符

iii.      关系运算符

iv.       逻辑运算符

b)        访问属性和集合的EL运算符:

访问属性和集合的EL运算符:

a.b:返回a的属性b的值。

a[b]:返回a的键或索引为b的值。

 

三 标准标记库JSTL 

 



 
需要两个JAR文件。第一个文件是jstl.jar,它为JSTL标记库提供API类。第二个文件是standard.jar,它提供了标记库的实现类。复制到WEB-INF目录下的lib子目录下。

通过<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”
%>引入到JSP

 

a)         JSTL通用标记

i.          不使用JSP脚本执行Java程序成为可能

        <c:out value="${number}" />

b)        支持变量

 

<c:set var="num" value="${4*4}" />
<c:set var="num">
${8*2}
</c:set>
<c:set var="num">
<c:out value="${8+8}" />
</c:set>

设置对象属性
<c:set target="customer1" property="zipcode">
55501
</c:set>
或者
<c:set target="customer1" property="zipcode" value="55501">


 

 

c)         JSTL流程控制

 

i.          JSTL条件处理

 

<c:if test="${x == '9'}">

${x}

</c:if>

<c:choose>

<c:when test="${color == 'white'}">

Light!

</c:when>

<c:when test="${color == 'black'}">

Dark!

</c:when>

<c:otherwise>

Colors!

</c:otherwise>

</c:choose>


 

d)        循环

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html><body>

<c:forEach var="x" begin="0" end="30" step="3">

${x}

</c:forEach>

</body></html>

循环赋值

<c:forEach var="num" items="${numArray}">

<c:set var="num" value="100" />

</c:forEach>


 

四 EL示例

 

<%@page import="com.test.entity.Address"%>
<%@page import="com.test.entity.Product"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'el.jsp' starting page</title>

</head>

<body>
<%! int var = 100; %>

<% out.println(var); %>
<%=var %>
<%
request.setAttribute("name", "Wentasy");
session.setAttribute("var", var);
%>
EL: ${sessionScope.var}
${requestScope.name}

<%
Product product = new Product();
product.setName("小白");
product.setPrice(123.4f);

Address addr2 = new Address();
addr2.setName("成都");

product.setAddr(addr2);

request.setAttribute("product", product);

session.setAttribute("product", product);
//session.setAttribute("login", "aaa");
List<Product> lists = new ArrayList<Product>();
for(int i = 1; i <= 10; i++) {
Product  p = new Product();
p.setId(i);
p.setName("p" + i);
p.setPrice(i);
lists.add(p);

Address addr = new Address();
addr.setName("addr" + i);
p.setAddr(addr);
}

session.setAttribute("lists", lists);
%>

<h4>EL(Expression Language) test</h4>
<ol>
<li>\${var}试图获得当前页面里的变量var的值,EL不支持直接取变量的写法:${var},<%=var%></li>
<li>\${requestScope.product}获得存放在request里的product:${requestScope.product}</li>
<li>\${sessionScope.product}获得存放在session里的product:${sessionScope.product}</li>

<!-- request里的 当有application、session和request都有,默认选择最小范围的 -->
<li>\${product.name}获得存放在里的product的name:${product.name}</li>

<li>\${sessionScope.product.name}获得存放在session里的product的name属性:${sessionScope.product.name}</li>
<li>\${sessionScope.product.addr.name}获得对应的商品产地:${sessionScope.product.addr.name}

<li>\${requestScope.product.addr.name}获得对应的商品产地:${requestScope.product.addr.name}

<li>\${param.name}获得从查询字符串里提交的参数name的值:${param.name}</li>
<li>\${paramValues}获得从查询字符串里提交的参数paramValues的值:${paramValues}</li>
<li>\${paramValues.name}获得从查询字符串里提交的参数name的值:${paramValues.name}</li>
<li>\${paramValues.name[0]}获得从查询字符串里提交的参数name的值:${paramValues.name[0]}</li>
<li>\${header.accept}获得请求头里的accept属性值 : ${header.accept}</li>
<li>\${sessionScope.login}获得存放在session里login的值: ${sessionScope.login}</li>
<li>\${1+1}: ${1+1}</li>
<li>\${1>2}: ${1>2}</li>
<li>\${1>2 || 2>1}: ${1>2 || 2>1}</li>
<li>\${requestScope.product.price * 2}: ${requestScope.product.price * 2}</li>
</ol>

<%
for(Product p : (List<Product>)session.getAttribute("lists")) {
out.println(p.getName());
}
%>

<h4>JSTL</h4>

<%
Object test = "你好";//Java源代码
//EL 表达式取值不考虑数据类型
%>

<!-- http://localhost:8088/web_0803_tag_el_jstl/el.jsp?age= -->
<!-- ${param.age > 18} 查询字符串或者表单提交的数据-->
<ul>
<li>c:set , <c:set var="test" value="你好"></c:set>${test}</li>
<li>c:set , <c:set var="age" value="19"></c:set>${age}</li>
<li>c:out , <c:out value="${test}"></c:out></li>
<li>c:out , <c:out value="${param.age}"></c:out></li>
<li>c:if  , <c:if test="${param.age > 18 && param.age < 40}">
young!!!
</c:if>
<c:if test="${param.age < 16}">
NoYoung!!!
</c:if>
<c:if test=""></c:if>

</li>
<li>
<c:choose>
<c:when test="${param.age < 18}">
age < 18
</c:when>
<c:when test="${param.age > 18 &&  param.age < 40}">
when age > 18 and age < 40
</c:when>
<c:otherwise>
otherwise
</c:otherwise>
</c:choose>
</li>

<%
//Java源代码
for(int x = 1; x <= 10; ++x){
out.println(x);
}
%>

<li>
c:forEach
<c:forEach begin="1" end="10" step="1" var="x">
${x},
</c:forEach>
</li>

<li>
c:forEach
<c:forEach begin="1" end="10" step="1" var="x" varStatus="s">
<c:if test="${s.last}">
${x}
</c:if>
<c:if test="${!s.last}">
${x},
</c:if>
</c:forEach>
</li>

<li>
c:forEach
<c:forEach begin="1" end="10" step="1" var="x" varStatus="s">
${x}
<c:if test="${!s.last}">
,
</c:if>
</c:forEach>
</li>
</ul>
<!-- 默认提交到本页 -->
<form action="" method="post">
<input type="checkbox" name="hobby" value="Reading">阅读<br/>
<input type="checkbox" name="hobby" value="Sporting">运动<br/>
<input type="checkbox" name="hobby" value="Drinking">喝酒<br/>
<input type="checkbox" name="hobby" value="Music">音乐<br/>
<input type="submit" value="提交">
</form>

<p>
通过EL表达式获得的参数:${paramValues.hobby[0]} ${paramValues.hobby[1]} ${paramValues.hobby[2]} ${paramValues.hobby[3]}
</p>

<p>
通过EL表达式获得的参数:${header.Referer}
</p>

<%
request.setCharacterEncoding("UTF-8");
if(null != request.getParameterValues("hobby")){
String[] values = request.getParameterValues("hobby");
for(String str : values){
out.println(str);
}
}

%>

<br>
<a href="jstl.jsp">jstl.jsp</a>
</body>
</html>


 

 

五 JSTL示例

 

<%@page import="com.test.entity.Address"%>
<%@page import="com.test.entity.Product"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'jstl.jsp' starting page</title>

</head>
<%
Product product = new Product();
product.setName("小白");
product.setPrice(123.4f);

Address addr2 = new Address();
addr2.setName("成都");

product.setAddr(addr2);

request.setAttribute("product", product);

session.setAttribute("product", product);
session.setAttribute("login", "aaa");
List<Product> lists = new ArrayList<Product>();
for(int i = 1; i <= 10; i++) {
Product  p = new Product();
p.setId(i);
p.setName("p" + i);
p.setPrice(i);
lists.add(p);

Address addr = new Address();
addr.setName("addr" + i);
p.setAddr(addr);
}

session.setAttribute("lists", lists);

%>
<body>
<h4>JSTL(JSP Standard Tag library)</h4>
<ol>

<li>c:set设置一个变量 <c:set var="v1" value="小小" scope="session"></c:set></li>
<li>c:out输出变量的值:<c:out value="${v2 }" default="没有"></c:out>${v1 }</li>
<li>c:remove删除一个变量<c:remove var="v1"></c:remove></li>
<li>c:out再次输出变量的值(因为已经被删除了,所以显示默认值):<c:out value="${v1}" default="没有"></c:out></li>
<li><hr/></li>
<li>c:if判断参数age的大小:
<c:if test="${param.age<16 }">too young!</c:if>
<c:if test="${param.age>15 && param.age<25 }">yeah!</c:if>
</li>
<li>因为在jstl里没有else标签,所以多分枝判断里要使用choose,when,otherwise :
<c:choose>
<c:when test="${param.age<18 }">
too young!
</c:when>
<c:when test="${param.age>=18 && param.age<50}">
yeah!
</c:when>
<c:otherwise>
未成年或年纪大了
</c:otherwise>
</c:choose>
</li>
<li><hr/></li>
<li>c:forEach循环  : <br/>

<%
for(int x = 0; x <=10; x++) {

}
%>

<c:forEach var="x" begin="0" end="10" step="1" varStatus="s" >
x=${x}
<c:if test="${s.last != true }">
|
</c:if>

</c:forEach>
</li>
<li>c:forEach循环遍历集合或数组  :
<%--
for(Product p:(List<Product>)session.getAttribute("products")) {
out.println(p.getName());
}
--%>

<!--  varStatus -->
<c:forEach var="p" items="${sessionScope.lists}" varStatus="s" >
${p.name}
</c:forEach>
<br/>
<c:forEach var="p" items="${sessionScope.lists}" varStatus="s" >
${p.name},last:${s.last} first:${s.first} index:${s.index} <br/>
</c:forEach>
</li>
<%--<li>
<c:set var="numList" value="one,two,three,four,five"/>
forTockens标记的输出:
<c:forTokens var="num" items="${numList }" delims=",">
${num}  
</c:forTokens>
</li>
--%></ol>

<h4>总结</h4>
<p>
1.javabean 特点:实现序列化接口,无参构造方法,get/set方法
<br/>2.EL(expression Language)${表达式 }取值
sessionScope / requestScope  applicationScope.product.addr.name
3.JSTL & EL

Servlet(Controller) + Jsp(View) (MVC)
</p>

<br>
<a href="el.jsp">el.jsp</a>
</body>
</html>


 

 





 

@Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息