JSP 基础

JSP

  • JSP: Java Server Pages, Java 服务端页面
  • 一种动态的网页技术,其中既可以定义 HTML , JS, CSS 等静态内容,还可以定义 Java 代码等动态内容
  • JSP = HTML + Java
  • 简化开发,避免在 Servlet 中直接输出 HTML 标签

快速入门

  • 导入 JSP 坐标

    1
    2
    3
    4
    5
    6
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
    </dependency>
  • 创建 JSP 文件

  • 编写 HTML 标签和 Java 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <%@ page contentType="text/html;charset=UTF-8" language="java"  %>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body>
    <h1>Hello JSP!</h1>
    <%
    System.out.println("Hello JSP");
    %>
    </body>
    </html>

JSP 原理

  • JSP 本质上是一个 Servlet

  • JSP 在被访问时,由 JSP 容器(Tomcat)将其转换为 Java 文件(Servlet) ,再由 JSP 容器(Tomcat) 将其编译,最终对外提供服务的是字节码文件

JSP 脚本

  • JSP 脚本用于在 JSP 页面内定义 Java 代码

  • 脚本分类

    1. <%...%>: 内容会直接放到 _jspService() 方法中
    2. <%=...>: 内容会放到 out.print() 中,作为 out.print() 的参数
    3. <%!...%>: 内容会放到 _jspService() 方法之外,被类直接包含

JSP 缺点

由于 JSP 页面内既可以定义 HTML 标签,又可以定义 Java 代码,造成了许多问题

  1. 书写麻烦:特别是复杂的页面
  2. 可读性不高
  3. 复杂度高:运行需要依赖各种环境, JRE,JSP 容器, JavaEE…
  4. 占内存和磁盘: JSP 会自动生成 .java 和 .class 文件占磁盘,运行的 .class 文件占内存
  5. 调试困难: 出错后,需要找到自动生成的 .java 文件进行调试
  6. 不利于团队协作,前端人员不会 java, 后端人员 不精 HTML

JSP 已经逐渐退出历史舞台…

Servlet -> JSP -> Servlet + JSP -> Servlet + HTML + ajax

EL 表达式

  • Expression Language 表达式语言,用于简化 JSP 页面内的 Java 代码

  • 主要功能: 获取数据

  • 语法: ${expression}

    1
    ${brands}//获取域中存储的 key 为 brands 的数据
  • 使用:在 Servlet 中将数据添加到 request 域中并转发给 .jsp 文件,即可在文件中使用数据

    1
    2
    request.setAttribute("status",1);
    request.getRequestDispatcher("/jstl.jsp").forward(request,response);
    1
    ${status}
  • 若 JSP 不识别 EL 表达式,需在 JSP 文件开头加上 isELIgnored="false"

    1
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  • 若在 EL 表达式中使用类的成员,则自动调用对应的 get() 方法

域对象

  • page: 当前页面有效
  • request: 当前请求有效
  • session: 当前会话有效
  • application: 当前应用有效

EL 表达式获取数据,会依次从这4个域中寻找,直到找到为止

JSTL 标签

  • JSP 标准标签库( Jsp Standarded Tag Library), 使用标签取代 JSP 页面上的 Java 代码

快速入门

  • 导入坐标

  • <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    
    1
    2
    3
    4
    5

    * 在 JSP 页面引入 JSTL 标签库

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

    1. <c:if test=""> HTML </c:if> 对 test 的内容进行 if 判断,为 true 则执行中间的 HTML 语句

      1
      2
      3
      <c:if test="${status == 1}">
      <h1>启用</h1>
      </c:if>
    2. <c:forEach items = "brands" var ="brand">HTML</c:forEach> 遍历 items 数组,对每个成员执行 HTML 语句

MVC 模式和三层架构

MVC

  • MVC 是一种分层开发模式

    1. M:Model ,业务模型,处理业务,JavaBean
    2. V:View ,视图,界面展示,JSP
    3. C:Controller ,控制器,处理请求,调用模型和视图,Servlet
  • MVC 优点:

    • 职责单一,互不影响
    • 有利于分工协作
    • 有利于组件重用

三层架构

  • 表现层:接收请求,封装数据,调用业务逻辑层,响应数据
  • 业务逻辑层:对业务逻辑进行封装,组合数据访问层层中的基本功能,形成复杂的业务逻辑功能
  • 数据访问层(持久层):对数据库进行 CRUD 基本操作

JSP 基础
http://mrzzzz1.github.io/2023/03/18/Jsp基础/
作者
Mrzzzz1
更新于
2023年3月22日
许可协议