JSP(2)

JSP指令是给JSP引擎用的,即给服务器用的。作用是告诉服务器,该如何处理JSP中除了指令之外的内容。包括page、include、taglib三种

基本的语法格式:<%@ 指令名称 属性1="值1" 属性2="值2" ....%>

1、page指令

page指令最简单的使用方式:<%@ page pageEncoding="UTF-8"%> 但myEclipse中的JSP模板中自动加入java.util.*包

JSP只能只编译一次就可以到处使用

pageEncoding原理 - 小易


作用是定义JSP页面的各种属性,有如下属性:

(1)language : 指示JSP页面中使用脚本语言。默认值为java(其他脚本语言如:asp、php)

(2)import:导入JSP中的Java脚本使用到的类或包。(如同Java中的import语句)

==> JSP引擎自动导入以下包中的类:javax.servlet.*; javax.servlet.http.*; javax.servlet.jsp.*;

==> 注意:一个import属性可以导入多个包,用逗号分隔

(3)pageEncoding : 通知引擎读取JSP时采用的编码(因为要翻译)。还有contentType属性的作用

==> pageEncoding的实现原理:


==> 从上一节的.java的代码中可以看出在翻译后的文件中有输出了一句response.setContentType("text/html;charset=UTF-8");

(4)contentType : 指定当前页面的MIME类型,作用与Servlet中的response.setContentType()作用完全一致

==> contentType="text/html;charset=utf-8" 最终的效果是在翻译后的文件中有输出了一句response.setContentType("text/html;charset=UTF-8");

(5)sessioin : 指示JSP页面是否创建HttpSession对象。默认值是true,创建

(6)errorPage : 指示当前页面出错后转向(转发)的页面。若其值即目标页面如果以"/"(当前应用)开头就是绝对路径(不加项目名)

==> 配置全局错误提示页面,在web.xml中使用以下两种方法设置

	若出现java.lang.Exception就转到error.jsp
	<error-page>
		<exception-type>java.lang.Exception</exception-type>
		<location>/error.jsp</location>
	</error-page>
	-------------------------------------------------
	若出现404错误(找不到页面)就转到404.jsp
	<error-page>
		<error-code>404</error-code>
		<location>/404.jsp</location>
	</error-page>

(7)isErrorPage : 指示当前页面是否产生Exception对象。若产生就可以使用这个Exception对象对错误进行查看处理

(8)buffer : 指示JSP用的输出流的缓存大小。默认值是8Kb。若值为none则没有缓存

(9)autoFlush : 自动刷新输出流的缓存。默认为true,即缓存满后就刷新数据

(10)isELIgnored : 是否忽略EL表达式。${1+1}。默认值是false

(11)extends : 指示JSP对应的Servlet类的父类。一般不要修改

(12)isThreadSafe : 指示页面是否是线程安全的(过时了)。默认是true

==> true:不安全的

==> false:安全的。指示JSP对应的Servlet实现SingleThreadModel接口

2、include指令

(1)静态包含:使用include指令

==> 作用:包含其他的组件

==> 语法:<%@include file=""%> file指定要包含的目标组件。路径如果以"/"(当前应用)开头就是绝对路径

==> 原理:把目标页面的内容通过out.print输出到源页面的service方法中

(2)动态包含:使用的jsp动作

==> 语法:<jsp:include page=""/> 路径如果以"/"(当前应用)开头就是绝对路径

(3)说明:开发中尽量使用静态包含,因为动态包含每次访问的时候都会执行一次,而静态包含只编译一次就可以一直使用

==> 分析:静态包含是两个jsp文件只编译成一个.class文件;而动态包含是,两个jsp文件编译成各自的.class文件,然后这两个class文件在tomcat服务器中进行整合,最终输出结果

3、taglib指令

作用:引入外部的标签

语法:<%@taglib uri="标签名称空间" prefix="前缀"%> 如:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

4、实例

(1)errorPage和isErrorPage实例

	1a.jsp中的部分代码:
	<%@ page pageEncoding="UTF-8" errorPage="/jspzhiling/1b.jsp"%>
	<body>
		表达式1/0是否有错?
		<% 
			out.print(1/0);
		%>
	</body>
	-----------------------------
	1b.jsp中的部分代码:
	<%@ page pageEncoding="UTF-8" isErrorPage="true"%>
	<body>
		这是错误页面,如果1a.jsp发生错误,就跳转到此页面<br />
		错误信息是:
		<%
			out.print(exception.getMessage());
		%>
	</body>
	-----------------------------
	访问http://127.0.0.1:8080/testJsp/jspzhiling/1a.jsp
	结果:(可知页面显示1b.jsp的内容,但是浏览器的地址没有改变)
	这是错误页面,如果1a.jsp发生错误,就跳转到此页面
	错误信息是: / by zero


(2)include实例

	2a.jsp中的部分代码:
	1<%@ include file="/jspzhiling/2c.jsp"%>
	--------------------------------------------------
	2b.jsp中的部分代码:
	1<jsp:include page="/jspzhiling/2c.jsp"></jsp:include>
	--------------------------------------------------
	2c.jsp中的部分代码:
	<body>
		2
	</body>
	--------------------------------------------------
	访问http://127.0.0.1:8080/testJsp/jspzhiling/2a.jsp和http://127.0.0.1:8080/testJsp/jspzhiling/2b.jsp
	结果都为:
	12






原文地址:https://www.cnblogs.com/oldinaction/p/5167463.html