JavaWeb-JSP


JSP


1. JSP

  1. 概念:JSP(Java Server Pages): java服务器端的界面

    • JSP是一个特殊的页面,底层的实现是Servlet,在JSP中既可以使用html的标签也可以定义Java代码。JSP主要用于简化书写
  2. 原理

    • JSP的本质就是一个Servlet
  3. JSP脚本

    1. JSP脚本的四种定义方式:
      • <% 代码 %> 定义Java代码,在service方法中。service方法可以定义什么,脚本中就可以定义什么。
      • <%! 代码 %> 定义Java代码,在jsp转换后的java类的成员位置
      • <%= 代码 %> 定义的Java代码,一般用作输出。可以将定义的Java变量的值输出到页面上
      • <%@ 指令名称 属性1=属性值1 属性2=属性值2 ... %>
        • 指令名称的分类:
          1. page : 用于配置JSP页面的 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
            • contentType:等同于response.setContentType();
              1. 设置响应体的mime类型以及字符集
              2. 设置当前jsp页面的编码,如果使用非高级IDE编写则需指定怕个Encoding属性设置当前页面的字符集
            • import:用于导入Java的包
            • errorPage:当前页面发生异常后,会自动的跳转到指定的错误页面
            • isErrorPage:标识当前页面是否为错误界面
              • true:是,可以使用内置对象exception
              • false:否,不可以使用内置对象exception
          2. taglib : 导入资源
            • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> JSTL标签库
          3. include : 导入页面包含的资源文件进页面中
            • <%@ include file="top.jsp" %>
      • <%%>与<%!%>位置的区别:
      public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
          implements org.apache.jasper.runtime.JspSourceDependent,
                       org.apache.jasper.runtime.JspSourceImports {
            int a = 200;  //<%! int a = 200; %>
            int b = 100;  //<%! int b = 100; %>
          // JSP中的部分内置对象
          final javax.servlet.jsp.PageContext pageContext;    
          javax.servlet.http.HttpSession session = null;
          final javax.servlet.ServletContext application;
          final javax.servlet.ServletConfig config;
          javax.servlet.jsp.JspWriter out = null;
          final java.lang.Object page = this;
          javax.servlet.jsp.JspWriter _jspx_out = null;
          javax.servlet.jsp.PageContext _jspx_page_context = null;
              response.setContentType("text/html;charset=UTF-8");     //<%@ page contentType="text/html;charset=UTF-8" language="java" %>
            int i = 10;   //<% int i = 10; %>
            int j = 20;   //<% int j = 20; %>
            out.print(a); //<%=a%>    下同
            out.print(b);
            out.print(i);
            out.print(j);
            out.write("</h1>\n");
      }
  4. JSP的注释

    1. HTML注释:
      • 只能注释html代码片段
    2. JSp注释:
      • <%-- --%> 可以注释JSP中的所有内容
  5. JSP的九大内置对象

    1. 在JSP中不需要创建,可以直接使用的对象
    2. 具体的对象
    变量名实际类型作用
    pageContextPageContext当前页面共享数据,还可以通过此对象获取其他八个内置对象
    requestHttpServletRequest一次请求访问的多个资源(转发)
    sessionHttpSession一次会话的多个请求间
    applicationServletContext所有用户间共享数据
    responseHttpServletResponse响应对象
    pageObject当前Servlet的对象(this)
    outJspWriter输出对象,将数据输出到页面上
    configServletConfigServlet的配置对象
    exceptionThrowable异常对象

2. EL表达式

  1. 概念:EL(Expression Language)表达式语言
  2. 作用: 替换和简化jsp页面中java代码的书写
  3. 语法格式:${表达式}
  4. 注意:
    • JSP默认支持EL表达式,当需要忽略EL表达式时:
      1. 设置Jsp中的page指令中: isELIgnored="true"忽略当前页面中的所有EL表达式 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true" %>
      2. ${表达式}:忽略当前的EL表达式
  5. EL表达式的使用:
    1. 运算
      • 运算符:
        1. 算数运算符: + - * /(div) %(mod)
        2. 比较运算符:> < >= <= == !=
        3. 逻辑运算符:&&(and) ||(or) !(not)
        4. 空运算符:empty
          • 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
          • ${empty list}: 判断字符串、集合、数组对象是否为null或者长度为0
          • ${not empty list}:判断字符串、集合、数组对象是否不为null并且长度>0
    2. 获取值
      1. EL表达式只能通过域对象获取值
      2. 获取值的方法:
        1. ${域名称.键名}:从指定域中获取指定键的值

          • 域名称
          域名称内置对象生命周期
          pageScopepageContext当前页面有效
          requestScoperequest一次请求间有效
          sessionScopesession一次会话间有效
          applicationScopeapplication(ServletContext)整个web生命周期都有效
          • 例如:
            <% request.setAttribute("name","张三"); %>
            <%-- 使用EL表达式获取值 --%>
            ${requestScope.name}
        2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止

        3. 获取对象、List集合、Map集合的值

          1. 对象:${域名称.键名.属性名}
            • 本质上会调用对象相对应的getter方法
          2. List集合:${域名称.键名[索引]}
          3. Map集合:
            • ${域名称.键名.key名称}
            • ${域名称.键名["key名称"]}
    3. 隐式对象
      1. EL表达式中共有11个隐式对象
      2. pageContext:
        • 获取其他八个内置对象
        • ${pageContext.request.contextPath}: 动态获取虚拟目录

3. JSTL(c标签)

  1. 概念:JSTL(Java Server Pages Tag Library)JSP标准标签库,是由Apache组织提供的免费的JSP标签
  2. 作用:简化和替换JSP页面上的代码
  3. 使用步骤:
    1. 导入JSTL的相关jar包
    2. 引入标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. 使用JSTL
  4. 常见的JSTL标签:
    1. if:相当于Java中的if语句但是没有else。
      1. 属性:
        • text 必须属性,接受boolean表达式
        • 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
        • 一般情况下,test属性值会结合el表达式一起使用 如判断集合list不为空则显示语句<c:if text="${not empty list}">集合list不为空</c:if>
    2. choose:相当于Java中的switch语句
      • choose标签内的声明:
      <% request.setAttribute("number",4); %>
      <c:choose>
          <c:when test="${number == 1}">星期一</c:when>
          <c:when test="${number == 2}">星期二</c:when>
          <c:when test="${number == 3}">星期三</c:when>
          <c:when test="${number == 4}">星期四</c:when>
          <c:when test="${number == 5}">星期五</c:when>
          <c:when test="${number == 6}">星期六</c:when>
          <c:when test="${number == 7}">星期日</c:when>
          <c:otherwise>你的输入不正确!</c:otherwise>
      </c:choose>
    3. forEach:相当于Java中的for循环语句
      • Java中的for循环操作常用于:

        1. 执行重复的操作,如:
        for(int i = 0; i < 10; i++){
            
        }
        1. 遍历集合容器
        List<User> list = new ArrayList<>();
        for(User user : list){
            
        }
      • JSTL的forEach实现:

        1. 执行重复操作:
          • 属性:
            • begin: 开始值
            • end: 结束值
            • var: 变量
            • step: 步长(变量的增加长度)
            • varStatus: 循环状态对象
              • index: 容器中元素的索引
              • count: 循环次数,从1开始
        2. 遍历容器
          • 属性:
            • items:容器对象
            • var: 容器中元素的临时变量
            • varStatus: 循环状态对象
              • index: 容器中元素的索引
              • count: 循环次数,从1开始
        <%-- 使用JSTL执行循环操作 --%>
        <c:forEach begin="1" end="10" var="i" step="1">
            ${i}<br>
        </c:forEach>
        <hr><%-- 使用JSTL执行遍历操作 --%>
        <%
            List<String> list = new ArrayList<>();
            list.add("111");
            list.add("222");
            list.add("333");
            list.add("444");
            list.add("555");
            request.setAttribute("list",list);
        %>
        <c:forEach items="${list}" var="str" varStatus="s">
            ${str} <b>${s.index}</b> <i>${s.count}</i> <br>
        </c:forEach>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值