美文网首页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指令

    JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引...

  • MIPS指令集与简要分析

    R格式指令 基本格式 指令 算数类指令 逻辑类指令 位移类指令 跳转指令 I格式指令 基本格式 指令 算数指令 逻...

  • 指令指令

    /tellraw @a {"rawtext":[{"text":"你的名字 获得了成就 §a[你要的成就]"}]}...

  • Linux——DAY2进阶指令

    1、df 指令 2、free指令 3、head指令 4、tail指令 5、less指令 6、wc指令 7、date...

  • Java Web开发学习中2.(JSP指令元素)

    JSP指令元素: page指令, include指令,taglib指令. 一. page指令: 用来设定JSP页面...

  • linux指令大全(归类整理)

    一.文件目录指令 1 pwd指令 2 ls指令 3 cd指令 4 mkdir指令 5 rmdir指令 6 touc...

  • 汇编笔记4(跳转)

    第9章(转移指令): 8086转移指令: 无条件转移指令,条件转移指令,循环指令,过程,中断 offset(伪指令...

  • 控制器、微程序控制

    1.控制器的功能 (1)取指令(指令地址,控制信号) (2)分析指令(解释指令,指令译码) (3)执行指令 (4)...

  • (32位汇编 七)堆栈/栈(stack)

    PUSH指令 POP指令 PUSHAD指令 保护现场 POPAD指令 恢复现场

  • Angular 指令,管道,服务

    1. 指令 Directive 指令是 Angular 提供的操作 DOM 的途径。指令分为属性指令和结构指令...

网友评论

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

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