全国咨询/投诉热线:400-618-4000

JAVA培训之page指令中的属性详解

更新时间:2016年09月23日10时58分 来源:传智播客JAVA培训学院 浏览次数:

jsp文件的三个指令中,page指令的属性最多,今天我们就来一一学习page指令的各个属性。

1.import属性

import属性表示导入jar包,对应着java文件中的import语句,该属性是page指令中唯一一个可以重复出现的属性,例如:<%@page import=”java.util.*” import=”java.net.*” import=”java.sql.*”%>,也可以写成<%@page import=”java.net.*,java.util.*,java.sql.*”%>,多个包之间用逗号隔开。

2.errorPage属性和isErrorPage属性

我们知道,如果一个页面出现错误,在浏览器端访问这个页面时,服务器会响应错误信息,但是一般在开发中,为了让用户体验更好一些,开发人员不会让用户看到错误信息,这时我们就可以使用page指令的errorPage属性指定错误页面,给用户一种友好的体验。
errorPage属性的作用:当前访问的页面如果抛出异常,就转发到errorPage属性指定的页面。下面我们来验证一下,如下所示:
(1)在一个web工程下创建一个one.jsp,主要代码如例1-1所示:
例1-1 one.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" errorPage="errorPage.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>
  <body>
   <%
     int n=1/0;
    %>
  </body>
</html>
例1-1中,在page指令中设置errorPage属性的值为“errorPage.jsp”,表示如果one.jsp页面出现问题,就转发到errorPage.jsp。
(2)在当前web应用下再次新建一个jsp页面,errorPage.jsp,主要代码如例1-2所示:
例1-2 errorPage.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>哈哈~出错了</h1>
</body>
</html>
(3)将工程发布到服务器中,然后启动服务器,在浏览器端访问one.jsp页面,浏览器显示结果如图1-1所示:

图1-1 浏览器显示结果
由图1-1可知,浏览器地址栏上的地址仍然是one.jsp页面的访问地址,说明当页面抛出异常,使用errorPage属性会转发到指定的页面。
(4)使用HttpWatch工具抓取请求响应信息,如图1-2所示:

图1-2 响应状态码
图1-2中,响应状态码是200,表示响应成功。访问one.jsp页面,该页面有错误,服务器本应该响应500状态码,而现在却相应200状态码,出现这种现象是由于我们没有设置另外一个属性:isErrorPage。下面我们来了解这个属性:
isErrorPage属性的作用是指定当前页面是否为处理错误的页面,如果值为true,这个页面会设置响应状态码500,并且在该页面中可以使用jsp九大内置对象中的exception对象。
(5)在errorPage.jsp页面的page指令中添加一个属性,isErrorPage,值为true,如下所示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
(6)然后再在浏览器端访问one.jsp,使用HttpWatch工具抓取到的信息如图1-3所示:

图1-3 响应状态码
由图1-3可知,当在errorPage.jsp页面中设置了isErrorPage属性,响应状态码就为500了。
(7)在errorPage.jsp页面使用九大内置对象中的exception对象,如例1-3所示:
例1-3 errorPage.jsp
<body>
<h1>哈哈~出错了</h1>
<%
 exception.printStackTrace(response.getWriter());
 %>
</body>
例1-3中,使用九大内置对象将异常信息打印在浏览器端。
(8)在浏览器端再次访问one.jsp,浏览器显示结果如图1-4所示:

图1-4 浏览器显示结果
如果jsp页面中没有isErrorPage=true,那么该页面中就不能使用exception内置对象。
温馨提示:IE浏览器会在状态码为500时,并且响应正文的长度小于等于512B时不给予显示!而是显示“网站无法显示该页面”字样。这时你只需要添加一些响应内容即在浏览器端显示.

3.web.xml中配置错误页面

错误页面不仅可以在jsp页面中配置,还可以在web.xml中配置。如例1-4所示:
例1-4 web.xml
   <error-page>
    <error-code>404</error-code>
    <location>/error404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error500.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/error.jsp</location>
  </error-page>
在例1-4中,如果响应的状态码是404时,会转发到error404.jsp页面,如果响应状态码是500,会转发到error500.jsp页面,当服务器端抛出RuntimeException,会转发到error.jsp页面。
我们知道无论服务器端抛出什么异常,响应的状态码都是500,那么当服务器端抛出RuntimeException时,是转发到error500.jsp还是转发到error.jsp?由于状态码500的范围比较大,相对来说不够具体,所以会转发到error.jsp页面。如果响应状态码是500,但并不是RuntimeException异常,那么就转发到error500.jsp。
下面我们来验证一下,如下所示:
(1)在web应用下新建一个error目录,在该目录下新建一个errorPage.jsp,页面的主要内容如例1-5所示:
 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!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>哈哈~出错了</h1>
</body>
</html>
(2)该应用的web.xml,如例1-6所示:
    <error-page>
    <error-code>404</error-code>
    <location>/error/errorPage.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/errorPage.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/index.jsp</location>
  </error-page>
(3)重启服务器,在浏览器端访问一个不存在的页面,浏览器的显示结果如图1-5所示:

图1-5 浏览器显示结果

4.autoFlush属性和buffer属性

这两个属性很少使用,我们了解一下即可,如下所示:
  • autoFlush属性:指定jsp的输出缓冲区被响应信息填满时,是否自动刷新。默认值为true,如果值为false,表示在缓冲区被填满时抛出异常;
  • buffer属性:指定缓冲区的大小,默认是8kb,通常不需要修改。

5.其他属性

page指令的其他不常用属性,如下所示:
  • isELIgnored属性:是否忽略el表达式,默认值是false,表示不忽略;
  • language属性:指定当前jsp编译后的语言类型,默认值为java;
  • info:jsp的说明信息;
  • isThreadSafe:当前的jsp是否支持并发访问;
  • session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象;
  • extends:让jsp生成的servlet去继承该属性指定的类。

本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额