JSP指令

JSP指令

JSP 指令的作用是为当前页面做一些基本的属性设置,为当前的页面的运行提供基本的环境。
在JSP中包含三类指令:

  • page,页面指令
  • include,包含指令
  • taglib,标签库指令

这些指令的使用的语法格式均为如下形式:

<%@ 指令名称  属性名=属性值 ... %>

page指令

page指令用于设置当前JSP页面的相关信息, 一个 JSP中可以包含多个 page 指令,有以下几个常用的属性:
pageEncoding
pageEncoding属性用于设置当前JSP页面的字符编码格式。

<%@ page pageEncoding="UTF-8" %>

该属性被翻译到java源码里面的_jspService()方法中的 response.setContentType(“text/html;charset=UTF-8”)

在eclipse中新建JSP时默认的使用ISO8859-1的编码,此时可以通过下列步骤修改创建JSP文件的默认编码:
windows–>preference–>Web–>JSP files,将encoding修改为utf-8即可。

contentType
contentType属性用于设置当前 JSP 页面在浏览器中的内容类型,通常为”text/html”,若在 JSP 页面中设置如下:

<%@ page contentType="text/html;charset=utf-8" %>

上面的作用是服务器向客户端发送数据的时候指定的文件格式是text/html,字符编码是utf-8。

import
该属性主要用于在JSP中导入java包

<%@ page import="java.util.*" %>

在java源码中被翻译为:

import java.util.*;

若要导入多个类,则在 import 属性值中可使用逗号将这些类分隔。

<%@ page import="java.util.*,java.sql.*" %>

errorPage
该属性主要用于指定当前页面运行过程中发生异常时所要跳转到的页面。

<%@ page errorPage="/error.jsp" %>

该属性会被翻译到 Servlet 的_jspService()方法中。

isErrorPage
如果一个页面中指定了发生异常后所要跳转的页面,这时将会出现一个问题:异常信息被隐藏。在控制台看不到异常信息,在所跳转的页面中也看不到异常信息,这样不利于开发者定位错误的原因。此时可以在发生异常后所要跳转的页面中将isErrorPage属性设置为true,将其声明为错误处理页面:

<%@ page isErrorPage="true" pageEncoding="UTF-8"%>

系统出现问题,请联系管理员

<%
    //在控制台中打印异常信息
    exception.printStackTrace();

%>

一个页面中的isErrorPage属性被设置为true之后,在_jspService()方法中,多出了一个变量 exception。这就是内置对象exception,可以通过该对象在控制台打印异常信息。

session
session属性用于指定当前页面中是否可以直接使用内置对象session,默认为 true。

include指令

包含指令,用于将某个文件包含到当前的 JSP 文件中。该指令只有一个属性 file,用于指定要包含的文件。
被包含的文件可以是 JSP 文件,也可以是 HTML文件。
这里定义一个名为 left.jsp 的文件,其中定义了一个变量 sum。

<%
    int sum = 10;
%>

再定义一个index.jsp文件,将left.jsp文件包含进来:

<%@ include file="/left.jsp" %>
<br>
<!-- 访问sum变量 -->
<%= sum%>

找到生成java文件的目录,里面只生成了一个 index_jsp.java 的文件,并没有生成left_jsp.java 文件。那是因为 JSP 翻译引擎在翻译时,会将 include 指令所指定的文件内容直接翻译到当前 JSP 的java源码中,形成一个.java 文件。这个包含操作是在编译之前由 JSP 翻译引擎完成的,不是在程序运行期完成的。这种包含通常被称为静态包含,与之相对的还有动态包含(后面会讲到)。
由于在编译期就将这些文件合并为了一个 java文件,所以,整个过程就一个_jspService()方法。也就是说,这些文件之间是可以相互访问局部变量的,只要满足变量声明与使用的先后顺序即可。

为什么使用 include 指令
在一个web系统中,往往很多页面的头部、底部等内容是相同的,为了减少重复性的工作和便于修改,可以将这些内容相同的内容单独定义为一个jsp文件,在需要的时候直接使用include指令将其引入进来即可,这样不仅大大减少了工作量,还做到了对于页面修改的”一改全改”效果。