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

来源:互联网 发布:淘宝和快递合作多少钱 编辑:程序博客网 时间:2024/09/21 09:02

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>


 

 

katoonSina  CSDN@Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]
原创粉丝点击