作用: 告诉tomcat服务器如何翻译jsp文件
<%@ page
language="java" --告诉服务器使用什么动态语言来翻译jsp文件
import="java.util.*" --告诉服务器java文件使用什么包(导入包),
多个包之间用逗号分割
pageEncoding="utf-8" --告诉服务器使用什么编码翻译jsp文件(成java文件)
contentType="text/html; charset=utf-8" --服务器发送浏览器的数据类型和内容编码。
注意:在开发工具中,以后只需要
设置pageEncoding即可解决中文乱码问题
errorPage="error.jsp" --指定当前jsp页面的错误处理页面。
isErrorPage="false" --指定当前页面是否为错误处理页面。
false,不是错误处理页面,则不能使用exception内置对象;
true,是错误处理页面,可以使用exception内置对象。
buffer="8kb" --jsp页面的缓存区大小。
session="true" --是否开启session功能。false,不能用session内置对象;
true,可以使用session内置对象。
isELIgnored="false" --是否忽略EL表达式。
%>
【1】language="java"是固定写法
【2】import="java.util.*"是引入package,多个包之间用","分隔,例如:
【3】pageEncoding和contentType都涉及到编码的问题,但两者影响的是不同的阶段。
我们需要搞清楚,这里面哪些地方涉及到了编码。
(1)jsp文件存储时,需要编码。
jsp文件最终会以“字节(byte)”的形式存储在磁盘上,
所以需要将内存中的字符串参照某一个码表,转换为字节流输出。
(2)由jsp文件向java文件转换的时候需要两次转码。
第一次,将jsp文件读取到内存,是将字节流转换为字符流,需要转码;
第二次是将内存中的字符流转换为java文件的字节流,需要转码。
不过,这两次转码,都是参照pageEncoding指定的编码进行。
(3)由java文件向class文件转换,也需要两次转码。两次转码都是使用pageEncoding指定的编码。
(4)当用户访问jsp文件时,由class文件输出内容,需要两次转码。
第一次是从class文件读取出字符串的时,用到的是pageEncoding编码;
第二次是当Tomcat服务器向浏览器发送数据时,使用的是contentType中指定的编码。
(5)在浏览器中,也可以指定接收Tomcat服务器时的字符编码方式
技巧:如果我们在使用myEclipse的时候,只指定pageEncoding="utf-8",而省略contentType属性, 那么(1)(2)(3)(4)的涉及到的编码都会用pageEncoding指定的编码格式,从而解决中文乱码的问题。
【4】errorPage是指定当前jsp页面的错误处理页面。
【5】isErorrPage是指定当前页面是否为错误处理页面。
false,不是错误处理页面,则不能使用exception内置对象;
true,是错误处理页面,可以使用exception内置对象。
示例:pageDemo.jsp,用errorPage指定错误页
<%@ page language="java" pageEncoding="utf-8" errorPage="common/errorPage.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>page命令</title> </head> <body> <% //String name = null; //int len = name.length(); int a = 2; int b = 0; int c = a / b; %> 这是我的测试<br> </body> </html>
示例:errorPage.jsp,用isErrorPage="true"标识自身是错误页。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" isErrorPage="true" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>出现错误啦!!!</title> </head> <body> 你访问的网页出错啦!!!网站管理员正在修复中。。。<br> 错误原因:<%=exception.getMessage() %> </body> </html>
配置全局的错误处理页面,需要在web.xml中配置:
<!-- 全局错误处理页面配置 --> <error-page> <error-code>404</error-code> <location>/common/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/common/500.jsp</location> </error-page>
完整的web.xml配置错误页面:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <!-- 全局错误处理页面配置 --> <error-page> <error-code>404</error-code> <location>/common/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/common/500.jsp</location> </error-page> </web-app>
也可以按照错误的类型来跳转到相关的页面
<error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/common/NullPointer.jsp</location> </error-page> <error-page> <exception-type>java.io.IOException</exception-type> <location>/common/IOExceptionPage.jsp</location> </error-page>
【6】session:是否开启session功能,可能通过查看由jsp转换成的java文件来验证这一点。
false,不能用session内置对象;
true,可以使用session内置对象。
【7】buffer:jsp页面的缓存区大小。默认的buffer的值是8kb。
JSP中有九大内置对象,其中一个是out对象,它的类型是JspWriter,具有缓冲功能,它的缓冲区的大小就是由buffer来指定的。
示例:我们可以将buffer设置为1kb进行测试,测验的目的是检验缓冲区的机制。out对象是JspWriter类型,具有缓冲区;而response.getWriter()得到的对象是PrintWriter类型,不具有缓冲区,会直接输出的内容,我们根据这两者的不同来检验缓冲区的机制。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="1kb" %><% System.out.println("for之前查看缓存区大小:" + out.getBufferSize());//查看缓存区大小 System.out.println("for之前查看剩余缓存区大小:" + out.getRemaining());//查看缓存区剩余大小 //如果count取值为1023,那么1023个a占用1023个字节(byte)小于1KB,会稍后输出; //如果count取值为1024,正好占用1KB缓冲区空间,会先输出 int count = 1023; for(int i=0;i<count;i++) { out.write("a"); } //out.flush();//刷新缓存 System.out.println("for之后查看缓存区大小:" + out.getBufferSize());//查看缓存区大小 System.out.println("for之后查看剩余缓存区大小:" + out.getRemaining());//查看缓存区剩余大小 response.getWriter().write("hello");//response.getWriter()不带有缓冲区,会直接输出。 out.write("a"); System.out.println("最后查看缓存区大小:" + out.getBufferSize());//查看缓存区大小 System.out.println("最后查看剩余缓存区大小:" + out.getRemaining());//查看缓存区剩余大小 %>
【8】isELIgnore: 是否忽略EL表达式。