jsp之el表达式jstl标签

不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码

el表达式的出现是为了简化jsp中读取数据并写入页面的操作.

el表达式的功能不多,也很好记

读取域对象中的值,并写入到页面.

 

<%
    pageContext.setAttribute("pk", "1");
    request.setAttribute("rk", "2");
    session.setAttribute("sk", "3");
    application.setAttribute("ak", "4");
%>

${pageScope.pk}
${requestScope.rk}
${sessionScope.sk}
${applicationScope.ak}

我们使用 作用域.key的方式可以直接获取域对象中的值

我们也可以省略作用域

<%
    pageContext.setAttribute("key", "1");
    request.setAttribute("key", "2");
    session.setAttribute("key", "3");
    application.setAttribute("key", "4");
%>

${key}

注意了,如果我们省略作用域,那么表达式会按照 pageScope-->requestScope-->sessionScope-->applicationScope的顺序去查询匹配的key值.如果有一个域中查询到.则不会在查询其他域.

如果获取不到不会抛出异常

下面我们使用el表达式来操作object类型的数据

public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
<%
    request.setAttribute("user", new User("张三", 22));
%>
${requestScope.user.name}
${requestScope.user.age}

注意啦!如果读取对象的属性.那么该对象必须实现属性相对应get()方法.否则抛异常!!!

el表达式也支持数据的运算

<%--数学运算--%>
${(1+2*3+1)/2%3}
<%--关系运算--%>
${1>4}
<%-->  >=  <  <=  ==  !=
gt ge  lt le  eq  !=--%>
//注意啦!我们一般不会用符号运算,而是用字符代替.防止跟html标签冲突
<%--逻辑运算--%>
${true||false}
<%--三元表达式--%>
${3>1?"大于":"小于"}

el表达式的其他使用

读取请求参数

<%--获取请求参数中的值--%>
${param.age}

如果参数是数组类型

<%--获取值是列表的参数--%>
${paramValues.age[0]}
${paramValues.age[1]}

 jstl(核心类库)

需要引入两个jar

jstl.jar   standard.jar

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

导入标签约束指定标签库命名空间

首先是设置域属性

<c:set scope="session" var="cskey" value="c标签设置session"/>//设置attribute
<c:remove scope="session" var="cskey"/>//删除attribute

scope是域范围:page,request,session,application. var是属性名.value则是属性值

if语句,注意 test中只能用el表达式

<c:if test="${3>2}">
    3>2
</c:if>

if else 语句

<c:choose>
    <c:when test="${crage==1}">
        when1
    </c:when>
    <c:when test="${crage==2}">
        when2
    </c:when>
    <c:otherwise>
        when3
    </c:otherwise>
</c:choose>

循环语句

<c:forEach var="i" begin="1" end="5" step="1">
    当前循环:${i}
</c:forEach>

var 当前变量名,begin开始位置,end结束位置,注意这里的end="5"其实是 <=5 以上的会输出5次.另外值得一说的是,在var中声明的变量会存到pageContext域中.所以el表达式才可以取值

循环操作 集合

<%
    List<User> users = new ArrayList<User>();
    users.add(new User("张三",1));
    users.add(new User("李四",2));
    users.add(new User("王五",3));
    request.setAttribute("users",users);
%>
<c:forEach  items="${users}" var="user">
    循环用户:${user.name}${user.age}
</c:forEach>

循环操作 map

<%
    Map<Integer,User> maps = new HashMap<>();
    maps.put(1,new User("张三",1));
    maps.put(2,new User("李四",2));
    maps.put(3,new User("王五",3));
    session.setAttribute("maps",maps);
%>

这个略微有些说法,var 中存储的其实是一个键值对,在el中 .key就是取map的key  .value就是取map的value

<c:forEach items="${sessionScope.maps}" var="entry">
    循环用户Map:${entry.key}${entry.value.name}${entry.value.age}
</c:forEach>

以上就是el表达式和jstl标签的常用操作.

posted @ 2019-08-12 22:41  顶风少年  阅读(252)  评论(0编辑  收藏  举报
返回顶部