JSP入门[续]
JSP基本语法
06)JSP指令
01)JSP指令的基本语法格式:
<%@ 指令 属性名="值" %>
举例:<%@ page contentType="text/html;charset=UTF-8"%>
02)如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。
例如:
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.Date"%>
也可以写作:
<%@ page contentType="text/html;charset=UTF-8" import="java.util.Date"%>
a)page指令
page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,
page指令最好是放在整个JSP页面的起始位置。
JSP 2.0规范中定义的page指令的完整语法:
<%@ page
[ language="java" ] //指明JSP支持的语言,默认为java语言
[ import="{package.class | package.*}, ..." ] //当前JSP页面中,需要导入的包,其中import可以写多次
[ session="true | false" ] //true表示需要服务器创建session/false不需要服务器创建session,默认true
[ buffer="none | 8kb | sizekb" ] //JSP输出使用的缓存大小,默认8kb
[ autoFlush="true | false" ] //表示当缓存满时,web容器是自动刷新到客户端/false需要手工刷新到客户端,默认true
[ isThreadSafe="true | false" ] //true表示web服务器确保线程安全/false不确保线程安全,默认true
[ info="text" ] //表示jsp的相关描述信息,可以通过getServletInfo()取得该jsp的信息
[ errorPage="relative_url" ] //当前jsp页面出错后,转发到的目标页面,地址栏没有变 例:<%@ page errorPage="error.jsp" %>
[ isErrorPage="true | false" ] //当某个jsp页面有该属性时,web容器会自动创建exception对象,上述异常处理属于局部异常处理,只有为true时,才会创建exception对象
上述异常处理属于局部异常处理,两者通常成对出现
在web.xml中
<error-page>
<error-code>500</error-code>
<location>/error1_500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NumberFormatException</exception-type>
<location>/error2_500.jsp</location>
</error-page>
要同时出现erro-code和exception-type,实验证明exception-type显示
上述异常处理属于全部异常处理
一般是先局部再全局处理
当全局和局部异常同时出现时,局部异常优先
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] //contentType="text/html;charset=UTF-8"
[ pageEncoding="characterSet | ISO-8859-1" ]
//优先pageEncoding="UTF-8"
pageEncoding3种意思,前提在IDE工具中
a)JSP页面的中文采用UTF-8方式编码
b)JSP保存时采用UTF-8方式编码
c)指示浏览器以UTF-8方式查看
使用page指令pageEncoding属性解决JSP中文乱码,
pageEncoding解决输出乱码问题,
request.setCharacterEncoding("utf-8")解决输入问题
[ isELIgnored="true | false" ] //false表法JSP引擎不忽略EL表达式语言/true表法JSP引擎忽略EL表达式语言
%>
[注意]可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔:
<%@ page import="java.util.Date,java.sql.*,java.io.*"%>
上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类:
<%@ page import="java.util.Date"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
1.JSP程序存在有与Servlet程序完全相同的中文乱码问题
输出响应正文时出现的中文乱码问题
读取浏览器传递的参数信息时出现的中文乱码问题
2.JSP引擎将JSP页面翻译成Servlet源文件时也可能导致中文乱码问题(UTF-8)
3.如何解决JSP引擎翻译JSP页面时的中文乱码问题
通过page指令的contentType属性说明JSP源文件的字符集编码
或page指令的pageEncoding属性说明JSP源文件的字符集编码
b) include指令
linclude指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
语法:
<%@ include file="relativeURL"%>
其中的file属性用于指定被引入文件的相对路径。 file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),
否则,表示相对于当前文件。
细节:
1.被引入的文件必须遵循JSP语法。
2.被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,
JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
3.由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。
include指令包含多个JSP页面,最后JSP引擎只翻译总JSP页面,被包含的JSP页面原封不动的进入总JSP页面,造成HTML结构非常混乱,多个JSP最终会翻译成一个Servlet
c)Taglib指令
Taglib指令用于在JSP页面中导入标签库,后面详解
by hacket