• JSP知识点总结-DX的笔记


    认识JSP

    jsp中可以写java代码

    基本使用

    • jsp脚本

      • 作用: 在jsp中创建局部变量,使用流程控制语句,使用if等等,类似于java中方法的内容

      • 语法: <%java脚本%>

        <%
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String now = sdf.format(new Date());
        %>
        
        • 1
        • 2
        • 3
        • 4
      • 注意:

        • java 脚本可以写多个
        • java脚本的最终翻译到_jspService的方法体中
        • java脚本中不能创建方法
    • jsp输出表达式

      • 作用: 将java脚本运行结果输出到浏览器

      • 语法: <%=表达式%>

        当前时间是:<%=now%>
        
        • 1
      • println()方法中能写什么这个表达式就能写什么

      • 注意:java输出表达式后面不能写;

    • jsp声明

      • 作用: 声明java成员变量和成员方法

      • 语法: <%!成员变量或者成员方法%>

        <%!
            //声明成员变量
            private String sname;
            private int age;
        %>
        
        <%!
            //声明成员方法
            public void setAge(int age){
                this.age = age;
            }
            public void setSname(String sname){
                this.sname = sname;
            }
        %>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
      • 注意:声明标签可以写多个

    • jsp的注释

      • 语法: <%-- --%>

        <%--jsp注释--%>
        
        • 1
      • 注意:

        • jsp注释内容不会出现在浏览器上面
    • jsp的使用原则: jsp中尽量不写java代码

    编译指令

    • 编译指令的作用: 告诉web服务器如何编译jsp

    include指令

    • 作用: 将一个jsp包含在当前jsp中

    • 语法: <%@ include file= “被包含页面的路径”%>

      <h1>外部页面上</h1>
      <%@ include file="haha.jsp"%>
      <h1>外部页面下</h1>
      
      • 1
      • 2
      • 3
    • 注意:

      • 被包含的页面代码会全部包含进来,会出现页面中多个html根节点
      • 所以被包含的页面一般只写需要显示的内容,只写代码片段
      • 需要嵌入在哪里就在哪里写include指令
      • 被包含的页面会在翻译阶段直接将内容合并在外部java文件中(先合并再翻译)

    page指令

    • 作用: 告诉web服务器如何编译jsp,很重要,但一般不需要我们写,用默认的就好

    • 语法: <%@ page 属性1=值1 属性2=值2 …%>

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      
      • 1
    • 属性:

      • contentType : 指定输出结果的数据类型以及编码格式
      • language : 告诉web服务器,就是jsp使用什么语言翻译,默认值是 java,不能动
      • buffer : 指定jsp中缓冲区大小.
      • autoFlush : 自动刷新缓冲区
      • extends : 指定翻译的类的父类
      • import : 指定java脚本中运行所需要导入的外部类
      • isELIgnored : 是否忽略el表达式
      • isThreadSafe : 是否是线程安全
      • pageEncoding : 指定jsp编写的时候使用的字符集
      • session : jsp是否禁用session对象
      • errorPage : 指定错误处理页面,正常页面指定了errorPage.isErrorPage属性必须是false
      • isErrorPage : 是否是错误处理页面,错误处理页面无需指定errorPage

    jsp的内置对象

    • jsp本质就是servlet,所以我们写java代码的时候,会经常用到servlet的API.
    • 为了方便我们的使用,所以jsp提供9个内置对象供我们使用
      • HttpServletRequest request
      • HttpServletResponse response
      • HttpSession session
      • ServletContext application
      • PageContext pageContext
      • ServletConfig config
      • JspWriter out
      • Object page
      • Exception exception

    域对象

    • pageContext

      • 第一个作用是获取其他8个内置对象

      • 第二个作用是作为域对象使用的

      • 这个三个参数的方法可以将键值对保存在指定的域对象

        <%
        // public static final int PAGE_SCOPE = 1;
        // public static final int REQUEST_SCOPE = 2;
        // public static final int SESSION_SCOPE = 3;
        // public static final int APPLICATION_SCOPE = 4;
        pageContext.setAttribute("age","20",PageContext.SESSION_SCOPE);
        %>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • 使用pageContext简化版获取指定域对象中的值

        • findAttribute(属性)
        • 该方法获取属性会采用遍历所有域对象的方式查找
    • 其他举例

      <%
      session.setAttribute("user","admin");
      pageContext.setAttribute("pass","123");%>
      
      <%=session.getAttribute("user")%><br>
      <%=pageContext.getAttribute("pass")%><br>
      <%=session.getAttribute("age")%><br>
      <%=pageContext.getAttribute("age",PageContext.SESSION_SCOPE)%><br>
      <%=pageContext.findAttribute("age")%><br>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    EL表达式

    • jsp中我们使用Java做什么?
      • 声明变量,执行流程控制语句 - 使用jsp标签
      • 输出到浏览器运行结果 - 使用jsp输出表达式 <%=表达式%>
    • el表达式(Expression Language表达式语言):jsp输出表达式的替代者
    • 语法: ${表达式}
    • 作用: 主要用于获取域对象的属性值,也可用来输出一些基本算数表达式和逻辑表达式结果
    • 使用: 无需导入任何jar
    • 从域对象中取值:
      • ${属性名} 类似于 pageContext.findAttbuite(“属性名”) 挨个按照从小到大的顺序从域对象中查找
      • ${域范围.属性名} 从指定的域对象中查找属性
      • 域范围: pageScope requestScope sessionScope applicationScope
    <%
        request.setAttribute("sname","张三");
        session.setAttribute("sname","李四");
    
        // 使用el表达式从域对象中取数组属性
        String[] names = {"haha","hehe","heihei"};
        session.setAttribute("names",names);
    
        // 使用el表达式从域对象中取map属性
        Map<String,Object> student = new HashMap<>();
        student.put("sname","王五");
        student.put("sage",30);
        request.setAttribute("student",student);
    
        // map类型的属性,获取值的方式: map["key"] 或者  map.key
        // 使用el表达式获取自定义数据类型的属性
        Student s1 = new Student();
        s1.setSname("admin1");
        s1.setSage(20);
        session.setAttribute("s1",s1);
    
        // 使用el表达式获取自定义数据类型的集合的属性
        Student s2 = new Student();
        s2.setSname("admin2");
        s2.setSage(30);
        Student s3 = new Student();
        s3.setSname("admin3");
        s3.setSage(40);
        List<Student> ss = new ArrayList<>();
        ss.add(s1);
        ss.add(s2);
        ss.add(s3);
        request.setAttribute("ss",ss);
    %>
    
    ${10}<br>
    ${10 + 10}<br>
    ${"哈哈"}<br>
    张三的姓名是: ${sname}<br>
    李四的姓名是: ${sessionScope.sname}<br>
    第一个人的名字是: ${names[0]}<br>
    第二个人的名字是: ${names[1]}<br>
    第三个人的名字是: ${names[2]}<br>
    学生的名字是: ${student["sname"]}<br>
    学生的年龄是: ${student["sage"]}<br>
    学生的名字是: ${s1.sname}<br>
    学生的年龄是: ${s1.sage}<br>
    第一个学生的名字是: ${ss[0].sname}<br>
    第一个学生的年龄是: ${ss[0].sage}<br>
    第二个学生的名字是: ${ss[1].sname}<br>
    第二个学生的年龄是: ${ss[1].sage}<br>
    第三个学生的名字是: ${ss[2].sname}<br>
    第三个学生的年龄是: ${ss[2].sage}<br>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    标签

    转发标签

    • 作用: 实现转发操作

    • 语法:

      <jsp:forward page="转发的资源路径">
      
      • 1
      <jsp:forward page="index.jsp">
          <jsp:param name="user" value="admin"/>
          <jsp:param name="pass" value="123"/>
      </jsp:forward>
      
      • 1
      • 2
      • 3
      • 4
    • 注意:转发时可以携带请求参数(必须使用请求参数标签)

    include标签(动态include)

    • 作用: 将一个jsp包含进当前jsp

    • 语法: <jsp:include page=“被包含的资源路径”>

      <h1>外部页面上</h1>
      <jsp:include page="haha.jsp">
          <jsp:param name="user" value="admin"/>
          <jsp:param name="pass" value="123"/>
      </jsp:include>
      <h1>外部页面下</h1>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      <%--haha.jsp文件获取请求参数--%>
      帐号是: <%=request.getParameter("user")%><br>
      密码是: <%=request.getParameter("pass")%><br>
      
      • 1
      • 2
      • 3
    • 注意:这个include标签效果与编译指令的include是一样的,但是实现机制不同

    • 动态include与静态include的区别?

      • 原理不同: 静态include是先合并再翻译,动态include是先翻译再合并
      • 传参不同: 静态include不能传递请求参数,动态include可以传递请求参数
      • 语法不同: 静态include是编译指令,动态include是动作指令

    JSTL核心标签库

    • 使用步骤:

      • 先导入jar

      • 在需要使用标签的页面上,使用taglib编译指令导入标签库

        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        
        • 1
      • 在jsp中使用标签

    set标签

    • 作用: 设置域对象中的属性值

    • 语法:

       <c:set>
      
      • 1
    • 注意: 工作中使用不多,了解即可

    out标签

    • 作用: 输出表达式结果到浏览器

    • 语法:

       <c:out value="表达式">
      
      • 1
    • 注意: 功能与el表达式相同,使用el表达式替代

    if标签

    • 作用: 类似于if语句

    • 语法:

       <c:if test="表达式"></c:if>
      
      • 1

    choose标签

    • 作用: 类似于switch语句

    • 语法:

       <c:choose>
           <c:when test="表达式"></c:when>
           ......可以写多个
           <c:otherwise></c:otherwise>
       </c:choose>
      
      • 1
      • 2
      • 3
      • 4
      • 5

    以上标签代码合集

    <%@ page import="com.bjpowernode.pojo.Student" %>
    <%@ 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>
        <%
            Student s = new Student();
            s.setSname("哈哈");
            s.setSage(20);
            // 1 = 男 0 = 女
            s.setGender(5);
            request.setAttribute("stu",s);
        %>
        
        <%--   1)可以直接修改域对象中的数据的属性     --%>
        学生姓名是: ${stu.sname}<br>
        <c:set target="${stu}" property="sname" value="呵呵"></c:set>
        学生姓名是: ${stu.sname}<br>
        <%--  2) 直接在域对象中添加一个键值对  --%>
        <c:set var="user" value="嘿嘿" scope="request"></c:set>
        学生姓名是: ${requestScope.user}<br>
        
        <%--  3) 使用out标签输出域对象中的属性值  --%>
        学生姓名是: <c:out value="${requestScope.user}"></c:out> <br>
        
        <%--  4) 根据域对象中学生的性别的值,默认选中单元按钮的值  --%>
        性别: <input type="radio" name="gender" value="0"
            <c:if test="${stu.gender == 0}">checked = "checked"</c:if>
        >女<input type="radio" name="gender" value="1"
            <c:if test="${stu.gender == 1}">checked = "checked"</c:if>
        >男<br>
        <%--  5) 根据域对象中学生的性别的值,转换显示结果  --%>
        学生性别:
            <c:if test="${stu.gender == 1}">男</c:if><c:if test="${stu.gender == 0}">女</c:if>
    
        <%--  6) 根据域对象中学生的性别的值,转换显示结果  --%>
        <br>学生性别:
            <c:choose>
                <c:when test="${stu.gender == 1}">
                        男
                </c:when>
                <c:when test="${stu.gender == 0}">
                        女
                </c:when>
                <c:otherwise>不男不女</c:otherwise>
            </c:choose>
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    for标签

    • 作用: 执行for循环

    • 语法:

      <c:for var="变量名" items = "需要迭代的集合或者数组"></c:for>
      
      • 1
      <c:forEach var="student" items="${list}" varStatus="sta">
          <tr
              <c:if test="${sta.count % 2 == 1}"> style="background-color:pink;"</c:if>
          >
              <td>${sta.count}</td>
              <td>${student.sname}</td>
              <td>${student.sage}</td>
              <td>
                  <c:if test="${student.gender == 1}">男</c:if>
                  <c:if test="${student.gender == 0}">女</c:if>
              </td>
          </tr>
      </c:forEach>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • varStatus属性可以方便我们实现一些与行数相关的功能
        • current:当前这次迭代的(集合中的)项
        • index:当前这次迭代从 0 开始的迭代计数
        • count:当前这次迭代从 1 开始的迭代计数
        • first:用来表明当前这轮迭代是否为第一次迭代的标志,返回true/false
        • last:用来表明当前这轮迭代是否为最后一次迭代的标志,返回true/false

    forTokens 标签

    • 作用: 根据指定字符将字符串分割为字符串数组然后迭代

    • 例子: “sd,fs,df,sd,fs,df”,将字符串取出子串 “sd” “fs”

    • 实现:

      • 将字符串分割为字符串数组
      • 迭代字符串数组取出元素
    • 语法:

      <c:forTokens items="sd,fs,df,sd,fs,df" delims="," var="s" varStatus="sta">
      	第${sta.count}个字符是${s}<br>
      </c:forTokens>
      
      • 1
      • 2
      • 3

    redirect标签

    • 作用: 实现重定向

    • 语法:

      此处实现重定向:<c:redirect url="index.jsp"></c:redirect>
      
      • 1
  • 相关阅读:
    MySQL 关键特性一:插入缓冲、双写缓冲
    Ansible中的角色使用
    Linux系统导入导出docker容器的sql数据
    棱镜七彩亮相工控中国大会,以软件供应链安全助力新型工业化高质量发展
    “再谈”协议
    Unity(第二十四部)UI
    基于Spring Boot 框架的试卷自动生成系统的设计与实现
    JVM——GC垃圾回收机制
    信奥中的数学:同余
    easyexcel 2.2.6 新版本以列表的形式读取 Excel
  • 原文地址:https://blog.csdn.net/qq_43528471/article/details/125509707