1. 指令简介
- page指令:JSP三大指令之一,page指令用来设置整个JSP页面的相关属性和功能;包括制定JSP脚本语言的种类、导入的包或者类、制定页面编码的字符集…
-
page 指令写在JSP页面文件的哪个地方都可以,它的作用范围是整个JSP页面。一般为了美观都会将这些指令头文件写在文件顶部。
-
除了import导入Java的头文件之外,其他的指令属性都只能用一次。
-
所有的page指令都只作用于当前的JSP页面。包括静态的包含文件
-
page指令是一个在一个头文件中设置多个不同的属性,也可以分多个不同的头文件写不同的属性。
- include指令:JSP三大指令之一,用来将一个页面引入到本页面。分为静态包含和动态包含两种情况。
-
静态包含:静态包含是将所有的.jsp页面合并为一个页面会根据最初的页面样式展示;并且只产生一个Servlet(将所有的页面合并为一个Servlet)。因此需要注意冲突域的问题,因为包含的多个页面都在_Jspservice方法中,所以需要符合Java的语法。
-
动态包含:所有的页面都是一个独立的Servlet,并且被引入的页面修改后在主页面也会显示。会根据当前页面的样式展示,不会产生变量定义的冲突域。
- taglib指令:JSP三大指令之一,使用taglib指令引入JSTL的标准标签库或者自定义的标签库,可以简化JSP的语法,从而简化JSP页面的设计。
2. page指令
- contentType、pageEncoding、language指令详解。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--设置响应页面的类型,和响应页面的编码格式--%>
<%@ page pageEncoding="UTF-8" %>
<%--设置代码页面的编码格式--%>
-
language是只jsp页面中嵌入的高级语言是哪一种,language="java"只当前jsp页面嵌入的高级语言是java的代码并且使用java语法的标准。
-
pageEncoding是JSP文件本身的页面字符编码在编译,一般情况下pageEncoding是可以不指定的,如果不指定就会采用charset相同的编码。在指定charset情况下pageEncoding是不需要显示指定编码格式的。
-
pageEncoding不指定,charset也不指定编码,那么pageEncoding会采用服务器默认的编码格式,这种情况是非常容易乱码的。
-
默认情况下新建的jsp文件charset都会指定清楚。
- errorPage、isErrorPage使用。
-
errorpage:errorPage=“url”,当前页面发生错误时使用errorPage可以转发到指定的url地址。
-
isErrorPage:isErrorPage默认值是false,表示这是一个正常Page页面,如果指定值为true表示这是一个错误处理页面,处理errorpage的错误。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="errorpage.jsp" %>
<%@ page isErrorPage="false" %> <%--不写就默认为false--%>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>这是page2.jsp页面。</p>
<%
int value = 5 / 0;
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>这是errorpage.jsp页面</p>
异常信息: <%=exception%>
</body>
</html>
- import指令,这是一个java引入包的关键词。由于JSP中会嵌入Java代码常常需要一些包的支持,因此可以使用import导入一个java包,这也是page指令中唯一一个可以多次使用的指令。
<%@ page import="java.util.Arrays" %>
<%--引入Arrays包下的所有库--%>
<%@ page import="java.lang.*" %>
<%--引入lang包下的所有库--%>
- extends = "class"继承一个父类
可以使用extends继承一个类,但是一般不推荐使用,会降低JSP的灵活性。
<%@ page extends="com.ljq.pojo.Person" %>
- isThreadSafe属性 是用来设置线程安全的,默认值为true。
-
当设置为true时,表示当前JSP页面转换Servlet后会以多线程的方式来处理来自多个用户的请求
-
如果设置为false,转换后的Servlet会实现SingleThreadMode接口,并且将以单线程的方式来处理用户的请求。
<%@ page isThreadSafe="true" %>
- isELIgnored用来设置当前page页面是否忽略EL表达式;EL表达式是用来简化JSP语法的。默认情况下值为false表示不忽略。
<%@page isELIgnored="false" %>
<%-- 不忽略EL表达式--%>
- session,表示当前页面是否要使用http Session会话。默认为true表示需要。
<%@page session="true" %>
<%-- 默认为true,表示需要session对象--%>
- buffer、autoFlush指令,用于对缓冲区的设置
-
buffer用来设置out对象输出缓冲区的大小,默认为8kb,也可以指定一个值。
-
autoFlush原来设置缓冲区溢出时是否强制输出缓冲区的内容,默认为true表示输出。
<%@ page buffer="10kb" autoFlush="true" %>
<%--设置缓冲区大小为10kb, 并且溢出时自动刷新--%>
3. include指令
- 静态包含:合并多个页面转为一个Servlet类。语法格式:<%@include file=“url”%>
- 创建header页面 和 footer页面,存放在common文件夹下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="GBK" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>这是一个Header</h1>
<%
int i = 20;
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="GBK" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>这是一个Footer</h1>
<%
int i = 5;
%>
</body>
</html>
- static.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 引入header文件 --%>
<%@include file="../common/header.jsp"%>
<h2>这是网页主体</h2>
<%
int i = 10;
%>
<%-- 引入footer文件 --%>
<%@include file="../common/footer.jsp"%>
</body>
</html>
分析:最开始header.jsp中的int i = 20定义成功,之后在static.jsp本页中继续定义int i = 10报错,footer.jsp的int i = 5也定义报错。可以得出静态包含所有的网页同属一个Servlet类并且都生成在_Jspservice方法中。
- 去掉header 和 footer中的int i的定义正常展示时.class文件和网页样式。
- 动态包含:每一个页面都是一个独立的Servlet因此每一个页面定义的变量都是属于不同的Servlet,当被引入的页面每次都将此时页面最新的样式传入引用处,也就是说可以被引入的页面数据更新后也能看到。语法格式:<jsp: include page="/common/header.jsp"/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<jsp:include page="../common/header.jsp"/>
<h1>dynamic.jsp</h1>
<jsp:include page="../common/footer.jsp"/>
</body>
</html>
4. taglib指令
-
core核心库:JSTL的五大核心库之一,包含最基本的JSTL指令。
-
format核心库:JSTL五大核心库之一,用来格式化并输出文本、日期、时间、数字。
-
XML标签库:JSTL五大核心库之一,提供了创建和操作XML文档的标签。
-
sql标准库:JSTL五大核心库之一,提供了CRUD调用指令。
-
fn核心库:JSTL五大核心库之一,提供了JSTL基础的函数方法。
<%--JSTL核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--xml配置文档标签库--%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%--sql数据库标签库--%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%--JTSL格式化标签库--%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--JSTL函数标签库--%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>