JSP指令标识【三大指令】
中文和英语混杂在一起我怕大家看不清楚所以把英语加粗了,真的写了很久,大家觉得好的可以点个赞
(1)指令标识概述
指令标识在客户端是不可见的,它是被服务器解释并被执行的。通过指令标识可以被服务器按照指令的设置来执行动作和设置在整个JSP页面范围内有效的属性。在一个指令中可以设置多个属性,这些属性的设置可以影响到整个页面。在JSP中主要包含3种指令,分别是page指令(页面指令)、include指令和taglib指令。
指令通常以 “ <%@ ” 标记开始,以 “ %> ” 标记结束,以上三种指令的通用格式如下
<%@ 指令名称 属性1="属性值" 属性2="属性值"...%>
(2) page指令:
a) page指令的特点:
① page指令用于设置当前JSP页面的属性。
② page指令中的属性大多数只需要在JSP页面中定义一次 。
③ page指令中允许重复使用多次的属性有pageEncoding和import属性等。
④ 习惯上,把page指令写在JSP页面的头部。
b) page指令的基本语法格式如下 :
<%@ page
language="java"
import=" ……. "
info="…….."
contentType="……."
pageEncoding="default"
%>
language属性:定义JSP页面脚本代码所采用的编程语言,默认值为java,即采用java脚本语言。
import属性:用于导入当前JSP页面中要用到的其它Java类。如果要导入多个Java类,用逗号来分隔它们,例如要导入java.util.* 和 java.io.* ,可写为:<%@page import="java.util.* , java.io.* "%>
或分为两行来写,例如:
<%@page import="java.util.* "%>
<%@page import="java.io.* "%>
c) pageEncoding属性和contentType属性:
一、
pageEncoding属性:定义当前JSP页面的字符编码标准,默认的字符集为ISO-8859-1,如果页面中有简体中文,则字符集应该定义为GB2312,UTF-8或GBK。
二、
contentType属性:定义MIME类型和字符集。MIME (Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务)使用简单的ASCII文本来传递E-mail信息,E-mail中允许包含有任意类型的附件文件
- <%@page contentType = “text/html; charset=GB2312”>
ContentType属性指定了MIME类型和JSP页面回应时的字符编码方式。MIME类型的默认值是“text/html”; 字符编码方式的默认值是“ISO-8859-1”。 MIME类型和字符编码方式由分号隔开。
三、JSP页面的字符编码方式:
(1) 在JSP标准的语法中,如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。
(2) pageEncoding是jsp文件本身的编码。
(3) contentType的charset是指服务器发送给客户端时的内容编码。
(4) JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8,第三阶段就是由Tomcat出来的网页,用的是contentType。
① 第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
② 第二阶段是由JAVAC的JAVA源码至字节码.class文件的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。JAVAC用UTF-8的编码读取java源码,编译成UTF-8 格式的二进制码(即.class)。
③ 第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效。
d) 可以指定一条page指令中的多个属性。
也可以分开多条指定。但是除import属性可以在一个页面中多次出现外,其余属性只能指定一次,不能重复出现。
e) 实例:
<%@ page language="java" import="java.util.*" %>
<%@ page pageEncoding="utf-8" %> <%-- 1 --%>
<%--@ page contentType="text/html;charset=ISO-8859-1"--%> <%--2 --%>
<%--@ page contentType="text/html;charset=utf-8"--%> <%-- 3 --%>
<html>
<head>
<title>JspPage</title>
</head>
<body>
This is my JSP page. <br>
这是我的JSP页面 <br>
只使用1,中文显示正常。<br>
同时使用1,2,中文显示不正常<br>
同时使用1,3,中文显示正常<br>
只使用3,中文显示正常<br>
只使用2,中文显示不正常<br>
</body>
</html>
(3)include指令
a) include指令元素:
又称为文件包含或静态包含,是在JSP容器把JSP网页翻译成Servlet程序时,将指定文本文件的内容嵌入Servlet程序中,替换include指令。
b) include指令基本语法为 :
<%@ include file="relativeURLspec" %>
file属性指出被包含资源的URL,可使用相对路径或绝对路径。绝对路径以Web应用的上下文路径名“/xxxx”开头,如:
<%@ include file="/relativeURLspec" %>
同一层目录及其子目录下,使用相对路径,即路径开始不需要加/:<%@ include file="pg/top2.jsp" %>
不同目录下,需要用绝对路径,即路径开始需要加/: <%@ include file="/pub/top4.jsp" %>
,意思是根目录webroot文件夹开始。
c) include指令的使用注意事项:
① include指令的包含称为静态包含。
② include指令是代码静态绑定,被include指令包含的内容在编译时会被静态地嵌入Servlet程序中 。
③ 可以包含jsp和html文件。
④ 过多使用include指令影响JSP页面的可读性。
⑤ 被包含的页面若有page指令,则主页面中所出现的编码设置必须完全一致,否则会引起翻译时的错误。
⑥ include指令的file属性不可以是变量,也不可以以“head.jsp?aa=1”这种形式向被包含页面传递参数。
include指令实例
- 新建web项目RelativePath。然后建立如下路径和jsp页面,并修改其相应的内容:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
然后再<body>后面输入下面的代码:
<%@ include file="/index.jsp" %>
<%@ include file="pg/top2.jsp" %>
<%@ include file="pg/tt/top3.jsp" %>
<%@ include file="/pub/top4.jsp" %>
运行结果如下:
index:This is my JSP page.
top2:This is my JSP page.
top3:This is my JSP page.
top4:This is my JSP page.