EL和JSTL

来源:互联网 发布:淘宝刷单违规 编辑:程序博客网 时间:2024/06/07 14:34

EL和JSTL

1.作用


2.案例


3.JSTL导包

  • 使用maven搜索jstl
  • 结果中选择1.2[jar]

4.JSTL原理


案例代码如下:

两个实体类:

package entity;import java.io.Serializable;import java.util.Arrays;public class Student implements Serializable {private static final long serialVersionUID = 1L;public Student() {}private String name;private Integer age;private String sex;private String[] interests;private Course course;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String[] getInterests() {return interests;}public void setInterests(String[] interests) {this.interests = interests;}public Course getCourse() {return course;}public void setCourse(Course course) {this.course = course;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", interests=" + Arrays.toString(interests)+ ", course=" + course + "]";}}
package entity;import java.io.Serializable;public class Course implements Serializable {private static final long serialVersionUID = 1L;public Course() {}//私有属性叫对象属性private Integer courseId;private String name;private Integer days;/** * 1.和get/set对应的属性叫Bean属性 * 2.通过get/set反应出来的属性 * 3.去掉get,并将首字母小写的单词是Bean属性 * Bean属性一般和对象的属性一致(也可以不一致),本案例为了演示Bean属性,修改为不一致 */public Integer getId() {return courseId;}public void setId(Integer courseId) {this.courseId = courseId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getDays() {return days;}public void setDays(Integer days) {this.days = days;}@Overridepublic String toString() {return "Course [courseId=" + courseId + ", name=" + name + ", days=" + days + "]";}}
servlet实现类:

package web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import entity.Course;import entity.Student;public class FindStudentServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {//1.获取参数(本案例没有参数--略)//2.处理业务(查)//此处模仿数据库Student stu = new Student();stu.setName("张三");stu.setAge(23);stu.setSex("M");stu.setInterests(new String[]{"琴","棋","书","画"});Course c = new Course();c.setId(1);c.setName("JAVA");c.setDays(80);stu.setCourse(c);//到此Student实例初始化完成//3.转发或重定向(转发)req.setAttribute("stu", stu);//当前:/jsp1/findStudent//目标:/jsp1/find_student.jspreq.getRequestDispatcher("find_student.jsp").forward(req, res);}}

jsp文件:

<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%-- 使用EL表达式时,不用import导入其他类的包,因为EL的底层采用了类反射机制 --%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!doctype html><html>  <head>     <meta charset="utf-8" />     <title>EL和JSTL</title>     <style type="text/css">       table{         border:2px soild #CCC;         width:50%;         text-align:center;         border-collapse:collapse;       }       table td{         border:2px solid 3CCC;       }     </style>  </head>  <body>    <h1>EL</h1>    <%-- 1.利用EL获取Bean属性(2种方式) --%>    <%-- ${stu.name }等价于 request.getAttribute("stu").getName()--%>      <p>姓名:${stu.name }</p>      <p>年龄:${stu["age"] }</p>      <%-- 等价于 request.getAttribute("stu").getCourse().getId()                                 相当于是get/set方法,不是属性名      --%>      <p>课程:${stu.course.id }</p>      <p>兴趣:${stu.interests[2] }</p><%-- "琴","棋","书","画" --%>            <%--       EL的取值范围:      (1).默认从如下4个对象中依次取值:           page,request,session application,这四个是默认的取值范围        (2).也可以指定取值范围           requestScope.stu.name  从request中取值           sessionScope.stu.name  从session中取值        (3).设置默认取值的目的是为了开发者不用经常写范围,简化EL表达式      --%>      <p>性别:${sessionScope.stu.sex }</p><%--此处没有在session中存值,所以输出"" --%>      <p>性别:${requestScope.stu.sex }</p><%--此处在request中存有值,所以输出"相应的值" --%>      <%-- 2.EL支持运算 --%>   <p>年龄+5:${stu.age+5 }</p>   <p>20-30之间:${stu.age>=20 && stu.age<=30 }</p>   <p>1+1:${1+1 }</p>   <p>"100"+"200":${"100"+"200" }</p>   <%-- 加号只能进行加法运算,不能连接 --%>   <p>empty用于判断一个字符串是否为空</p>   <p>stu判空:${empty stu }</p>   <p>null判空:${empty null }</p>   <p>""判空:${empty "" }</p>      <!-- 3.EL表达式获取请求参数的值 -->   <%--      等价于request.getParamter("user")     ${paramValues.city}     request.getParamterValues("city")用于多选    --%>   <p>获取请求参数:${param.user }</p>          <h1>JSTL</h1>    <%-- if --%>    <p>      <c:if test="${stu.sex == 'M' }">男</c:if>      <c:if test="${stu.sex == 'F' }">女</c:if>    </p>        <%-- choose --%>    <p>      <c:choose>        <c:when test="${stu.sex == 'M' }">男</c:when>        <c:otherwise>女</c:otherwise>      </c:choose>    </p>            <%-- forEach --%>    <%-- item:声明遍历的数据   var:给每次循环所获得的数据命名 --%>    <p>      <c:forEach items="${stu.interests }" var="in" varStatus="s">        <p>${s.count } ${in }</p>      </c:forEach>    </p>            <%-- URL标签 使用可选的查询参数来创造一个URL--%>    <%-- 模拟sossion中的数据,在jstl.jsp中读取--%>    <%      session.setAttribute("uname", "Lucy");    %>    URL标签:<hr/>    <a href="<c:url value='jstl.jsp' />" >访问jstl.jsp</a>    <br><hr/>        <%-- set标签用于保存数据   remove标签用于删除数据--%>    <c:set var="num" scope="session" value="${1+5 }"></c:set>    set之后num的值为:${sessionScope.num }        <br><hr/>    <c:remove var="num" scope="session"/>    remove之后num的值为:${sessionScope.num }        <%-- catch主要用来处理产生错误的异常状况,并且将错误信息储存起来         var:用来储存错误信息的变量    --%>    <br><hr/>catch标记:    <c:catch var="msg">      <% Integer.parseInt("ytg"); %>    </c:catch>    ${msg }            <%-- import 将另一个页面嵌入到当前页面中 类似于include指令--%>            <%-- import 将浏览器重定向至一个新的URL--%>    <%--     <c:redirect url="https://www.baidu.com/"/>    --%>        <br><hr>    <%-- <c:out>标签用来显示一个表达式的结果,与<%= %>作用相似 --%>    <c:out value="${5+4 }"></c:out>    <%-- out标签类似于${5+4 } --%>    <br><hr>      </body></html>

浏览器的请求路径为:http://localhost:8080/jsp1/findStudent?user=abc

输出结果为:

EL

姓名:张三

年龄:23

课程:1

兴趣:书

性别:

性别:M

年龄+5:28

20-30之间:true

1+1:2

"100"+"200":300

empty用于判断一个字符串是否为空

stu判空:false

null判空:true

""判空:true

获取请求参数:abc

JSTL

1 琴

2 棋

3 书

4 画

URL标签:
访问jstl.jsp 

set之后num的值为:6 

remove之后num的值为: 

catch标记: java.lang.NumberFormatException: For input string: "ytg" 





0 0
原创粉丝点击