EL与JSTL

使用EL和JSTL表达式重要的一个原因是jsp中一般不允许直接出现脚本代码,且嵌套脚本代码不利于解读和维护

补充 html的载入运行速度比JSP快很多,所以若是首页登陆的都采用html,然后再在验证页面判断,验证页面可使用EL表达式。

EL表达式

EL表达式在web版本2.5之后自带解析功能。若是遇到表达式报错可查看是否是这方面的问题。
格式:${EL表达式}    括号里面的为input的name,或者session.setAttribute("key值",value);
例子↓
index.html的页面
<form action="ELJSTLText.jsp" method="post">
    <p>用户名:<input type="text" name=" user"></p>
    <p>密码:<input type="text" name=" pwd"></p>
    <p><input type="submit" value="提交"><input type="reset" value="重置"></p>

</form>

ELJSTLText.jsp的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
${user} <%--这个就是EL表达式,跟下面的语句效果类似但不需要镶嵌JAVA代码--%>
<%String us=request.getParameter("user");out.print(us);%> <%--跟上面的EL表达式一个意思--%>

若是EL表达式里面的值是对象类型的,可以直接使用,如:${user.name}   EL表达式会自动查找getname()的方法,这是比较常用的一种写法,直接 点属性,不需要用get方法获取。
若EL表达式中的值,例如user,被多个范围定义(application,session,request,page),那么EL表达式中的值会从小找到大,哪个先找到就采用哪个


JSTL表达式

一般常用的用 if(跟java的if语句一样,都是用来判断的)和 foreach(与java中的for循环一致)语句
所以这就是我们使用EL表达式的原因, 它与JSTL都是混合着用的,下面是与JSTL结合用的例子↓
index.jsp的页面,为了减少页面转折,我直接在一个页面写

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<-- 若要使用JSTL表达式,必须要有下面这个标注,并且导入对应的java包-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <--C代表着被引用时的别名-->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <--格式化时间必须导入这个-->
<html>
  <head>
    <title>$Title$</title>
    <style>
      .red{
        background-color: red; <--创建一个背景颜色是红色的类,目的是下面的隔行变色-->
      }
    </style>
  </head>
  <body>
  <%student stu1=new student(1,"李宁","广州");  <--载入参数,把多个student类的对象放进集合-->
    student stu2=new student(2,"张三","天河");
    student stu3=new student(3,"李四","荔湾");
    student stu4=new student(4,"王五","越秀");
    List<student> li=new ArrayList<>();
    li.add(stu1);
    li.add(stu2);
    li.add(stu3);
    li.add(stu4);
    pageContext.setAttribute("time",date);  <--存入时间-->
    pageContext.setAttribute("nameL",li);
  %>   <-- 通过pageContext把集合存进去,若是来自别的网页则用session-->
  <table border="1px">
<--在JSTL的标签库中有forEach 这个标签,作用是循环遍历,跟增强型的for类似-->
    <c:forEach var="ss" varStatus="num" items="${nameL}"> 
 <-- items属性一般写入的是 集合varStatus代表着类似java的for循环中 变量"i"的作用, var代表着当前遍历到的 对象别名-->
<--实现隔行变色还需要判断是奇数行还是偶数行,所以要用  if标签,然后用定义varStatus定义的别名num .count去余2是否等于0,等于0则证明可被整除,在这里注意,必须要用count,否则该表达式不会生效-->
      <tr <c:if test="${num.count%2==0}">class="red" </c:if>>
        <td>编号:${ss.userNo}</td>
        <td>姓名:${ss.username}</td>
        <td>地址:${ss.userAddress}</td>
      </tr>
    </c:forEach> <--结束循环-->
  </table>
<fmt:formatDate value="${time}" pattern="yyyy-MM-dd" ></fmt:formatDate> <--格式化时间,与EL表达式混合用-->
  </body>
</html>

猜你喜欢

转载自blog.csdn.net/chijiajing/article/details/80945833
今日推荐