当前位置: 代码迷 >> JavaScript >> Oracle培训(五十)――JSP第三章知识点小结――JSTL EL
  详细解决方案

Oracle培训(五十)――JSP第三章知识点小结――JSTL EL

热度:625   发布时间:2013-01-27 13:55:24.0
Oracle培训(五十)――JSP第三章知识点总结――JSTL EL

Oracle培训(五十)――JSP第三章知识点总结――JSTL EL

 

知识点预览

一.使用JSP EL

二.EL运算符

三.标准标记库JSTL    

四  EL示例

五 JSTL示例

一 使用JSP EL

 

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

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

 

<%@ 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>


 

 

katoon Sina  CSDN
@Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]
  相关解决方案