JSP指令
一个服务器上可以配好多站点,一个站点下可以配好多web应用。
1. JSP指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP 2.0规范*定义了三个指令:page指令、Include指令、taglib指令。
l JSP指令的基本语法格式:<%@ 指令 属性名="值" %>
举例:<%@ pagecontentType="text/html;charset=gb2312"%>
l 如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。例如:
<%@ pagecontentType="text/html;charset=gb2312"%>
<%@ pageimport="java.util.Date"%>
也可以写作:
<%@ pagecontentType="text/html;charset=gb2312"import="java.util.Date"%>
2. Page指令
l page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
l JSP 2.0规范中定义的page指令的完整语法:
下面语法中加粗的都是常用的,不加粗的是不常用的或服务器默认的、自动设置的。
[ language="java" ]
[ extends="package.class"]
[ import="{package.class| package.*}, ..." ]
JSP 引擎自动导入下面的包:
ü java.lang.*
ü javax.servlet.*
ü javax.servlet.jsp.*
ü javax.servlet.http.*
l 可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔:
<%@ pageimport="java.util.Date,java.sql.*,java.io.*"%>
l 上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类:
<%@ pageimport="java.util.Date"%>
<%@ pageimport="java.sql.*"%>
<%@ pageimport="java.io.*"%>
[ session="true | false" ]
[ buffer="none | 8kb | sizekb"]
[ autoFlush="true | false" ]
[ isThreadSafe="true |false" ]
[ info="text" ]
[ errorPage="relative_url"]
l errorPage属性的设置值建议使用相对路径(不写“/”或者写“./”);也可以使用绝对路径,但是这里用的绝对路径有些特殊,即以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面。
l 也可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的完全限定名,<location>元素指定以“/”开头的错误处理页面的路径。
l 如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。
l JSP引擎会根据page指令的contentType属性生成相应的调用ServletResponse.setContentType方法的语句。
l page指令的contentType属性还具有说明JSP源文件的字符编码的作用。
[ isErrorPage="true | false" ]
[ contentType="mimeType [ ;charset=characterSet ]" |"text/html ; charset=ISO-8859-1"]
[ pageEncoding="characterSet | ISO-8859-1" ]
[ isELIgnored="true | false" ]
%>
1).在IE【工具】->【Internet选项】->【高级】中勾掉【显示友好http错误提示】;
2).确保error.jsp的大小>1024字节。
l 使用page指令解决JSP中文乱码
l JSP程序存在有与Servlet程序完全相同的中文乱码问题
l 输出响应正文时出现的中文乱码问题
l 读取浏览器传递的参数信息时出现的中文乱码问题
l JSP引擎将JSP页面翻译成Servlet源文件时也可能导致中文乱码问题
l JSP引擎将JSP源文件翻译成的Servlet源文件默认采用UTF-8编码,而JSP开发人员可以采用各种字符集编码来编写JSP源文件,因此,JSP引擎将JSP源文件翻译成Servlet源文件时,需要进行字符编码转换。
l 如果JSP文件中没有说明它采用的字符集编码,JSP引擎将把它当作默认的ISO8859-1字符集编码处理。
l 如何解决JSP引擎翻译JSP页面时的中文乱码问题
l 通过page指令的contentType属性说明响应正文的编码
l page指令的pageEncoding属性说明JSP源文件的字符集编码;设置了pageEncoding属性后就不用再设置contenttype属性了。
3. include指令
l include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
l 语法:<%@ includefile="relativeURL"%>
其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
l 细节:
ü 被引入的文件必须遵循JSP语法。
ü 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
ü 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。
注意:include指令与分派器的include()方法的区别:
Include指令是静态引入,tomcat等服务器把多个jsp翻译成servlet类时只产生一个java文件,多个jsp文件被加载到了一个servlet类;而分派器的include()方法是动态导入,他会有几个jsp就生成几个jservlet类;后者的效率比前者低一些,因为前者只需要翻译一个java类。分派器的相关用法:request.getRequestDispatch().include(request,response);
4.taglib指令
l Taglib指令用于在JSP页面中导入标签库,讲自定义标签技术时讲。
下一篇: cakephp笔记——view层