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文件地址

JSP的使用_第1张图片

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

JSP的使用_第2张图片

三、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内置九大对象

对象 描述
request HttpServletRequest 接口的实例,请求实例
response HttpServletResponse 接口的实例,响应实例
out JspWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例,会话对象
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例,
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问。是一个域对象,可以使用setAttribute(),作用范围是本页面
page 类似于Java类中的this关键字,就是当前JSP页面
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

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

2. JSP四大域对象

  1. pageContext(域对象,存放的数据只能在当前页面使用)
    JSP的使用_第3张图片

  2. request (域对象,存放的数据在一次 request 请求有效)
    JSP的使用_第4张图片

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

JSP的使用_第5张图片

  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个隐含对象

变量 类型 说明
pageContext PageContextlmpl 获取jsp中的九大内置对象
pageScope Map 获取 pageContext域中的数据
requestScope Map 获取 Request域中的数据
sessionScope Map 获取Session域中的数据
applicationScope Map 获取ServletContext域中的数据
param Map 获取请求参数的值
paramValues Map 获取多个值
header Map 获取请求头的信息
headerValues Map 获取请求头的多个信息
cookie Map 获取当前请求的 Cookie信息
initParam Map 获取在web.xml中配置的上下文参数

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

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

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

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

变量 类型 说明
pageScope Map 获取pageContext域中的数据
requestScope Map 获取Request域中的数据
sessionScope Map 获取Session 域中的数据
applicationScope Map 获取 ServletContext域中的数据

八、JSTL标签库

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

1.作用

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

2.组成

JSTL由五个标签库组成

功能范围 URI 前缀
核心标签库(重点) http://java.sun.com/isp/jstl/core c
格式化 http://java.sun.com/jsp/jstl/fmt fmt
函数 http://java.sun.com/jsp/jstl/functions fn
数据库(不使用) http://java.sun.com/jsp/jstl/sql sql
XML(不使用) http://java.sun.com/jsp/jstl/xml x

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>

可以向域中保存数据。它和 域对象.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>

标签和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种遍历方式:遍历Maph1>
    <%
      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种遍历方式:遍历Listh1>
    <%
      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的代码脚本

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

你可能感兴趣的:(JavaWeb,java,servlet,tomcat)