EL&JSTL三层架构

EL

概述

表达式语言(Expression Language)

作用:主要用来代替jsp中脚本的功能,简化对java代码的操作。

语法:${表达式}

使用

EL表达式只能从域对象(4个域)中获取数据

获取域中的值

  • 标准(了解)
    1. ${pageScope.键名}
      从page域中获取指定键名对应的值

    2. ${requestScope.键名}
      从request域中获取指定键名对应的值

    3. ${sessionScope.键名}
      从session域中获取指定键名对应的值

    4. ${applicationScope.键名}
      从servletContext域中获取指定键名对应的值

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>demo1</title>
</head>
<body>
<h3>el表达式基本语法</h3>
<%
    /*模拟servlet向域中存值....*/
    // pageContext.setAttribute("username", "饭岛爱老师");
    request.setAttribute("username", "小泽老师");
    request.setAttribute("age", 33);
    session.setAttribute("sex", "女");
    application.setAttribute("address", "日本");
%>
<h5>标准语法</h5>
${pageScope.username} <br> <%--不会出现空指针异常问题--%>
${requestScope.age} <br>
${sessionScope.sex}<br>
${applicationScope.address}<br>
<h5>简化语法</h5>
${username} <br>
${age} <br>
${sex}<br>
${address}<br>
</body>
</html>

执行运算

  • 算数运算符
    语法: + - * /(div) %(mod)

  • 比较运算符
    语法:> < >= <= ==(eq) !=(ne)

  • 逻辑运算符
    语法:&&(and) ||(or) !(not)

  • 三元运算符
    语法:${条件表达式?为真:为假}


  • 空运算符
    语法:${not empty 对象}
    功能:
    可以判断字符串和对象是否为空
    可以判断一个集合的长度是否为0
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>demo3</title>
</head>
<body>
<%
    int a = 4;
    int b = 3;
    request.setAttribute("a", a);
    request.setAttribute("b", b);
%>
<h5>算数运算符</h5>
${a / b} | ${a div b} <br>
${a % b} | ${a mod b}<br>

<h5>比较运算符</h5>
${a == b} | ${a eq b}<br>
${a !=b } | ${a ne b} <br>

<h5>三元运算符</h5>
${a == b ? "a相等b" : "a不等b"} <br>

<h5>非空判断</h5>
<%
    User user = new User();
    request.setAttribute("user", user);

    List list = new ArrayList();
    list.add("aa" );
    request.setAttribute("list", list);
%>
user对象:${not empty user} <br> <%--  if(user !=null ){} --%>
list集合:${not empty list} <br> <%-- if(list !=null && list.size>0 ){}--%>

<h5>空值判断</h5>
user对象:${empty user} <br> <%--  if(user ==null ){} --%>
list集合:${empty list} <br> <%-- if(list ==null || list.size==0 ){}--%>
</body>
</html>

隐式对象

  • el表达式中有11个隐式对象
    掌握
    pageContext
    就是jsp九大内置对象之一,这哥们可以获得其他八个内置对象
    cookie
    可以获取浏览器指定cookie名称的值

  • jsp默认支持el表达式
    servlet2.3规范中,默认不支持el表达式

  • 如果要忽略el表达式
    1)忽略当前jsp页面中所有的el表达式
    设置jsp中page指令中:isELIgnored=“true” 属性
    2)忽略单个el表达式
    ${表达式}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>demo4</title>
</head>
<body>
<h3>el隐式对象..</h3>
${pageContext.request.contextPath}  动态获取:项目名称(虚拟路径) <br>

${cookie.JSESSIONID.value} 获取指定cookie名称的值... <br>
</body>
</html>

JavaBean

就是一个普通的java类

使用规范

  1. 所有字段(成员变量)为private
  2. 提供无参构造方法
  3. 提供getter、setter和is方法
  4. 实现serializable接口

JSTL

概念

Jsp 标准标签库(Jsp Standard Tag Library),是由Apache组织提供的开源的jsp标签库
作用:替换和简化jsp页面中java代码的编写
JSTL标准标签库有5个子库,但随着发展,目前常使用的是它的核心库(Core)

Core标签使用

使用步骤:

  • 当前web项目引入jar包
  • 当前jsp页面taglib指令引入

常用标签

c:if标签

  • 就相当于,java中 if(){}
    语法
    <c:if test=“boolean值”></c:if>
    true:显示标签体内容
    false:隐藏标签体内容
    通常与el表达式一起使用
    注意:此标签没有else功能,如果想实现else效果,请让条件取反
<%@ page import="cn.itcast.domain.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>demo1</title>
</head>
<body>
<%
    User user = new User();
    user.setUsername("jack");
    request.setAttribute("user", user);
%>

<c:if test="${empty user}">
    你好,请登录...
</c:if>

<c:if test="${not empty user}">
    你好,${user.username}
</c:if>
</body>
</html>

c:forEach标签

  • 相当于java中的for循环
    1)普通for
    for(int i=1; i<=5; i++){
    i
    }
    <c:forEach begin=“1” end=“5” step=“1” var=“i”>
    </c:forEach>
    begin=“1” 起始值(包含)
    end=“5” 结束值(包含)
    step=“1” 步长为1
    var=“i” 当前输出临时变量
    2)增强for
    for(User user : list){
    user
    }
    <c:forEach items="${list}" var=“user” varStatus=“vs”>
    ${user}
    </c:forEach>
    items=“list” 集合
    var=“user” 当前输出的临时变量
    varStatus=“vs” 变量状态
    index 当前索引 从0开始
    count 计数器 从1开始
<%@ page import="java.util.List" %>
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>demo2</title>
</head>
<body>
<h3>普通for循环</h3>
<c:forEach begin="1" end="5" step="1" var="i"> <%--for循环将临时变量存储到了 pageContext域空间--%>
    ${i} <br>
</c:forEach>

<h3>增强for循环</h3>
<%
    List<User> list = new ArrayList<>();
    list.add(new User("拉克丝", 27, "女"));
    list.add(new User("金克斯", 23, "女"));
    list.add(new User("马尔扎哈", 127, "中"));
    request.setAttribute("list", list);
%>

<c:forEach items="${list}" var="user" varStatus="vs">
   索引:${vs.index} |  计数器: ${vs.count} | ${user.username} <br>
</c:forEach>
</body>

c:choose标签

  • 相当于java中switch语句
    <c:choose> 等价于 switch
    <c:when> 等价于 case+break
    <c:otherwise> 等价于 default
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>demo3</title>
</head>
<body>
<h3>choose标签</h3>
<%
    Integer money = 7000;
    request.setAttribute("money", money);
%>
<c:choose>
    <c:when test="${money == 7000}">
        单身汪....
    </c:when>
    <c:when test="${money == 15000}">
        买房
    </c:when>
    <c:when test="${money > 30000}">
       买车
    </c:when>
    <c:otherwise>
        奋斗吧骚年....
    </c:otherwise>
</c:choose>
</body>
</html>

三层架构(MVC升级版)

通常意义上的三层架构是将整个业务应用划分为:表现层、业务逻辑层、数据访问层
区分
表现层:又称web层,与浏览器进行数据交互(控制器和视图)
业务逻辑层:又称为service层,处理业务数据(if判断、for循环等)
数据访问层(持久层):又层为dao层,与数据库进行交互的(每一行记录与JavaBean实体对应)
在这里插入图片描述

包目录结构

  • com.itheima 基本包(公司域名倒写)

  • com.itheima.dao 持久层

  • com.itheima.service 业务层

  • ccom.itheima.web 表示层

  • com.itheima.domain 实体(JavaBean)

  • com.itheima.util 工具

案例练习

  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>${NAME}</title>
</head>
<body>
<h3><a href="${pageContext.request.contextPath}/FindAllServlet">用户列表查询</a></h3>
</body>
</html>
  • FindAllServlet
@WebServlet("/FindAllServlet")
public class FindAllServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.调用service查询
        UserService userService = new UserService();
        List<User> list = userService.findAll();
        // 2.将list存储request域
        request.setAttribute("list", list);
        // 3.转发list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request, response);
    }

}
  • UserService
public class UserService {

    public List<User> findAll() {
        // 调用dao,查询
        UserDao userDao = new UserDao();
        List<User> list = userDao.findAll();
        return list;
    }
}
  • UserDao
public class UserDao {

    private static List<User> list = new ArrayList<>();

    static {
        list.add(new User("1", "如花", "女", 18, "香港", "123456", "[email protected]"));
        list.add(new User("2", "甄姬", "女", 17, "扬州", "123436", "[email protected]"));
    }

    public List<User> findAll() {
        return list;
    }
}
  • list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>list.jsp</title>
</head>
<body>
<%--<c:forEach items="${list}" var="user">
    ${user} <br>
</c:forEach>--%>

<table border="1" cellpadding="0" cellspacing="0" width="500px" align="center">
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>年龄</th>
        <th>地址</th>
        <th>QQ</th>
        <th>邮箱</th>
    </tr>
    <c:forEach items="${list}" var="user">
        <tr align="center">
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.sex}</td>
            <td>${user.age}</td>
            <td>${user.address}</td>
            <td>${user.qq}</td>
            <td>${user.email}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
发布了34 篇原创文章 · 获赞 9 · 访问量 1261

猜你喜欢

转载自blog.csdn.net/weixin_43616750/article/details/105678464