搜索 K
Appearance
博客正在加载中...
Appearance
继续讲解如下内容:
指令的作用:用于配置 JSP 页面,导入资源文件
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
例如我们之前写的 index.jsp 的开头,就用到了 page 指令:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>这里设置了 content-type,以及用的是 Java 语言,还有很多属性,这里就不一一介绍了
指令分类:
page 指令用来配置 JSP 页面,我们知道一些常见的属性就可以了。例如下面是一个 page 指令:
<%@ page contentType="text/html;charset=UTF-8" language="java" buffer="16kb"%>常见的属性:
详细说明如下: contentType:等同于 response.setContentType(),作用如下
设置响应体的 mime 类型以及字符集
设置当前 jsp 页面的编码
只能是高级的 IDE 才能生效,修改 charset 后,文件编码格式也会自动切换
如果使用低级工具,则需要设置 pageEncoding 属性设置当前页面的字符集 language:当初 JSP 被设计时,想要一举改变表现层的技术,支持多种开发语言;但直到如今,也只支持 Java。不能省略。 buffer:缓冲区,JSP 有个内置对象是 out 的,其有一个缓冲区,默认是 8kb,可以通过 buffer 修改大小
import:导包。例如使用 List 对象,需要导入:写了后相当于会在我们 JSP 转换的 Servlet 类里 import
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>errorPage:当前页面发生异常后,会自动跳转到指定的错误页面。和 isErrorPage 是配对的。
isErrorPage:标识当前也是是否是错误页面。默认值 false。如果设置成 true,可以使用内置对象 exception; 如果设置成 false,不可以使用内置对象 exception。
例如新建一个 500.jsp
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>服务器正忙...</h1>
<%
String message = exception.getMessage();
out.print(message);
%>
</body>
</html> 然后在 index.jsp 里配置:
<%@ page contentType="text/html;charset=gbk" errorPage="500.jsp" pageEncoding="GBK" language="java" buffer="16kb" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
int i = 3/0;
%>
</body>
</html> 访问 index.jsp,会跳转到 errosPage.jsp
用来包含页面的,例如我们写了很多个 JSP 后,可以抽出公用的部分,做出一个单独的文件,然后在其他 JSP 里引入这个 JSP。我们来演示下,新建 top.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>页面logo页面标题</h1> 新建 home.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="top.jsp"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>hello</h1>
</body>
</html> 那么 home.jsp 页面也会显示 top.jsp 的 h1 标签
导入资源的,例如导入第三方标签库。我们先演示下效果,后续再说有什么用
首先将涉及到的 jar 包放到 WEB-INF/lib 目录(可以去我的 GitHub 或 Gitee 下载),然后将 lib 目录 add 到 Library 中。
jstl-impl.jar
javax.servlet.jsp.jstl.jar然后我们就可以引入标签库了:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>prefix:定义标签的前缀,可自行修改,uri 则是标签库的具体位置 然后我们就可以使用标签库了:前缀加冒号。一般用约定俗成的。
<c:out><!-- -->: 只能注释 HTML 代码片段。注意,在客户端看 HTML 代码中还是能看到注释<%-- --%>:可以注释所有(HTML 和 Java 代码),在客户端看 HTML 代码中看不到注释,推荐使用 <!--
<h1>hello</h1>
-->
<%--
<%
System.out.println("hi~~~~");
%>
--%>
<%--
<input>
--%>
什么是内置对象:在 JSP 中不需要创建,可以直接使用的对象。这是因为 JSP 转换为 Servlet 的时候,这些对象已经声明好了。一共有 9 个内置对象:
| 变量名 | 真实类型 | 作用 |
|---|---|---|
| pageContext | PageContext | 域对象,当前页面共享数据,还可以获取其他八个内置对象(通过 getXXX 方法) |
| request | HttpServletRequest | 域对象,一次请求访问的多个资源(转发) |
| session | HttpSession | 域对象,一次会话的多个请求间 |
| application | ServletContext | 服务器的域对象,所有用户间共享数据,范围最大 |
| response | HttpServletResponse | 响应对象 |
| page | Object | 当前页面(Servlet)的对象 相当于 this |
| out | JspWriter | 输出对象,数据输出到页面上 |
| config | ServletConfig | Servlet 的配置对象 |
| exception | Throwable | 异常对象,只有设置了 isErrorPage 才能使用 |
我们可以通过转换后的 Java 代码里查看,在_jspService 方法里有如下定义:
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;