6.3 JSP 基础语法
- 导入 相关的 jar 包依赖
tomcat 9.0 导入下面的:
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<version>6.1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
tomcat 10.0 导入下面的:
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<version>6.1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
然后 我们 运行一下;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
$END$
</body>
</html>
如果我们 现在 更改 里面的内容,如何 实现 实时更新呢?不需要 重启 项目。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
$END$
<%= new java.util.Date()%>
</body>
</html>
按 Ctrl + F10 会有以下的 提示。选择 第二个 单选框然后 点击 OK 即可 热更新!
- JSP 表达式
<%=变量或表达式%>
- JSP 脚本片段
<% Java 的代码 %>
- JSP 声明(我们知道 JSP 最后是会被 翻译成 java 文件的,而这个 <%!%> 是 把内容 翻译在 类里。放在 类里面。而不是把变量或方法 写在 这个类 的 service 方法里!像是 什么 JSP 表达式,JSP 脚本片段 都是 写在 翻译后的 service 方法里的,这个 是把 内容 直接 写在 类里,也就是 属于 这个类。这样我们就可以 写
类变量
写一个新的方法
代码块
)
<%! static {System.out.println("Loading Servlet!")}%>
- JSP 脚本 和 HTML 语句 是 可以嵌套的,甚至 JSP 脚本自己也可以做 嵌套。
<%--
Created by IntelliJ IDEA.
User: muqua
Date: 2021/8/13
Time: 9:19
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>
$END$
<%= new java.util.Date()%><br>
<%
int sum = 0;
for(int i = 0;i <= 100;++i)
{
%><h1><%=i%></h1><%sum+=i;}%>
<h1><%=sum%></h1>
</body>
</html>
6.4 JSP 指令
JSP 指令 就是 做一些 核心的配置。比如说 我们的 Servlet 程序是否 需要 继承 其它 类,或者 要导入 什么 包。亦或者 编码是什么,内容类型是什么。等等等。
<%@ page 关键配置 %>
比如说:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- 自定义 500 错误界面
<%--
Created by IntelliJ IDEA.
User: muqua
Date: 2021/8/13
Time: 9:59
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>
<img src="img/500.png">
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: muqua
Date: 2021/8/13
Time: 9:19
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page import="java.util.Date" %>
<%@page errorPage="500.jsp" %>
html>
<head>
<title>$Title$</title>
</head>
<body>
$END$
<%= new Date()%><br>
<%
int sum = 0;
int num = 1/0;
for(int i = 0;i <= 100;++i)
{
%><h1><%=i%></h1><%sum+=i;}%>
<h1><%=sum%></h1>
</body>
</html>
采用 web.xml 来 进行 errorPage 的自定义设置。
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
6.5 JSP 实现网页共同头尾 && JSP标签
网页共同头尾:就是 每个网页 都有 共同的 部分,也就是 共同的头部 和 共同的 尾部。。
<%@include file="common/header.jsp"%>
<%@include file="common/footer.jsp"%>
- 主体
<html>
<head>
<title>Title</title>
</head>
<body>
<%@include file="common/header.jsp"%>
<h1>我是主体</h1>
<%@include file="common/footer.jsp"%>
</body>
</html>
这种方式 其实 不太好!因为 它 最终 只是 写在 了一个 网页里面!也就是说 根本 不是 三个jsp 文件。是 从 三个 jsp 文件中提取 代码,进行的 合并。没准 还会出现 变量的 命名冲突问题。
所以 此时此刻 我们 需要 用到 jsp 标签!
这个是 三个网页 之间的 合并显示,而不是 合并拼接!!一定要注意。
<%--<%@include file="common/header.jsp"%>--%>
<jsp:include page="common/header.jsp"></jsp:include>
<h1>我是主体</h1>
<% int i = 10;%>
<jsp:include page="common/footer.jsp"></jsp:include>
<%--<%@include file="common/footer.jsp"%>--%>
原理在于,从三个 文件中 取 显示的部分进行渲染,然后 合并显示。而不是 从三个文件中 取 代码,合并拼接为 一个 jsp 文件!这就 证明了 jsp 标签 在 这一方面 更加的 强大和灵活!