EL表达式和jsp标签

1、EL表达式

作用:向浏览器输出域对象中的变量值或表达式计算的结果!!!(使用EL表达式替换掉jsp表达式

语法: ${变量或表达式}

输出基本数据类型变量
从四个域获取,默认顺序是pageScoep->requestScope -> sessionScope -> applicationScope

${name}                        

指定域获取。域范围: pageScoep / requestScope / sessionScope / applicationScope

${pageScope.name}

输出对象的属性值:背后原理依靠属性的标准get方法,如student对象的getName方法

${student.name}

2、jsp标签

1) jsp标签的作用

jsp标签作用:替换jsp脚本。例如:流程判断(if for循环),跳转页面(转发,重定向)

2)jsp标签的分类

  • 内置标签(动作标签): 不需要在jsp页面导入标签
  • jstl标签: 需要在jsp页面中导入标签
  • 自定义标签 : 开发者自行定义,需要在jsp页面导入标签

3)内置标签(动作标签)

转发标签:    <jsp:forward />
参数标签:    <jsp:pararm/>
包含标签:    <jsp:include/>

原理: 包含与被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。(先翻译再合并)
jsp指令中有个包含的命令属于静态包含,功能是相同的
区别如下

  1. 格式区别
    静态包含语法: <%@inclue file="被包含的页面"%>
    动态包含语法: <jsp:include page="被包含的页面">
  2. 传参区别
    静态包含不能向被包含页面传递参数,动态包含可以向被包含页面传递参数
    param传递的参数放在request域中(相当于get提交的?name=eric)
  3. 原理区别
    静态包含: 先合并再翻译
    动态包含: 先翻译再合并
<jsp:include page="/param.jsp">
    <jsp:param value="123" name="name"/>
</jsp:include>

转发标签

<%--jsp页面转发标签 --%>
<jsp:forward page="/param.jsp">
        <jsp:param value="eric" name="name"/>
</jsp:forward>

4)、JSTL标签

全称为Java标准标签库,jstl背后原理也是调用Java代码实现,主要目的是便于书写,一共有四大类库:

  • 核心标签库(c标签库):主要使用的标签库
  • 国际化标签(fmt标签)
  • EL函数标签库(fn函数库)
  • xml标签库(x标签库)
  • sql标签库(sql标签库)
jstl核心标签库的使用
  1. 导入jstl支持的jar包(标签背后隐藏的java代码)
    注意:使用javaee5.0的项目自动导入jstl支持jar包
  2. 使用taglib指令导入标签库
    <%@taglib uri="tld文件的uri名称" prefix="简写" %>
    tld文件的uri名称,可以在jstl的jar包下META-INF下的c.tld文件中寻找uri.
  3. 在jsp中使用标签
    核心标签库的重点标签:
保存数据:      <c:set></c:set>   
获取数据:      <c:out value=""></c:out>
单条件判断      <c:if test=""></c:if>
多条件判断      <c:choose></c:choose>
              <c:when test=""></c:when>
              <c:otherwise></c:otherwise>
循环数据       <c:forEach></c:forEach>
              <c:forTokens items="" delims=""></c:forTokens>
重定向         <c:redirect></c:redirect>
示例代码

set标签

 <%--set标签:默认保存数据到page域中,也可以在scope中指定域 --%>
 <c:set var="name" value="rose" ></c:set>
 <c:set var="a" value="123" scope="request" ></c:set>

out标签

<%
    String msg = null;
    pageContext.setAttribute("msg", msg);
%>
${msg }
<br/>
<%--out标签可以设置默认值,而且还有escapeXml属性,可以选择value值是否转义,默认为true转义原样输出,false不转义 --%>
<c:out value="${msg}" default="<h3>默认值</h3>" escapeXml="false"></c:out>
    <br/>

if标签

<%--if标签 --%>
<c:if test="${empty msg }">
    条件成立<br/>
</c:if>

choose标签

    <%--choose标签 --%>
    <c:set var="score" value="29"></c:set> 
    <c:choose>
        <c:when test="${score>=60 }">
            及格<br/>
        </c:when>
        <c:when test="${score<60 }">
            不及格<br/>
        </c:when>
    </c:choose>   

forEach标签

    <%--forEach标签遍历 
        begin="":       从哪个元素开始
        end="":         到那个元素结束
        step="":        步长(每次加的数)
        items="":       需要遍历的数据(集合)
        var="":         每个元素的名称
        varStatus="":   当前正在遍历元素的状态对象(count 属性:当前位置,从1开始)
    --%>
    <%
        List<Student> list = new ArrayList<Student>();
        list.add(new Student("张三",15));
        list.add(new Student("李四",38));
        pageContext.setAttribute("list", list);
     %>
    <c:forEach begin="0" end="2" step="1" items="${list }" var="stu" varStatus="varSta">
        序号:${varSta.count}     -   姓名:${stu.name }  -  年龄:${stu.age }<br/>
    </c:forEach>
    <hr/>
    <%--forEach遍历Map集合 --%>
    <%
        Map<String,Student> map = new HashMap<String,Student>();
        map.put("001", new Student("李四",30));
        map.put("002", new Student("张三",20));
        pageContext.setAttribute("map", map);

     %>
    <c:forEach items="${map }" var="entry">
        ${entry.key }  - 姓名:${entry.value.name } - 年龄:${entry.value.age }<br/>
    </c:forEach>        
    <hr/>

forToken标签

<%--forToken标签:循环特殊字符,切割字符串 --%>
    <%
        String str = "java-php-net-屏幕";
        pageContext.setAttribute("str", str);
     %>
     ${5*5}<br/>
     <c:forTokens items="${str }" delims="-" var="s">
        ${s }<br/>
     </c:forTokens>
     <hr/>

重定向

<%--重定向 --%>
<c:redirect url="http://www.baidu.com"></c:redirect>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值