JSP的三大指令

一. JSP的指令

1. JSP指令简介

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页

面中的其余部分。在JSP 2.0规范中共定义了三个指令:

(1) page指令;

(2) Include指令;

(3) taglib指令;

2. JSP指令的基本语法

(1) 语法格式:<%@ 指令 属性名="值" %>

(2) 举例:<%@ page contentType="text/html;charset=UTF-8"%>

3. 注意事项

(1) 如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

(2) 举例:


 
 
  1. <%@ page contentType="text/html;charset=UTF-8"%>
  2. <%@ page import="java.util.Date"%>

也可以写作:

<%@ page contentType="text/html;charset=UTF-8" import="java.util.Date"%> 
 
 

二. include指令

1. 简介

(1) include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP

翻译成一个servlet。所以include指令引入通常也称之为静态引入。

(2) 通常一个网站的头部和底部都是重复的,我们一般都不会去重复的写头部和底部,而是把公共页面的部分抽取

出来放到一个页面中去。

2. 作用

在当前页面用于包含其他页面。

3. 语法

<%@include file="common/header.jsp"%>

其中的file属性用于指定被引入文件的相对路径。  file属性的设置值必须使用相对路径,如果以“/”开头,表示

相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

4. 注意细节

(1) 被引入的文件必须遵循JSP语法。

(2) 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里

面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。 

(3) 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令

不能冲突(除了pageEncoding和导包除外)。 

(4) include指令的原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一个

java源文件,再编译运行!这种包含叫静态包含(源码包含)。

(5) 如果使用静态包含,被包含页面中不需要出现全局的html标签了!(如html、head、body)

三. page指令

1. 简介

page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页

面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。 

2. 作用

告诉tomcat服务器如何翻译JSP文件。

3. 语法


 
 
  1. <%@ page
  2. language= "java" --告诉服务器使用什么动态语言来翻译jsp文件
  3. import="java.util.*" --告诉服务器java文件使用什么包
  4. 可以在一条page指令的 import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔:
  5. pageEncoding= "utf-8" --告诉服务器使用什么编码翻译jsp文件(成java文件)
  6. contentType= "text/html; charset=utf-8" 服务器发送给浏览器的数据类型和内容编码
  7. errorPage= "error.jsp" --指定当前jsp页面的错误处理页面。
  8. isErrorPage= "false" --指定当前页面是否为错误处理页面。 false,不是错误处理页面,则不能使用exception内置对象; true,是错误处理页面,可以使用exception内置对象。
  9. buffer= "8kb" --jsp页面的缓存区大小。
  10. session= "true" --是否开启session功能。 false,不能用session内置对象; true,可以使用session内置对象。
  11. isELIgnored= "false" --是否忽略 EL表达式。
  12. %>

4. 注意事项

(1) <%@ page import="java.util.Date,java.sql.*,java.io.*"%>

上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类:


 
 
  1. <%@ page import= "java.util.Date"%>
  2. <%@ page import= "java.sql.*"%>
  3. <%@ page import= "java.io.*"%>

(2) JSP引擎会根据page指令的contentType属性生成相应的调用ServletResponse.setContentType方法的语

句。

(3) page指令的contentType属性还具有说明JSP源文件的字符编码的作用。在开发工具中,以后只需要设置

pageEncoding即可解决中文乱码问题

(4) errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注

意不是站点根目录),否则,表示相对于当前页面。

(5) 可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-

type>子元素指定异常类的完全限定名,<location>元素指定以“/”开头的错误处理页面的路径。 如果设置了

某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。

(6) 全局错误处理页面


5. 使用page指令解决JSP中文乱码

(1) 分析


① JSP文件中有个”中国”字符,保存后保存到硬盘中,此时硬盘中就有”中国”的字节(01二进制代码),此时

字符转换成字节也是需要查码表的,用记事本写的保存后是以默认值GBK保存的;

② Tomcat从硬盘中读取到这个文件后就会翻译,把它翻译成一个Java源文件,Java源文件中是一个文件,文件

中也是中文,所以存储的也是字符,字节变字符仍然需要编码,此时查码表就是查pageEncoding=”utf-8”中

声明的码表;

③ 然后进行编译,把它编译成class字节码文件,这个过程也需要查码表,这个时候就是前面源文件保存的时候是

什么编码,那么就编译成什么编码。前面翻译的时候是以”utf-8”翻译的,后面编译也是以”utf-8”编译。所

以是根据源文件的内容的编码来决定的;

④ 字节码文件也需要构造对象运行,运行最后要输出给浏览器,输出给浏览器的过程就需要把字节数据转换成字

符数据,输出到浏览器的过程查看的码表是由contentType = “text/html;charset=utf-8”决定的;

⑤最后,浏览器也需要解码,所以还要看下浏览器的编码设置。

(2) 结论:如果在Eclipse工具中要避免中文乱码问题,只需要写pageEncoding即可。如果用记事本那么就需要

注意别的问题。

(3) JSP程序存在有与Servlet程序完全相同的中文乱码问题

①输出响应正文时出现的中文乱码问题 

②读取浏览器传递的参数信息时出现的中文乱码问题

(4) JSP引擎将JSP页面翻译成Servlet源文件时也可能导致中文乱码问题(UTF-8);

(5) 如何解决JSP引擎翻译JSP页面时的中文乱码问题?

答:通过page指令的contentType属性说明JSP源文件的字符集编码或page指令的pageEncoding属性说明JSP

源文件的字符集编码。

四. taglib指令

Taglib指令用于在JSP页面中导入标签库。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值