JSP 指令
指令元素
<%@指令名 属性名=“”属性值“”%>
page 指令
<%@ page ... %>
定义页面的依赖属性和相关功能,允许通过类的导入、servlet 超类的定制、内容类型的设置、以及诸如此类的事物来控制 servlet 的结构。page 指令可以放在文档中的任何地方,作用的都是整个 jsp 页面,比如脚本语言、error 页面、缓存需求等等。如:
1、language 属性,设置 JSP 页面使用的语言。
2、contentType 属性,设置 JSP 页面 MIME 类型和字符编码,浏览器使用。
3、pageEncoding 属性,JSP 页面的文件编码格式。
( contentType 属性设置发送到客户端文档的响应报头的 MIME 类型和字符编码。多个使用;号分开。pageEncodeing 属性只用于更改字符编码。servlet 默认 MIME 是 text/plain,jsp 默认 MIME 是 text/html。)
代码示例:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
4、import 属性,设置 JSP 页面导入的类包(多个用逗号隔开)。
代码示例:
<%@ page import="java.util.List, java.io.PrintWriter, ..." %>
(前四个常用,以下不常用)
5、extends 属性,设置 JSP 页面继承的 Java 类,使用默认值就好,最好不要改动。
代码示例:
<%@ page extends="XXXXX" %>
6、session 属性,true/false,true 当前 jsp 可以使用 session,false 当前页面不能使用 session。
--- 默认 true。如果存在已有会话,则预定义 session 变量,绑定到已有会话中。否则创建新会话将其绑定到 session。
--- 对于高流量网站,设置 false 可以节省大量服务器内存。
--- 设置 false 表示不自动创建新会话,在 jsp 页面转换为 servlet 时,这时对变量 session 的访问导致错误。
--- 设置为 false 并不是禁用会话跟踪,它只是阻止 jsp 页面为不拥有会话的用户创建新会话。
--- 对于不需要会话跟踪的页面那就设置为 false;当设置为 false 时 session 对象是不可访问的。
代码示例:
<%@ page session="true" %>
7、buffer 属性,设置 JSP 的 out 输出对象(JspWriter)的缓冲区大小,默认 8KB。单位只能使用 KB,最好设置为8的倍数,默认 8kb。
--- none 表示不使用缓冲区。这样要求设置报头或状态代码的 jsp 元素要出现在文件的顶部,任何HTML内容之前。
代码示例:
<%@ page buffer="8kb" %>
<%@ page buffer="none" %>
8、autoFlush 属性,如果设置为 false,缓存被填满时将抛出异常。
--- autoFlush 属性控制当缓冲区满了后,是自动清空输出缓冲区(默认 true),还是在缓冲区溢出后抛出异常(false)。在 buffer=none 的时候,autoFlush=false 是错误的。
代码示例:
<%@ page autoFlush="true" %>
9、isErrorPage 属性,将当前 JSP 页面设置为错误处理页面。
代码示例:
<%@ page isErrorPage="true" %>
10、errorPage 属性,设置处理当前 JSP 页面异常错误的另一个 JSP 页面。
代码示例:
<%@ page errorPage="error/errorPage.jsp" %>
11、isELlgnored 属性,定义在 jsp 页面中是否执行或忽略 EL 表达式。true 表示忽略,false 表示执行。
--- 默认值依赖于 web.xml 的版本。servlet2.3 之前默认 true,servlet2.4 默认 false。
--- 用于 JSP 版本不一致造成使用 EL 表达式出现的问题。使用:isELlgnored="true"。
代码示例:
<%@ page isELlgnored="true" %>
12、info 属性,定义一个可以在 servlet 中通过 getServletInfo 方法获取的字符串。
--- jsp 容器做的是在 servlet 中生成 getServletInfo 方法,返回 info 属性指定的 String。
--- 此值可设置为任意字符串,由 Servlet.getServletInfo() 方法来获取所设置的值。
<%@ page info="Some Message" %>
include 指令
- 语法:
<%@ include file=“path”%>
- 概述
1、该指令只有一个file属性,用于指定要包含文件的路径,导入包含静态的文件。
2、如 JSP 网页文件、HTML网页文件、文本文件。
3、该路径可以是相对路径,也可以是绝对路径,但不可以是<%= %>表达式所表示的文件。
4、在被包含和被包含的文件中不能用相同名称的变量。
5、include 中 file 属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(不是站点根目录,否则,表示相对于当前文件)。 - 静态包含和动态包含的区别:
1、语法不同
静态包含:<%@ include file=“path”%>
动态包含:<JSP:include page=“path”>
2、参数传递不同
静态包含不能像包含页面传递 参数
动态包含可以使用 jsp:param 标签像被包含页面传递参数
3、原理不同
静态包含:先合并再翻译
动态包含:先翻译再合并 - 路径使用
1、根目录对根目录的链接方式
在 index.jsp 中显示 indexTwo.jsp 中的内容(‘ / ’表示是根目录):
<%@inclue file="/indexTwo.jsp" />
2、根目录对子文件夹的链接方式
在 index.jsp 中显示 menu 文件夹中的 head.jsp 内容(根目录下的 menu 文件夹里的 head.jsp ):
<%@inclue file="/menu/head.jsp" />
3、子文件夹对子文件夹的链接方式
在 foot.jsp 中导入 head.jsp(都在根目录下的 menu 文件夹里):
<%@inclue file="/menu/head.jsp"/>
<%--或者--%>
<%@inclue file="head.jsp" />
4、子文件夹对根目录的链接方式
在 foot.jsp 中导入根目录下的 index.jsp 文件( foot.jsp 在根目录下的 menu 文件夹里):
<%@inclue file="/index.jsp" />
taglib 指令
<%@ taglib uri="uri" prefix="tagPrefix" %>
1、URI 指明标签库文件的存放位置。prefix 表示该标签使用时的前缀。
2、用于引入标签库的定义,可以是自定义标签(JSP标记),一个自定义标签库就是自定义标签的集合。
3、当一个含有自定义的 tag 标签的 JSP 页面被 jsp 引擎编译成 servlet 时,tag 标签被转化成了对一个称为 tag 处理类的对象进行的操作。当 JSP 页面被 jsp 引擎转化为 servlet 后,实际上 tag 标签被转化成为了对 tag 处理类的操作。
- 特点
1、taglib可以在JSP页面中自定义tag标签的属性,并且访问JSP页面中的所有对象 。
2、taglib可以动态地修改页面输出,同时彼此之间相互通信。
3、taglib可以先创建一个JavaBeans组件,然后在一个tag中调用此JavaBeans组件,同时可以在另一个tag中调用它。
4、taglib可以相互嵌套,可以在一个JSP页面中完成一些复杂的交互。
脚本元素
脚本片段:<% %>
1、脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
2、其中写的内容会翻译在 Servlet 的 Service 方法中,显然我们可以在 Service 方法中定义局部变量或者调用其他方法,但是不能在 Service 中再定义其他的方法。
3、也就是我们可以在<% %>
中定义局部变量或者调用方法,但不能定义方法。在 jsp 页面可以有多个脚本片段,但是多个脚本片段之间要保证结构完整。
jsp 声明:<%! %>
1、<%! %>
用于声明全局变量、方法、属性、类,在其中定义的的变量为该页面级别的共享变量。
2、其中写的内容将来会直接翻译在Servlet类中。
例子:
<%!--变量--%>
<%! int sum = 1; %>
<%!--方法--%>
<%!
String demo(String name){
...
}
%>
<%!--类--%>
<%!
public class A(){
...
}
%>
jsp 表达式:<%= %>
1、用于将已经声明的变量或者表达式输出到网页上面。
2、直接写在 jsp 页面<body></body>
中的代码称作模板元素,将来会 Servlet 的 Service 方法中的out.write("___")
中,作为输出内容。
<body>
<%
for (int i = 0; i < 3; i++) {
out.println(i * 2);
}
%>
</body>
输出:0 2 4
<body>
<%! int sum = 1; %>
<% int sum = 8; %>
<h3>----<% out.print(sum+1); %></h3>
<h3>----<%= this.sum %></h3>
</body>
输出:9 1