JSP 简明教程

文章目录

JSP

我们后面,或有替代 JSP的技术,比如 thymeleaf,vue等,但是对于 JavaEE 新手来说,JSP的学习是逃不掉的。各位在学习的时候,不要产生抵触情绪,花个两个小时,了解一项技术,无论它是否过时,也算是一种收获了。何况,jsp中的很多方法,在thymeleaf中,也是有其影子的。


JSP,是一种动态页面技术

是 java + html

何为动态页面?我们举个例子:

比如说,用户想查询所有书本信息,我们后台就会给前端传送一个 List 信息,但是 ,html因为已经固定好了,所以就算获取到了这个list,也无济于事

但是,JSP 就能根据传来的 List 信息,动态的更新页面的信息

这,就是动态页面

JSP小脚本

声明标签 <%!变量或者方法声明%>
表达式标签 <%= 表达式%> 在⻚面上显示的效果 
程序代码标签 <%java代码%> ⻚面上动态展示内容

通过小脚本,可以在 JSP 中,写 Java 代码

JSP 原理

古早时期,程序员真的是在 Servlet 中,用流,将前端代码输出到页面上的(这可真的是折磨!),JSP,其实就是将这个折磨的过程,封装了一下,帮助我们,将前端的代码,用流输出出去

JSP 简明教程

JSP 内置对象(9个)

如果面试问JSP(虽然不可能),那么,一定会问 JSP 的内置对象

JSP,一共有 9 种内置对象。

分别为:

request、response、session、application、out、pagecontext、config、page、exception

request 、response

Servlet中,能用的方法,他们基本都能用

page

相当于一个 this 指针,指向的是当前页面

pageContext < request < session < application

它们四个,都有 setAttribute()setAttribute()方法,区别在于它们的范围

这四个的所用范围,是不断变大的

pageContext

只在当前范围有效

request

只在一次请求有效

session

在一次会话(多次请求)中有效

但是换浏览器的话,数据就没了(因为不同浏览器/客户端 的sessionId 不一样)

application

在多个会话中,有效

即在整个服务器运行期间,都有效,我们换浏览器,数据照样能或得到

out

就是往页面中做输出的

<% out.print("---out") %>

等价于

<%="---out"%>

config

和 Servlet 中的 init()方法中的 config 对象,用处是一样的

exception

JSP 指令

  1. Page指令

Page指令为容器提供当前⻚面的使用说明一个JSP⻚面可以包含多个page指令 Page指令的语法格式:

<%@ page attribute="value" %>

还有很多其他的操作,这里就不演示了,了解即可

  1. Include 指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含 的文件就好像是该JSP文件的一部分,会被同时编译执行。

类似于 html 中的 iframe,可以包含其他页面

语法如下:

<%@ include file="文件相对 url 地址" %>

include 指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

  1. Taglib 指令

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

语法如下:

<%@ taglib uri="uri" prefix="" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀(可自定义)。

我们后面用 JSTL 的时候,会需要使用这个指令的

常见状态码

200:成功

4xx:请求错误

5xx:服务器的业务代码出现错误

JSP 简明教程

EL 表达式(常用)

我们在开发的时候,不回去使用小脚本去展示后台数据的

所以,我们需要借助 EL 表达式

==注意:==EL表达式如果想要读取变量,那么变量一定要放在作用域中

即下面这四个位置:pageContext,request,session,application

获取集合中的值

这里不展示 set,是因为 set 中的元素是无序的,无法通过下标获取,只能遍历获取

而遍历,需要用到后面的 JSTL 标签库

JSP 简明教程

获取指定作用域的同名变量

如果 pageContext,request,session,application 这四个作用域中,都有一个同名变量,那么,会从作用域最小的开始找,即如果在 pageContext 中找到了,就不再往后找了,以此类推。

JSP 简明教程

JSTL

JSTL是一个JSP标签集合

根据功能不同,可以分为下面五种:

  • 核心标签
  • 格式化标签
  • sql标签
  • xml标签
  • jstl函数

注意,uri是不能改的

功能范围 Uri 前缀
core http://java.sun.com/jsp/jstl/core c
i18n http://java.sun.com/jsp/jstl/fmt fmt
sql http://java.sun.com/jsp/jstl/sql sql
xml http://java.sun.com/jsp/jstl/xml x
functions http://java.sun.com/jsp/jstl/function fn

这里,我们只要了解 core 和 i18n即可,其他的仅做了解,后面会有其他前端的解决方式,来替代 JSP 的

引入方式

  1. 导入Maven依赖
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
  1. 用 tablib,引入对应标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSP 简明教程

核心标签 core

表达式操作 out、set、remove、catch
流程控制 if、choose、when、otherwise
迭代操作 forEach、forTokens
URL操作 import、param、url、redirect

这里,我们只要掌握 foreach 和 if 即可,其他仅供了解

<c: foreach>

我们先在session中放一些数据:

 <%
        List<String> list = new ArrayList<>();
        list.add("haha");
        list.add("呵呵");
        list.add("嘻嘻");
        session.setAttribute("list",list);
    %>

然后用 JSTL 获取信息:

<c:forEach items="${sessionScope.list}" varStatus="status" var="item">
        ${status.index}---${status.count} : ${item} <br/>
</c:forEach>

index 是从0开始的

count 是从1开始的

JSP 简明教程

<c: if>

JSP 简明教程

<c:if test="${name=='张三'}">
        这是张三
    </c:if>

格式化标签

这里,我们用的比较多的,就是将时间格式化

	 <%
        session.setAttribute("date",new Date());
    %>

    <br/>
    date = <fmt:formatDate value="${sessionScope.date}" pattern="yyyy-MM-dd"></fmt:formatDate>

JSP 简明教程

上一篇:JSP语法及JSTL标签


下一篇:2021-03-19