JSP指令
提供整个JSP页面的相关信息
用于JSP页面与容器之间的通信
<%@ directive attribute1="value1" attribute2="value2" %> 如果有多个属性,也可以分开写: <%@ directive attribute1="value1" %> <%@ directive attribute2="value2" %> |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 多个指令分开写 --> <%@ page import="java.lang.*" %> <%@ page import="java.util.*" %> |
在JSP中,有三种类型的指令
page指令——为当前页面提供处理指令
页面指令的功能是设定整个JSP页面的属性和相关功能
语法格式为:
<%@ page attribute1="value1" attribute2="value2" %> page指令也支持以XML为基础的语法,例如: <jsp:directive.page attribute1="value1" attribute2="value2" /> |
属性名 | 值 | 默认值 |
language | 脚本语言名称 | "java" |
Info | 网页信息 | 无 |
contentType | MIME类型和JSP编码 | "text/html;charset=ISO-8859-1" |
import | 类和包 | none |
buffer | 缓冲区大小 | 8192 |
autoFlush | 缓冲满,刷新还是抛出异常 | "true" |
session | 访问页面是否创建会话 | "true" |
isThreadSafe | 线程是否安全 | "true" |
errorPage | URL | none |
isErrorPage | 布尔值 | "false" |
include指令——用于把另一个文件包含在JSP中
include指令表示在JSP编译时插入一个包含文本或者代码的文件
把文件中的文本静态地包含过去
语法格式为:
<%@ include file="relativeURL" %> "relativeURL"为要包含进来的文件,可以是HTML、JSP文件,也可以是其它格式的文本文件。 include指令也支持以XML为基础的语法,如: <jsp:directive.include file="relativeURL" /> |
<!-- error_500_page.jsp --> <%@ 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>Insert title here</title> </head> <body> Error_500; <%@ include file="error_404_page.jsp" %> </body> </html> <!-- error_404_page.jsp --> <%@ 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>Insert title here</title> </head> <body> Error_404; </body> </html> |
运行服务器,打开页面error_500_page
Error_500_page(<%@ include %>)
Error_500_page(<%@ include %>)翻译成的Java文件内容(局部)
提示:翻译后和编译后的文件可以在工程服务器里查找,我的文件目录是(可参考):D:\Javacode\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\Test\org\apache\jsp\jsp |
仔细看就能发现,是error_500_page.jsp内容里面包含了error_404_page.jsp里面的所有内容,包含html、head、body等所有标签。如果存在重复标签或者id名就会出现一些意外的情况。
注意:被包含的文件不要与包含文件存在重复HTML标签,而且不能是URL变量 |
标准动作:<jsp:include>动作是一种动态包含
修改error_500_page.jsp的语句
<%--把<%@ include file="error_404_page.jsp" %>修改为下面的代码--%> <jsp:include page="error_404_page.jsp"></jsp:include> |
Error_500_page(<jsp:include>)
Error_500_page(<jsp:include>)翻译成的Java文件内容(局部)
由此可见,error_500_page.jsp内容里面没有包含error_404_page.jsp里面的内容,而是以一串指令代替。
动态和静态的区别是什么?
- included动作比included指令在维护上有着明显优势,而included指令的功能更加强大,执行速度也比included动作快。
- included指令只能生成一个servlet,而included动作可以生成多个Servlet
- included指令包含的是被包含页面的真实代码,而included动作包含的是相应代码
- included指令发生在页面编译时,而included动作发生在页面请求时
- included指令做出的人任何修改必须重启当前Web才能生效,而included动作保存即生效
- included指令不能实现在请求区间内共享对象,而included动作支持在请求区间内共享对象
- included指令适用于静态页面包含,而included动作适合动态页面包含
taglib指令——指定如何包含和访问自定义标签库
<jsp:forward>动作
将客户端所发出来的请求,从一个JSP网页转发到另一个JSP页面
语法格式为: <jsp:forward page="relativeURL" /> 控制权交给了另一个JSP,和Java代码中的request的请求派发功能相似(可以访问WEB-INF目录)request.getRequestDispatcher("").forward(request,response); |
JSP九大隐式对象
在JSP中操纵请求、响应、会话以及其它Servlet中使用的对象
对象名 | 描述 | 作用域 |
request | 代表与请求相关的HttpServletRequest对象 | request |
response | 代表与响应相关的HttpServletResponse对象 | page |
pageContext | 代表封装请求某个JSP页面时请求环境的pageContext对象 | page |
session | 代表特定用户请求会话的HttpSession对象。该对象只有在JSP页面参与一个HTTP会话时才有意义 | session |
application | 代表Web应用程序的ServletContext对象 | application |
out | 代表与响应输出流相关的JspWriter对象 | page |
config | 代表JSP 页面的Servlet相关的ServletConfig对象 | page |
page | 等于Java编程语言中的this变量 | page |
exception | 代表JSP页面抛出的Trowable对象。这个对象只能在JSP错误页面中使用 | page |