JSP指令简介
- JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
- JSP指令的基本语法格式:
- <%@ 指令 属性名="值" %>
举例:<%@ page contentType="text/html;charset=gb2312"%> - 注意:属性名部分是大小写敏感的
- <%@ 指令 属性名="值" %>
- 在目前的JSP 2.0中,定义了page、include和taglib这三种指令,每种指令中又都定义了一些各自的属性。
- 如果要在一个JSP页面中设置同一条指令的多个属性,可以使用多条指令语句单独设置每个属性,也可以使用同一条指令语句设置该指令的多个属性。
- 第一种方式:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date"%> - 第二种方式:
<%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>
- 第一种方式:
Page指令
- page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
- JSP 2.0规范中定义的page指令的完整语法:
<%@ page
[ language="java" ] //指定使用的语言(目前只有Java)
[ extends="package.class" ] //JSP翻译成源文件之后,继承的父类
[ import="{package.class | package.*}, ..." ] //进行导包
[ session="true | false" ] //是否使用session这个隐含对象,默认是true,是否生成HttpSession这个对象
[ buffer="none | 8kb | sizekb" ]
[ autoFlush="true | false" ]
[ isThreadSafe="true | false" ]
[ info="text" ]
[ errorPage="relative_url" ] //出错的时候,跳转到这个页面去,/表示的是当前web应用的根目录,这里是转发的形式(这样exception才不是null)
[ isErrorPage="true | false" ] //这个页面是不是错误页面(错误页面会启用exception隐含对象)
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]
//指定当前JSP页面的响应类型(实际调用的是response.setContenttype()方法)
[ pageEncoding="characterSet | ISO-8859-1" ] //指定当前JSP页面的字符编码格式
[ isELIgnored="true | false" ] //当前JSP页面是否忽略EL表达式,默认是false,启用
%>
- errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面。
- 可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的完全限定名,<location>元素指定以“/”开头的错误处理页面的路径。
如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。
测试代码
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">
<!-- 全局error页面 -->
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
</web-app>
indexA.jsp
<%--
JSP指令:
1.这就是JSP指令
2.里面的内容可以分开成几个JSP写(空格分开的)),也可以一次写完
3.三种指令:
3.1.page
3.2.include
3.3.taglib
--%>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%--
page指令:
1.无论page指令出现在页面的任何地方,最作用的范围都是整个页面,但是一般写在开头
2.常用内容:
2.1.language="java" : 指定使用的语言(目前只有Java)
2.2.[ extends="package.class" ] : SP翻译成源文件之后,继承的父类
2.3.[ import="{package.class | package.*}, ..." ] : 进行导包
2.4.[ session="true | false" ]: 是否使用session这个隐含对象,默认是true(是否生成HttpSession这个对象)
2.5.[ errorPage="relative_url" ] : 出错的时候,跳转到这个页面去,/表示的是当前Web应用的根目录
2.6.[ isErrorPage="true | false" ]: 这个页面是不是错误页面(错误页面会启用exception隐含对象)
2.7.[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]
指定当前JSP页面的响应类型(实际调用的是response.setContenttype()方法)
2.8.[ pageEncoding="characterSet | ISO-8859-1" ]指定当前JSP页面的字符编码格式
2.9.
--%>
<%--
2.3.
import
-不用显示导包的(生成的Servlet中自己就有):
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
--%>
<%@ page import="java.util.Date" %>
<%--
2.4.
session
-是否启用session这个隐含对象,默认是true
--%>
<%@ page session="false" %>
<%--
2.8.
errorPage
-出错的时候(抛异常到了JVM),跳转到这个页面去,/表示的是当前Web应用的根目录
--%>
<%@ page errorPage="/404/index.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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
System.out.println("Date: " + new Date());
%>
<%--
<%= session.getId()%> //因为上面的page指令中的session="false",所以隐藏对象session不能使用
--%>
<%
int i = 10/0;
%>
</body>
</html>
testXMLError.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>
<%
int i = 1/0;
%>
</body>
</html>
errorPage
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 是错误页面 -->
<%@ page isErrorPage="true" %>
<!doctype html>
<html>
<head>
<title>错误页面</title>
<meta charset="UTF-8" />
<link rel="stylesheet" href="css/404.css">
<script src="404/js/jquery.min.js"></script>
<script src="404/js/scriptalizer.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$('#parallax').jparallax({});
});
</script>
</head>
<body>
<div id="parallax">
<div class="error1">
<img src="404/images/wand.jpg" alt="Mauer" />
</div>
<div class="error2">
<img src="404/images/licht.png" alt="Licht" />
</div>
<div class="error3">
<img src="404/images/halo1.png" alt="Halo1" />
</div>
<div class="error4">
<img src="404/images/halo2.png" alt="Halo2" />
</div>
<div class="error5">
<img src="404/images/batman-404.png" alt="Batcave 404" />
</div>
</div>
<%-- 调用exception隐含对象的exception对象 --%>
<%
System.out.println(exception.getMessage());
%>
</body>
</html>
微信公众号:JavaWeb架构师
include指令
- include指令用于通知JSP引擎在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称之为静态引入,当前JSP页面与静态引入的页面紧密结合为一个Servlet。
- 语法:
<%@ include file="relativeURL"%>- 其中的file属性用于指定被引入文件的相对路径。
- 细节:
- 被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素、JSP指令和JSP行为元素等普通JSP页面所具有的一切内容。
- 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
- 在将JSP文件翻译成Servlet源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素(设置pageEncoding属性的page指令除外),所以,除了import和pageEncoding属性之外,page指令的其他属性不能在这两个页面中有不同的设置值。
- 除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。
- 引入文件与被引入文件是在被JSP引擎翻译成Servlet的过程中进行合并,而不是先合并源文件后再对合并的结果进行翻译。当前JSP页面的源文件与被引入文件的源文件可以采用不同的字符集编码,即使在一个页面中使用page指令的pageEncoding或contentType属性指定了其源文件的字符集编码,在另外一个页面中还需要用page指令的pageEncoding或contentType属性指定其源文件所使用的字符集 。
- Tomcat 5.x在访问JSP页面时,可以检测它所引入的其他文件是否发生了修改,如果发生了修改,则重新编译当前JSP页面
- file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。
测试代码
a.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>
<h1>A Page</h1>
<%-- 在a.jsp中中包含b.jsp --%>
<%--
1.这是静态包含
2.b.jsp的页面内容相当于粘贴在这里了
3.只有生成一个Java源文件
4.语法:
<%@ include file="relativeURL"%>
其中的file属性用于指定被引入文件的相对路径,file属性的设置值必须使用相对路径,
如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),
否则,表示相对于当前文件。
--%>
<%@ include file="b.jspf" %>
<h1>我是a.jsp</h1>
</body>
</html>
b.jspf
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>B Page</h1>
<%
System.out.println("我是b.jspf");
%>
微信公众号:JavaWeb架构师
其它
- 源码下载
关注下方公众号,回复:javaweb_course.code
-
欢迎加入交流群:451826376
-
更多信息:www.itcourse.top
网友评论