• JSP 学习二


    在基于昨天对JSP学习的基础上,今天我们来学习JSP的指令和JSP 对中文的处理。

    一、JSP指令简介

      JSP 指令是为JSP引擎而设计,它并不直接产生任何可见的输出,而只是告诉引擎如何处理JSP页面中其余的部分。

      JSP的指令共定义了三个指令:

    page指令

    include指令

    taglib指令

    JSP指令的基本语法格式:<% @ 指令 属性名=“值” %>

    例如:

    <% @ page contentType="text/html";charset="gb2312" %>

    如果一个指令有多个属性,这多个属性可以放在一个指令中,也可以分开写。

    例如:

    <% @ page contentType="text/html";charset="gb2312" %>
    <% @ page import="java.util.*" %>

    也可写成:中间空格隔开

    <%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>

    二、Page指令

      page指令用于定义JSP页面的各种属性,无论page指令出现在页面中的什么地方,它作用域都是整个JSP的页面,但一般我们为了保持程序的可读性和良好编程习惯,page指令建议放在整个JSP页面的开头位置。

    page指令的完整语法为:

    <%@ page 
        [ language="java" ] 
        [ extends="package.class" ] 
        [ import="{package.class | package.*}, ..." ] 
        [ session="true | false" ] 
        [ buffer="none | 8kb | sizekb" ] 
        [ autoFlush="true | false" ] 
        [ isThreadSafe="true | false" ] 
        [ info="text" ] 
        [ errorPage="relative_url" ] 
        [ isErrorPage="true | false" ] 
        [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] 
        [ pageEncoding="characterSet | ISO-8859-1" ] 
        [ isELIgnored="true | false" ] 
    %>

     2.1 page指令的import属性:

    在JSP页面中,JSP引擎会自动导入下面的包:

    • java.lang.*
    • javax.servlet.*
    • javax.servlet.jsp.*
    • javax.servlet.http.*

    如果要导入其他的包可以使用下面的方式进行导入:

    <%@ page import="java.util.Date"%>
    <%@ page import="java.io.*" %> <%@ page import="java.sql.*" %>

    当然我们也可以采用一条指令完成:
    <%@ page import="java.util.*,java.io.*,java.sql.*"%>
    其中的每个包或类之间使用逗号(,)分隔

    建议采用第一种方式,更加的清晰。


    2.2 page 指令的errorPage 属性

    1.errorpPage 属性的设置必须使用相对的路径,如果以/ 开头,表示相对当前web应用程序的根目录注意不是站点根目录;否则表示相对当前页面。
    2. 可以在web.xml 中使用<error-page>元素为整个web应用程序设置错误处理页面。
      <error-page> 元素有3个子元素:<error-code> <exception-type> <location>
    • <error-code>子元素指定错误的状态码,例如:<error-code>404</error-code>
    • <exception-type>子元素指定异常类的完全限定名,例如:<exception-type>java.lang.ArithmeticException</exception-type>
    • <location>子元素指定以“/”开头的错误处理页面的路径,例如:<location>/ErrorPage/404Error.jsp</location>

    注意:

    如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。

    2.3 使用page指令的isErrorPage属性显示声明页面为错误页面

    如果某一个jsp页面是作为系统的错误处理页面,那么建议将page指令的isErrorPage属性(默认为false)设置为"true"来显式声明这个Jsp页面是一个错误处理页面。

    例如:将error.jsp页面显式声明为错误处理页面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
    <html>
      <head>
        <title>错误信息友好提示页面</title>
      </head>
      
      <body>
               对不起,出错了,请联系管理员解决!
      </body>
    </html>

    将error.jsp页面显式声明为错误处理页面后,有什么好处呢,好处就是Jsp引擎在将jsp页面翻译成Servlet的时候,在Servlet的 _jspService方法中会声明一个exception对象,然后将运行jsp出错的异常信息存储到exception对象中

    由于Servlet的_jspService方法中声明了exception对象,那么就可以在error.jsp页面中使用exception对象,这样就可以在Jsp页面中拿到出错的异常信息了,如下:



    如果没有设置isErrorPage="true",那么在jsp页面中是无法使用exception对象的,因为在Servlet的_jspService方法中不会声明一个exception对象。
    Jsp有9大内置对象,而一般情况下exception对象在Jsp页面中是获取不到的,只有设置page指令的isErrorPage属性为"true"来显式声明Jsp页面是一个错误处理页面之后才能够在Jsp页面中使用exception对象。

    三、include 指令

    在JSP中对于包含有两种语句形式:

    1. @include指令
    2. <jsp:include>指令

    3.1、@include指令

      @include可以包含任意的文件,当然,只是把文件的内容包含进来。

      include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

    语法:<%@ include file="relativeURL"%>,其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。

    include指令细节注意问题:

    1. 被引入的文件必须遵循JSP语法。
    2. 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments(片段))作为静态引入文件的扩展名。
    3. 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。

    3.2、总结@include指令

      使用@include可以包含任意的内容,文件的后缀是什么都无所谓。这种把别的文件内容包含到自身页面的@include语句就叫作静态包含,作用只是把别的页面内容包含进来,属于静态包含。

    3.3、jsp:include指令

      jsp:include指令为动态包含,如果被包含的页面是JSP,则先处理之后再将结果包含,而如果包含的是非*.jsp文件,则只是把文件内容静态包含进来,功能与@include类似。后面再具体介绍

    参考:http://www.cnblogs.com/xdp-gacl/p/3778993.html
















  • 相关阅读:
    前序遍历和中序遍历树构造二叉树
    2014百度之星初赛第一场部分题解
    爬虫小记--抓取过程简要分析
    前端程序猿必知:单页面应用的核心
    swift -类的定义及使用
    【Unity优化】怎样实现Unity编辑器中的协程
    poj 1125 (floyed 最短路径)
    Android API Guides---Tasks and Back Stack
    循环-16. 猴子吃桃问题(15)
    零java基础搞定微信Server
  • 原文地址:https://www.cnblogs.com/pony1223/p/5605722.html
Copyright © 2020-2023  润新知