zoukankan      html  css  js  c++  java
  • EL表达式、jsp标签、JSTL标签

    EL表达式

    el表达式(Expression Language) 是为了使JSP写起来更加简单。

    语法

    在JSP中访问模型对象是通过EL表达式的语法来表达。所有EL表达式的格式都是以“${ }”表示。例如,${ userinfo}代表获取变量userinfo的值。当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如:${ pageScope. userinfo}表示访问page范围中的userinfo变量。

    变量

    EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

    因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

    假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传。

    用途
    • 获取数据

    • 执行运算

    • 获取web开发的常用对象

    需要导入的包
    <!--jstl表达式的依赖-->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency><!--jstl需要用到的standard标签库-->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    示例
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%--内置对象--%>
    <%
        pageContext.setAttribute("name1","Hayden1");        //保存的数据只在一个页面中有效
        request.setAttribute("name2","Hayden2");            //保存的数据只在一次请求中有效,请求转发会携带这个数据
        session.setAttribute("name3","Hayden3");            //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
        application.setAttribute("name4","Hayden4");        //保存的数据只在服务器中有效,从打开服务器到关闭服务器
    %>
    <%
        /*通过pageContent取出我们保存的值*/
        String name1 = (String) pageContext.findAttribute("name1");
        String name2 = (String) pageContext.findAttribute("name2");
        String name3 = (String) pageContext.findAttribute("name3");
        String name4 = (String) pageContext.findAttribute("name4");
        String name5 = (String) pageContext.findAttribute("name5");     //本不存在
    %>
    <%--使用EL表达式输出 ${}--%>
    <h1>${name1}</h1>
    <h1>${name2}</h1>
    <h1>${name3}</h1>
    <h1>${name4}</h1>
    <h1>${name5}</h1>       <%--不显示出来--%>
    <h1><%=name5%></h1>     <%--显示null--%>
    </body>
    </html>

    jsp标签

    需要导入的依赖包
    <!--jsp依赖-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2.1-b03</version>
    </dependency>
    示例

    这里实现的是一个页面转发数据到另一个页面中,并在另一个页面进行数据的获取。

    <body>
    <%--带参数转发到某个页面--%>
    <jsp:forward page="/jsp5.jsp">
        <jsp:param name="name" value="Hayden-Wong"></jsp:param>
        <jsp:param name="age" value="23"></jsp:param>
        <jsp:param name="sex" value="Male"></jsp:param>
    </jsp:forward>
    </body>
    <body>
    name: <%=request.getParameter("name")%>
    age: <%=request.getParameter("age")%>
    sex: <%=request.getParameter("sex")%>
    </body>

    值得注意的是,jsp标签内不可以写注释,否则编译通过,运行时会报错。

    JSTL标签

    JSTL标签的使用是为了弥补HTML标签的不足,它自定义许多标签可供使用,标签的功能和Java代码相同。

    类别
    • 核心标签(最常用)

    • 格式化标签

    • SQL 标签

    • XML 标签

    • JSTL 函数

    需要导入的依赖包
    <!--jstl表达式的依赖-->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency><!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency><!-- https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl -->
    <dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>jstl-impl</artifactId>
      <version>1.2</version>
    </dependency><!--jstl需要用到的standard标签库-->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    使用步骤
    • 引入对于的taglib

    • 使用其中的方法

    • 在Tomcat/lib路径下也要有相关的依赖包,否则500错误

    头文件支持

    核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    示例1(coreif)

    在页面中提交一个表单到自身页面,再判断输入的情况:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h3>if测试</h3>
    <hr>
    <form action="jstlDemo1.jsp" method="get">
        <input type="text" name="age" value="${param.age}">
        <input type="submit" value="登录">
    </form><c:if test="${param.age=='16'}" var="isAdmin">
        <c:out value="小朋友欢迎你!"/>
    </c:if><c:out value="${isAdmin}"/></body>
    </html>
    示例2(corewhen)

    jstl标签的when方法相当于Java中的if-else if结构:

    <body>
    <c:set var="score" value="94"/>
    <c:choose>
        <c:when test="${score>=90}">
            你的成绩是优秀!
        </c:when>
        <c:when test="${score>=80}">
            你的成绩是良好!
        </c:when>
        <c:when test="${score>=70}">
            你的成绩是一般!
        </c:when>
        <c:when test="${score>=60}">
            你的成绩是合格!
        </c:when>
        <c:when test="${score<60}">
            你的成绩是不合格!
        </c:when>
    </c:choose>
    </body>
    示例3(coreforeach)

    jstl中的foreach方法相当于Java中的for循环结构:

    <body>
    <%
        ArrayList<String> people = new ArrayList<>();
        people.add(0,"oneone");
        people.add(1,"twotwo");
        people.add(2,"threethree");
        people.add(3,"fourfour");
        request.setAttribute("list",people);
    %>
    <%--
        var:每次要遍历出来的变量
        items:要遍历的对象
        begin:开始的下标
        end:结束的下标
        step:步长
    --%>
    <c:forEach var="people" items="${list}" begin="0" end="3" step="1">
        <c:out value="${people}"/>
        <br>
    </c:forEach>
    </body>
  • 相关阅读:
    JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
    Java内部类详解 2
    内部类详解(很详细)
    《JAVA与模式》之简单工厂模式
    《JAVA与模式》之适配器模式
    多态
    java Final关键字
    java实例初始化块
    tween.js
    three.js 之旅 (三)
  • 原文地址:https://www.cnblogs.com/awong18/p/13377576.html
Copyright © 2011-2022 走看看