JSP的使用

目录
一、 基本介绍
二、JSP运行原理
三、Page指令
四、JSP常用的三种脚本
1.声明脚本
2.表达式脚本
3.代码脚本
五、EL表达式
1.JSP内置九大对象
2.JSP四大域对象
3.JSP的请求转发标签
六、EL表达式
1.作用
2.基本使用
3.EL的运算操作
七、El的11个隐含对象
八、JSTL标签库
1.作用
2.组成
3.前提准备
4.基本使用
九、总结


一、 基本介绍

  jsp全称 Java Server Pages(Java 的服务器页面),是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

  • JSP 这门技术的最大的特点在于,写 JSP 就像在写 HTML
  • 相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码,为用户提供动态数据
  • 相比 Servlet 而言,Servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产 生动态数据的同时,也很容易对数据进行排版

💡 提示:
jsp 页面不能像 HTML 页面, 直接用浏览器运行。只能通过浏览器访问 Tomcat 来访问。因为JSP运行在服务端

二、JSP运行原理

 第一次访问jsp页面的时候。Tomcat 服务器会把 jsp 页面解析成为一个 java 源文件。并 且 对 它 进 行 编 译 成 为 .class 字 节 码 程 序 。

.class文件地址

.class文件地址

使用JSP时候我们需要导入jsp.jarservlet-api.jar包,它们都在Tomcat安装目录/lib下。如图:

在这里插入图片描述

三、Page指令

<%@ page contentType="text/html;charset=UTF-8" language="java" import="com.jl.MyServlet" pageEncoding="utf-8" %>
  1. language 表示 jsp 翻译后是什么语言文件, 只支持 java
  2. contentType 表示 jsp 返回的数据类型,对应源码中 response.setContentType()参数值
  3. pageEncoding 属性 表示当前 jsp 页面文件本身的字符集
  4. import 属性 跟 java 源代码中一样。用于导包,导类

四、JSP常用的三种脚本

1.声明脚本

<%! 声明java代码 %>

声明脚本的作用用于定义 jsp 的需要属性、方法、静态代码块和内部类等。

📝示例:

<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: long
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%!
    private Integer id;
    private String name = "老韩同学";
    private String job;
    private static String company;
    private Double sal;
    //静态代码块
    static{
    company = "字节跳动";
    }
    //声明方法
    public String getName() {
    return name;
    }
  %>
  </body>
</html>

2.表达式脚本

<%=表达式%>

表达式脚本的作用是在JSP页面上输出数据。但要注意❗的是表达式脚本中的表达式不能以分号结束

📝示例:·

<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: long
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%!
    String name = "张三";
  %>
      用户名= <%=name%><br/>
      工作是: <%="java 工程师"%><br/>
  </body>
</html>

3.代码脚本

<% java 代码%>

.代码脚本的作用是可以在 jsp 页面中,使用Java语言编写我们需要的功能。而且代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据

📝示例:

<%@ page import="java.util.ArrayList" %>
<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: long
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%!
    ArrayList<String> arrayList = new ArrayList();
  %>
  <%
    arrayList.add("123");
  %>
  </body>
</html>

4.JSP其他内容

📝JSP注释

  1. 第一种:

    <%--注释内容--%>
    
  2. 第二种:因为JSP可以使用java,所以java的注释也适用(针对java代码)

五、JSP内置对象

1. JSP内置九大对象

对象描述
requestHttpServletRequest 接口的实例,请求实例
responseHttpServletResponse 接口的实例,响应实例
outJspWriter类的实例,用于把结果输出至网页上
sessionHttpSession类的实例,会话对象
applicationServletContext类的实例,与应用上下文有关
configServletConfig类的实例,
pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问。是一个域对象,可以使用setAttribute(),作用范围是本页面
page类似于Java类中的this关键字,就是当前JSP页面
ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象

因为是内置对象,所以不用创建,可以直接使用

2. JSP四大域对象

  1. pageContext(域对象,存放的数据只能在当前页面使用)
    在这里插入图片描述

  2. request (域对象,存放的数据在一次 request 请求有效)
    在这里插入图片描述

  • 请求转发可以。但重定向因为不是同一次请求,所以获取不到
  1. session(域对象,存放的数据在一次会话有效)

在这里插入图片描述

  1. application(域对象,存放的数据在整个 web 应用运行期间有效, 范围更大)

  2. 域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数
    据的存储范围

  3. 从存储范围(作用域范围看) pageContext < request < session < application

3. JSP的请求转发标签

<jsp:forward page="转发路劲"></jsp:forward>

📝示例:

<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: long
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <jsp:forward page="/test02"></jsp:forward>
  </body>
</html>

六、EL表达式

EL表达式全称:Expression Language(表达式语言)

1.作用

代替 jsp 页面的表达式脚本<%=java代码%>,以获取某个web域中的对象

2.基本使用

${key1}
  1. EL 表达式在输出 null 时,输出的是 “”
  2. jsp 表达式脚本输出 null 的时,输出的是 “null” 字符串
<%@ page import="com.jl.Person" %>
<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: long
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    request.setAttribute("key","123");
    Person person = new Person();
    person.setName("666");
    request.setAttribute("person",person);
  %>
  ${key}
  ${person.name}
  </body>
</html>

3.EL的运算操作

  1. 关系运算符
关系运算符说明范 例结果
== 或 eq等于$ { 5= = 5 }或${ 5 eq 5 }true
! =或 ne不等于 5 ! = 5 或 { 5 != 5}或 5!=5{ 5 ne 5 }false
< 或 lt小于$ { 3 <5 }或${ 3 lt 5 }true
> 或 gt大于$ { 3 > 5}或${ 3 gt 5 }false
<= 或 le小于等于$ { 3 <=5}或${ 3 le 5 }true
>= 或 ge大于等于$ { 3 >= 5 }或${ 3 ge 5 }false
  1. 逻辑运算
逻辑运算符说明范例结果
&& 或 and与运算$[12 == 12 &&12<11} 或 ${ 12 == 12 and 12<11}false
|| 或 or或运算${ 12 == 12ll12<11} 或 ${12 == 12 or 12<11}true
! 或 not取反运算{!true} 或 ${not true }false
  1. 算数运算
算数运算符说明范例 心结果
+加法${ 12 +18 }30
-减法${18 - 8 }10
*乘法$12 * 12 }144
/ 或 div除法${144/ 12} 或 ${ 144 div 12 }12
% 或 mod取模${ 144 % 10 } 或 ${144 mod 10}4
  1. EL的empty运算
// 语法
${empty 值}
// 为空返回true,反之则为false

以下情况,结果为空:

  • 值为空串的时
  • 值是 Object 类型数组,长度为零
  • list 集合,元素个数为零
  • map 集合,元素个数为零

七、El的11个隐含对象

变量类型说明
pageContextPageContextlmpl获取jsp中的九大内置对象
pageScopeMap<String,Object>获取 pageContext域中的数据
requestScopeMap<String,Object>获取 Request域中的数据
sessionScopeMap<String,Object>获取Session域中的数据
applicationScopeMap<String,Object>获取ServletContext域中的数据
paramMap<String,String>获取请求参数的值
paramValuesMap<String,String>获取多个值
headerMap<String,String>获取请求头的信息
headerValuesMap<String,String>获取请求头的多个信息
cookieMap<String,Cookie>获取当前请求的 Cookie信息
initParamMap<String,String>获取在web.xml中配置的上下文参数

这里要区分EL表达式中的pageContext和JSP内置的pageContext

EL表达式中的pageContext可以获取JSP内置的九大对象

JSP内置的pageContext就是一个域对象

💡EL获取四个特定域中的属性

变量类型说明
pageScopeMap<String,Object>获取pageContext域中的数据
requestScopeMap<String,Object>获取Request域中的数据
sessionScopeMap<String,Object>获取Session 域中的数据
applicationScopeMap<String,Object>获取 ServletContext域中的数据

八、JSTL标签库

JSTL标签库:JSP Standard Tag Library JSP 标准标签库

1.作用

JSTL 是为了替换代码脚本(<% java代码 %>)。这样 jsp 页面变得更佳简洁

2.组成

JSTL由五个标签库组成

功能范围URI前缀
核心标签库(重点)http://java.sun.com/isp/jstl/corec
格式化http://java.sun.com/jsp/jstl/fmtfmt
函数http://java.sun.com/jsp/jstl/functionsfn
数据库(不使用)http://java.sun.com/jsp/jstl/sqlsql
XML(不使用)http://java.sun.com/jsp/jstl/xmlx

3.前提准备

使用JSTL前需要导入两个包:taglibs-standard-impl-x.x.x.jartaglibs-standard-spec-x.x.x.jar

📥taglibs-standard-spec-1.2.5.jar下载地址

📥taglibs-standard-impl-1.2.5.jar下载地址

4.基本使用

这里演示core核心库的使用

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: jinglong
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <c:set scope="request" var="User" value="666"/>
  </body>
</html>

👆<c:set>可以向域中保存数据。它和 域对象.setAttribute(key,value);等价。

  1. scope 属性设置保存到哪个域
  2. page 表示 PageContext 域(默认值)
  3. var 属性设置 key 的值
  4. value 属性设置值
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: long
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <c:set scope="request" var="User" value="666"/>

    <c:if test="${ 10 > 2 }">
      <h1>10 > 2 为真</h1>
    </c:if>
  
  </body>
</html>

👆if 标签用来做 if 判断。 test 属性表示判断的条件(用 EL 表达式输出)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: jinglong
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
      
      <c:set scope="request" var="money" value="1000"/>
      <c:choose>
        <c:when test="${money>=888}">
          余额充足
        </c:when>
        <c:when test="${money<888}">
          余额不足
        </c:when>
      </c:choose>
  
    </body>
</html>

👆<c:choose><c:when">标签和Java中的switch很像

👇JSP遍历数组,集合的方式

<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page  %><%--
  Created by IntelliJ IDEA.
  User: long
  Date: 2022/9/8
  Time: 9:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
      
    <h1>第1种遍历方式:普通循环</h1>
      <%--
      1.遍历 1 到 5,
      2. 输出 begin 属性设置开始的索引 end 属性设置结束的索引
      3. var 属性表示循环的变量(也是当前正在遍历到的数据)
      4. 等价 for (int i = 1; i <= 5; i++) {}
      5. 在默认情况下, i 每次会递增1。但也可设置步长step
      --%>
    <c:forEach begin="1" end="5" var="i">
      <li>排名=${i}</li>
    </c:forEach>


    <h1>第2种遍历方式:遍历数组</h1>
    <%
      request.setAttribute("sports", new String[]{"打篮球", "乒乓球"});
    %>
    <%--
        <c:forEach items="${ requestScope.sports }" var="item"/>
        1. items 遍历的集合/数组
        2. var 遍历到的数据
        3. 等价 for (Object item: arr) {}
    --%>
    <c:forEach items="${requestScope.sports}" var="sport">
      运动名称= ${sport}<br/>
    </c:forEach>


    <h1>第3种遍历方式:遍历Map</h1>
    <%
      Map<String, Object> map = new HashMap<>();
      map.put("key1", "北京");
      map.put("key2", "上海");
      map.put("key3", "天津");
      request.setAttribute("cities", map);
    %>
    <%--
        1. items 遍历的map集合
        2. var 遍历到的数据
        3. entry.key 取出key
        4. entry.value 取出值
    --%>
    <c:forEach items="${requestScope.cities}" var="city">
      城市信息: ${city.key}
              ${city.value}<br/>
    </c:forEach>


    <h1>第4种遍历方式:遍历List</h1>
    <%
      List<String> person = new ArrayList<>();
      person.add("张三");
      person.add("李四");
      request.setAttribute("person", person);
    %>
    <%--
        items 表示遍历的集合
        var 表示遍历到的数据
        begin 表示遍历的开始索引值 ,从0开始计算
        end 表示结束的索引值
        step 属性表示遍历的步长值
        varStatus 属性表示当前遍历到的数据的状态,可以得到step,begin,end等属性值
    --%>
    <c:forEach items="${requestScope.person}" var="person">
      ${person}
    </c:forEach>
  </body>
</html>

九、总结

  1. JSP三大脚本:声明脚本、表达式脚本、代码脚本
  2. JSP有九大内置对象
  3. JSP有四大域对象
  4. EL表达式是为了替代JSP的表达式脚本
  5. EL拥有11个隐含对象
  6. JSTL是为了替代JSP的代码脚本

最后希望大家多多关注^_^,你们的关注是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艺术留白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值