一、JSP编译指令
编译指令是通知JSP引擎的消息。
它的作用是设置JSP程序的属性以及由该JSP生成的Servlet的属性。比如指定JSP程序所使用的脚本语言、文件编码等等。
它不直接生成输出。
编译指令都有默认值,开发人员无需为每个指令设置值。
JSP常用的编译指令有三个:page、include、tablib
1. page编译指令
page编译指令主要用于定义当前JSP程序的全局属性。
包括当前JSP程序所使用的脚本语言类型、需要导入的Java包的列表等等。
一般情况下,page编译指令位于页面的最上方。同一个页面可以有多个page编译指令。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
常用属性:
language:用于声明当前JSP程序所使用的脚本语言的种类。默认为"java"。
contentType:设置MIME(Multi-Purpose Internet Mail Extensions)类型、设置生成网页的编码
pageEncoding:设置JSP程序本身的编码。
import:用来导入Java类。如果没有通过import属性导入Java类,那么在脚本中使用这些类的时候必须使用完全限定名(也就是说必须加上包名)。
下面通过一个import属性来导入多个Java类。
import="java.util.ArrayList,java.util.LinkedList"
errorPage:用于指定错误处理页面。如果当前的JSP程序产生了异常或错误,而该JSP程序没有对应的处理代码,那么JSP引擎会自动调用该指令所指定的JSP程序。
isErrorPage:设置当前JSP程序是否为错误处理程序。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="handle_error.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <% int a=10; int b=0; int c=a/b; %> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> 程序发生了异常。 </body> </html>
2.include编译指令
include是JSP的静态包含指令。使用include指令可以将一个外部文件包含到当前的JSP程序中。这个外部文件可以是HTML文件,也可以是JSP文件。如果是JSP文件,那么会在包含进来的同时解析其中的JSP语句。
<body> <%@ include file="header.html" %> <br/> <%@ include file="footer.jsp" %> </body>
include编译指令使用“file”来指定文件的相对路径。
JSP会被转换成Servlet。通过include编译指令,包含进来的所有文件最终会被转换成一个Servlet。这里有一点需要特别注意,在包含页面与被包含页面中,同一类型的参数不能被定义两次。
二、JSP动作指令
编译指令是通知Servlet引擎的处理消息,它只在JSP程序被转化为Servlet的过程中起作用。
动作指令是客户端在请求时期动态被执行的。也就是说,每次客户端请求时,都可能重新被执行一次。
1.forward指令
forward指令用于将当前的程序重新定向到一个HTML页面,或者是一个动态程序如JSP、Servlet。forward指令有两种语法形式,一种是不带参数的,一种是带参数的。
forward指令使用"page"属性来指定要重定向的目标文件或URL
因为forward指令是一个重定向指令,所以forward指令下面的代码不会被执行,也不会被输出到客户端。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <jsp:forward page="login.jsp"> <jsp:param value="yeqc" name="userName"/> <jsp:param value="123456" name="password"/> </jsp:forward>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>login</title> </head> <body> <% String userName = request.getParameter("userName"); String password = request.getParameter("password"); out.println(userName); out.println("<br/>"); out.println(password); %> </body> </html>
2.include指令
include指令是一个动态包含指令,它用于在JSP程序中包含一个静态或动态的文件。静态文件一般是HTML文件,动态文件一般是JSP文件。如果包含内容是一个静态文件,那么处理的过程很简单,就是将静态文件的内容直接加入到当前的JSP程序中来。如果被包含的是JSP程序,那么这个被包含的JSP程序还会被JSP引擎执行,然后才会将生成的内容加入到当前的JSP程序中来。
这里include动作指令与前面include编译指令有很大区别。静态导入是将被导入的页面的代码完全融入两个页面融合成一个整体的Servlet。而动态导入则是在Servlet中使用include方法来引入被导入页面的内容。静态导入时,被导入页面的指令会起作用;而动态导入时,被导入页面的编译指令失去作用,只是插入到被导入页面的body体。除此之外,执行include动态指令时,还可以增加额外的请求参数。