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.*"%>
 
使用page指令解决JSP中文乱码
   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页面中导入标签库,后面详解
 
 
posted @ 2013-03-09 21:28  hacket520  阅读(372)  评论(0编辑  收藏  举报