美文网首页JavaWeb
JavaWeb-016-JSP指令

JavaWeb-016-JSP指令

作者: 53b3f4658edc | 来源:发表于2017-11-23 21:56 被阅读11次

    JSP指令简介

    • JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
    • JSP指令的基本语法格式:
      • <%@ 指令 属性名="值" %>
        举例:<%@ page contentType="text/html;charset=gb2312"%>
      • 注意:属性名部分是大小写敏感的
    • 在目前的JSP 2.0中,定义了page、include和taglib这三种指令,每种指令中又都定义了一些各自的属性。
    • 如果要在一个JSP页面中设置同一条指令的多个属性,可以使用多条指令语句单独设置每个属性,也可以使用同一条指令语句设置该指令的多个属性。
      • 第一种方式:
        <%@ page contentType="text/html;charset=gb2312"%>
        <%@ page import="java.util.Date"%>
      • 第二种方式:
        <%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>

    Page指令

    • page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
    • JSP 2.0规范中定义的page指令的完整语法:
    <%@ page 
    [ language="java" ]         //指定使用的语言(目前只有Java)
    [ extends="package.class" ] //JSP翻译成源文件之后,继承的父类
    [ import="{package.class | package.*}, ..." ]   //进行导包
    [ session="true | false" ]              //是否使用session这个隐含对象,默认是true,是否生成HttpSession这个对象
    [ buffer="none | 8kb | sizekb" ] 
    [ autoFlush="true | false" ] 
    [ isThreadSafe="true | false" ] 
    [ info="text" ] 
    [ errorPage="relative_url" ]            //出错的时候,跳转到这个页面去,/表示的是当前web应用的根目录,这里是转发的形式(这样exception才不是null)
    [ isErrorPage="true | false" ]      //这个页面是不是错误页面(错误页面会启用exception隐含对象)
    [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] 
                                    //指定当前JSP页面的响应类型(实际调用的是response.setContenttype()方法)
    [ pageEncoding="characterSet | ISO-8859-1" ]    //指定当前JSP页面的字符编码格式
    [ isELIgnored="true | false" ]          //当前JSP页面是否忽略EL表达式,默认是false,启用
    %>
    
    • errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面。
    • 可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的完全限定名,<location>元素指定以“/”开头的错误处理页面的路径。
      如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。

    测试代码

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">
        
          <!-- 全局error页面 -->
          <error-page>
            <error-code>500</error-code>
            <location>/error.jsp</location>
          </error-page>
          
    </web-app>
    

    indexA.jsp

    <%--
     JSP指令:
        1.这就是JSP指令
        2.里面的内容可以分开成几个JSP写(空格分开的)),也可以一次写完 
        3.三种指令:
            3.1.page
            3.2.include
            3.3.taglib
    --%>
    
     <%@ page language="java"  contentType="text/html;charset=UTF-8"  pageEncoding="UTF-8" %>
    
    <%-- 
        page指令:
            1.无论page指令出现在页面的任何地方,最作用的范围都是整个页面,但是一般写在开头
            2.常用内容:
                2.1.language="java" :                                           指定使用的语言(目前只有Java)
                2.2.[ extends="package.class" ] :                       SP翻译成源文件之后,继承的父类
                2.3.[ import="{package.class | package.*}, ..." ] : 进行导包
                2.4.[ session="true | false" ]:                             是否使用session这个隐含对象,默认是true(是否生成HttpSession这个对象)                  
                2.5.[ errorPage="relative_url" ] :                          出错的时候,跳转到这个页面去,/表示的是当前Web应用的根目录
                2.6.[ isErrorPage="true | false" ]:                         这个页面是不是错误页面(错误页面会启用exception隐含对象)
                2.7.[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] 
                                                                                        指定当前JSP页面的响应类型(实际调用的是response.setContenttype()方法)
                2.8.[ pageEncoding="characterSet | ISO-8859-1" ]指定当前JSP页面的字符编码格式
                2.9.
                
                
                
    --%>
     
     <%-- 
        2.3.
            import
                -不用显示导包的(生成的Servlet中自己就有):
                    import javax.servlet.*;
                    import javax.servlet.http.*;
                    import javax.servlet.jsp.*; 
     --%>
    <%@ page  import="java.util.Date" %>
     
    <%-- 
        2.4.
            session
                -是否启用session这个隐含对象,默认是true
    --%>
     <%@ page session="false" %>
       <%--
        2.8.
        errorPage
            -出错的时候(抛异常到了JVM),跳转到这个页面去,/表示的是当前Web应用的根目录
        --%> 
    <%@ page errorPage="/404/index.jsp" %>
        
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
            
        </head>
        
        <body>
            <%
                System.out.println("Date: " + new Date());
            %>
            
            <%--
                <%= session.getId()%>       //因为上面的page指令中的session="false",所以隐藏对象session不能使用 
            --%>
            
            <%
                int i = 10/0;
            %>
        </body>
    </html>
    

    testXMLError.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
        </head>
        
        <body>
            <%
                int i = 1/0;
            %>
        </body>
    </html>
    

    errorPage

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <!-- 是错误页面 -->
    <%@ page isErrorPage="true" %>
    
    <!doctype html>
    <html>
    <head>
        <title>错误页面</title>
        <meta charset="UTF-8" />
        <link rel="stylesheet" href="css/404.css">
    
        <script src="404/js/jquery.min.js"></script>
        <script src="404/js/scriptalizer.js" type="text/javascript"></script>
        
        <script type="text/javascript">
            $(function(){
                $('#parallax').jparallax({});
            });
        </script>
        
    </head>
    <body>
    
    <div id="parallax">
        <div class="error1">
            <img src="404/images/wand.jpg" alt="Mauer" />
        </div>
        <div class="error2">
            <img src="404/images/licht.png" alt="Licht" />
        </div>
        <div class="error3">
            <img src="404/images/halo1.png" alt="Halo1" />
        </div>
        <div class="error4">
            <img src="404/images/halo2.png" alt="Halo2" />
        </div>
        <div class="error5">
            <img src="404/images/batman-404.png" alt="Batcave 404" />
        </div>
    </div>
    
            <%-- 调用exception隐含对象的exception对象 --%>
            <%
                System.out.println(exception.getMessage());
            %>
    </body>
    </html>
    
    微信公众号:JavaWeb架构师

    include指令

    • include指令用于通知JSP引擎在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称之为静态引入,当前JSP页面与静态引入的页面紧密结合为一个Servlet。
    • 语法:
      <%@ include file="relativeURL"%>
      • 其中的file属性用于指定被引入文件的相对路径。
    • 细节:
      • 被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素、JSP指令和JSP行为元素等普通JSP页面所具有的一切内容。
      • 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
    • 在将JSP文件翻译成Servlet源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素(设置pageEncoding属性的page指令除外),所以,除了import和pageEncoding属性之外,page指令的其他属性不能在这两个页面中有不同的设置值。
    • 除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。
    • 引入文件与被引入文件是在被JSP引擎翻译成Servlet的过程中进行合并,而不是先合并源文件后再对合并的结果进行翻译。当前JSP页面的源文件与被引入文件的源文件可以采用不同的字符集编码,即使在一个页面中使用page指令的pageEncoding或contentType属性指定了其源文件的字符集编码,在另外一个页面中还需要用page指令的pageEncoding或contentType属性指定其源文件所使用的字符集 。
    • Tomcat 5.x在访问JSP页面时,可以检测它所引入的其他文件是否发生了修改,如果发生了修改,则重新编译当前JSP页面
    • file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

    测试代码
    a.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
        </head>
        
        <body>
            <h1>A Page</h1>
            
            <%-- 在a.jsp中中包含b.jsp  --%>
            <%--
                     1.这是静态包含
                     2.b.jsp的页面内容相当于粘贴在这里了
                     3.只有生成一个Java源文件
                     4.语法:
                        <%@ include file="relativeURL"%>
                        其中的file属性用于指定被引入文件的相对路径,file属性的设置值必须使用相对路径,
                        如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),
                        否则,表示相对于当前文件。
            --%>
            <%@ include file="b.jspf" %>            
            
            <h1>我是a.jsp</h1>
        </body>
    </html>
    

    b.jspf

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <h1>B Page</h1>
    <% 
                System.out.println("我是b.jspf");
    %>
    
    微信公众号:JavaWeb架构师

    其它

    • 源码下载
    关注下方公众号,回复:javaweb_course.code
    
    完整教程PDF版本下载

    相关文章

      网友评论

        本文标题:JavaWeb-016-JSP指令

        本文链接:https://www.haomeiwen.com/subject/icutbxtx.html