JSP EL和JSTL

EL表达式:

Expression Language表达式语言

目的:简化jsp中java代码开发,代替脚本表达式<%=username%> ​ 它不是一种开发语言,是jsp中获取数据的一种规范 ​ 格式。

  • 获取简单数据:
    <%
        pageContext.setAttribute("username", "张三");
        request.setAttribute("age", "25");
        request.setAttribute("username", "李四");//查找优先级低于pageContext
        session.setAttribute("phone", "13838383838");
        application.setAttribute("address", "北京xxx");

        Student student = new Student("s0001","小明","北京yyy");
        pageContext.setAttribute("stu",student);
    %>
    <h2>案例一:简单数据</h2>

    <h3>不使用EL输出数据</h3>
    <%=pageContext.findAttribute("username")%>
    <%=pageContext.findAttribute("age")%>
    <%=pageContext.findAttribute("phone")%>
    <%=pageContext.findAttribute("address")%>
    <%=((Student)pageContext.findAttribute("stu")).getStuName()%>

    <h3>使用EL输出数据</h3>
    ${"username"}<!--原样输出-->
    ${username}
    ${age}
    ${phone}
    ${address}

    <h3>案例二:对象数据</h3>
    ${stu.stuNo}
    ${stu.stuName}
    ${stu.address}

运行结果:

  • 使用List和Map集合:
    <h3>案例三:使用List和Map集合</h3>
    <%
        List<String> list = new ArrayList<String>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        pageContext.setAttribute("list", list);

        Map<String,String> map = new HashMap<>();
        map.put("aa", "11");
        map.put("bb", "22");
        map.put("cc", "33");
        map.put("1111", "xxxx");
        pageContext.setAttribute("map", map);
    %>
    <h4>输出List集合</h4>
    ${list[0]}<br/><%--同${list.get(0)}--%>
    ${list[1]}<br/>
    ${list[2]}<br/>
    ${list[3]}<br/><%--此处不会报错,不会输出--%>
    <h4>输出map集合</h4>
    ${map.aa}<br/>
    ${map.bb}<br/>
    ${map.cc}<br/>
    <%--${map.1111} 此写法报错--%>
    <%--使用[]--%>
    ${map["aa"]}<%--同${map['aa']}--%>
    ${map["bb"]}
    ${map["cc"]}
    ${map["1111"]}

运行结果:

  • 使用EL表达式执行运算、empty关键字:
    <h3>算术运算</h3>
    ${10+5}<br/>
    ${10-5}<br/>
    ${10*5}<br/>
    ${10/5}<br/>
    ${3%5}<br/>

    <%
        String s1 = new String("java");
        String s2 = new String("java");
        pageContext.setAttribute("java1",s1);
        pageContext.setAttribute("java2",s2);

    %>
    <h3>关系运算</h3>
    ${10 == 5}<br/>
    ${10 != 5}<br/>
    <span>"hello" == "hello":</span>${"hello" == "hello"}<br/>
    <span>s1 == s2:</span>${s1 == s2}<br/>
    <span>java1 == java2:</span>${java1 == java2}<br/>
    ${10 > 5}<br/>
    ${10 < 5}<br/>
    ${10 >= 5}<br/>
    ${10 <= 5}<br/>

    <h3>其他关系运算符</h3>
    ${java1 eq java2}<br/>
    ${100 eq 200}<br/>
    ${100 gt 99}<br/>
    ${50 lt 199}<br/>

    ${200 ge 199}<br/>
    ${200 le 199}<br/>
    ${200 ne 199}<br/>

    <h3>三目运算</h3>
    <%
        pageContext.setAttribute("flag",0);
        pageContext.setAttribute("sex",0);
    %>
    ${99>90?"优秀":"一般"}
    ${flag==0?"没有激活":flag==1?"激活":"删除"}
    ${sex==0?"男":"女"}

 

运行结果:

    <h3>逻辑运算</h3>
    ${true &&  false}<br/>
    ${true || false}<br/>
    ${!true}<br/>
    ${true and  false}<br/>
    ${true or false}<br/>
    ${not true}<br/>

    <h3>empty运算</h3>
    <% String ss1="";
        pageContext.setAttribute("ss1", ss1);
        String ss2=null;
        pageContext.setAttribute("ss2", ss2);
        String ss3="122222";
        pageContext.setAttribute("ss3", ss3);
        List list1 =new ArrayList();
        pageContext.setAttribute("list1", list1);
    %>
    <!-- empty关键字:只要内容是空即为true -->
    ${empty ss1}<br>
    ${empty ss2}<br>
    ${empty  ss3}<br>
    ${empty  list1}<br>

运行结果:

一种常用写法:

${empty user?"<a href=''>请登录</a>":"<a href=''>退出</a>"}<br/>
  • 隐式对象(11个):

JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP servlet和表达式中可用:

pageContext:页面上下文,可以获取jsp中其他八个内置对象
pageScope、requestScope、sessionScope、applicationScope表示四个域对象中集合
param 表示request.getParameter("username"); ${param.username}
paramvalues 表示request.getPrameterValues("hobby"); ${paramValues.hobby}
header 表示 request.getHeader("accept"); ${header.accept};
headerValues 表示 request.getHeaderValues("accept-encoding"); ${headerValues"accept-encoding"}
cookie 表示 request.getCookies(); ${cookie.JSESSIONID}
initParam 表示 ServletContext(application)初始化参数

param 和 paramvalues 只能接收浏览器的 request 请求数据,本页面设置假数据不能读取,但域对象集合 requestScope 可以。

 

JSTL:

全称Java Server Pages Standard Tag Library,JSP标准标签库,代替jsp页面的脚本,实现逻辑控制。

 

下载JSTL库:https://archive.apache.org/dist/tomcat/taglibs/

taglibs-standard-impl-1.2.5.jar

taglibs-standard-spec-1.2.5.jar

  • 使用JSTL:

必须在JSP页面添加tablib指令库:

<% @taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c">
  • 通用标签set,out,remove:

set、remove:

<!--1.声明变量k   var:是变量名  value:变量的值(必须是EL表达式)-->
	<c:set var="k" value="${1+1}"></c:set>
<!--2.输出变量k   value:使用EL表示表示变量-->
	移除前输出的内容:<c:out value="${k}"></c:out><br>
<!--3.移除指定变量  -->	
	<c:remove var="k"/>
	移除后输出的内容:<c:out value="${k}"></c:out><br>
<!--4.给指定变量赋默认值  -->
	默认值:<c:out value="${m}" default="123456"></c:out>

out:

    <%
        pageContext.setAttribute("xxx","哈哈啊哈");
    %>
    <h4>out标签的使用</h4>
    <c:out value="${xxx}"></c:out></br>
    <%--${"<script type='text/javascript'>while(true){alert('这个是真烦死你,慎用');}</script>"}--%>
    <c:out value="<script type='text/javascript'>while(true){alert('烦死你');}</script>"></c:out>

运行结果:

  • 条件标签if,choose:
    <h3>条件标签</h3>
    <c:if test="${10>5}">
        真的<br/>
    </c:if>

    <c:if test="${empty user}">
        没有登录<br/>
    </c:if>

    <c:set value="80" var="score"></c:set>
    <c:choose><%--choose(等价于java中switch)--%>
        <c:when test="${score>90}">优秀</c:when>
        <c:when test="${score>80}">良好</c:when>
        <c:when test="${score>70}">一般</c:when>
        <c:when test="${score>60}">差</c:when>
        <c:otherwise>不及格</c:otherwise>
    </c:choose>

运行结果:

  • 迭代标签foreach:
    <h3>迭代标签foreach</h3>
    <%
        List<String> cities = new ArrayList<>();
        cities.add("北京");
        cities.add("上海");
        cities.add("西安");
        cities.add("深圳");
        cities.add("杭州");
        pageContext.setAttribute("cities",cities);

        Map<String,String> map = new HashMap<>();
        map.put("cn", "中国");
        map.put("usa", "美国");
        map.put("uk", "英国");
        pageContext.setAttribute("map",map);
    %>

    <c:forEach var="city" items="${cities}">
        ${city}
    </c:forEach>
    <br/>
    <c:forEach var="country" items="${map}">
        ${country.key}...${country.value}
    </c:forEach>
    <br/>
    <!--其他迭代-->
    <c:forEach begin="1" end="10" step="1" var="i">
        ${i}
    </c:forEach>

运行结果:

 

    <h3>url标签</h3>
    <c:url var="empurl" value="list">
        <c:param name="ename" value="张三"></c:param>
        <c:param name="job" value="销售"></c:param>
    </c:url>

    <a href="${empurl}">员工列表</a>

运行结果:

自动转码了(UTF-8)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值