JSP

134 阅读3分钟

JSP

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

JSP快速入门

  1. 导入JSP坐标
<dependency>
    <groupld>javax.servlet.jsp</groupld>
    <artifactld>jsp-api</artifactld>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
  1. 创建JSP文件
  2. 编写HTML标签和Java代码

JSP原理

  • 概念:Java Server Pages,Java服务端页面

  • JSP = HTML + Java

  • JSP本质上就是一个Servlet

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

Snipaste_2022-10-10_17-17-24.png

JSP脚本

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

  • JSP脚本分类:

    • <%...%>:内容会直接放到_jspServlet()方法之中
    • <%=...%>:内容会放到out.print()中,作为out.print()的参数
    • <%!...%>:内容会放到_jspServlet()方法之外,被类直接包含
  • 脚本标签可以进行截断操作

JSP缺点

  • 由于JSP页面内,既可以定义HTML标签,又可以定义Java代码,造成了以下问题:
  1. 书写麻烦:特别是复杂的页面
  2. 阅读麻烦
  3. 复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE...
  4. 占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存
  5. 调试困难:出错后,需要找到自动生成的.java文件进行调试
  6. 不利于团队协作:前端人员不会Java,后端人员不精HTML
  7. ...
  • JSP已经逐渐退出历史舞台

EL表达式

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

  • 主要功能:获取数据

  • 语法:${expression}

    • ${brands}:获取域中存储的key为brands的数据
  • JavaWeb中的四大域对象:

    • page:当前页面有效
    • request:当前请求有效
    • session:当前会话有效
    • application:当前应用有效
  • EL表达式获取数据,会依次从这4个域中寻找,直到找到为止

JSTL标签

  • JSP标准标签库(Jsp Standarded Tag Library),使用标签取代JSP页面上的Java代码
标签描述
<c:out>用于在JSP中显示数据,就像<%=...>
<c:set>用于保存数据
<c:remove>用于删除数据
<c:catch>用来处理产生错误的异常情况,并且将错误信息储存起来
<c:if>与我们在一般程序中用到的if一样
<c:choose>本身只当作<c:when><c:otherwise>的父标签
<c:when><c:choose>的子标签,用来判断条件是否成立
<c:otherwise><c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import>检索一个绝对或相对URL,然后将其内容暴露给页面
<c:forEach>基础迭代标签,接受多种集合类型
<c:for Tokens>根据指定的分隔符来分隔内容并迭代输出
<c:param>用来给包含或重定向的页面传递参数
<c:redirect>重定向至一个新的URL
<c:url>使用可选的查询参数来创造一个URL
  • JSTL快速入门
  1. 导入坐标
<dependency>
    <groupld>jstl</groupld>
    <artifactld>jstl</artifactld>
    <version>1.2</version>
</dependency>
<dependency>
    <groupld>taglibs</groupld>
    <artifactld>standard</artifactld>
    <version>1.1.2</version>
</dependency>
  1. 在JSP页面上引入JSTL标签库
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
  1. 使用

<c:forEach>:相当于for循环

  • items:被遍历的容器
  • var:遍历产生的临时变量
  • varStatus:遍历状态对象,index:从0开始,count:从1开始
<c:forEach item="${brands}" var="brand" varStatus="status">
    <tr align="center">
        <td>${status.count}</td>
        <td>${brand.brandName}</td>
        <td>${brand.companyName}</td>
        <td>${brand.description}</td>
    </tr>
</c:forEach>
  • begins:开始数

  • end:结束数

  • step:步长

<c:forEach begin="0" end="10" step="1" var="i">
    ${i}  //sout(i);
</c:forEach>

MVC模式和三层架构

  • MVC模式是一种分层开发的模式

    • M:Model,业务模型,处理业务

    • V:View,视图,界面展示

    • C:Controller,控制器,处理请求,调用模型和视图

Snipaste_2022-10-10_20-23-13.png

  • MVC好处

    • 职责单一,互不影响

    • 有利于分工协作

    • 有利于组件重用

  • 三层架构

Snipaste_2022-10-10_20-29-15.png

  • 数据访问层:对数据库的CRUD基本操作

  • 业务逻辑层:对业务逻辑层进行封装,组合数据访问层中基本功能,形成复杂的业务逻辑功能

  • 表现层:接受请求,封装数据,调用业务逻辑层,响应数据

  • MVC模式和三层架构

Snipaste_2022-10-10_20-30-40.png