美文网首页
JavaWeb-JSP三大指令

JavaWeb-JSP三大指令

作者: Tian_Peng | 来源:发表于2020-01-02 11:00 被阅读0次

原文链接: http://www.cnblogs.com/xdp-gacl/p/3778993.html

JSP指令简介

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 2.0规范中共定义了三个指令:

  • page指令
  • include指令
  • taglib指令

JSP指令的基本语法格式:<%@ 指令 属性名="值" %>
例如:<%@ page contentType="text/html;charset=gb2312"%>
如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。
例如:
<%@ 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" ] 
      [ 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" ] 
 %>
page指令的import属性

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

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

可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号(,)分隔,例如:

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

上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类:

<%@ page import="java.util.Date"%>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
page指令的errorPage属性
  • errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前Web应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面。
    可以在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文件中设置的错误处理将不对该页面起作用。
使用errorPage属性指明出错后跳转的错误页面

比如Test.jsp页面有如下的代码:

<%@ page language="java" import="java.util.*" errorPage="/ErrorPage/error.jsp" pageEncoding="UTF-8"%>
<html>
   <head>
      <title>测试page指令的errorPage属性</title>
   </head>
   <body>
     <%
         //这行代码肯定会出错,因为除数是0,一运行就会抛出异常
         int x = 1/0;
      %>
  </body>
</html>

在Test.jsp中,page指令的errorPage属性指明了出错后跳转到"/ErrorPage/error.jsp",error.jsp页面代码如下:

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

运行结果如下:

在web.xml中使用<error-page>标签为整个web应用设置错误处理页面

例如:使用<error-page>标签配置针对404错误的处理页面
web.xml的代码下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     <display-name></display-name>    
     <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
   
     <!-- 针对404错误的处理页面 -->
     <error-page>
         <error-code>404</error-code>
         <location>/ErrorPage/404Error.jsp</location>
     </error-page>  
</web-app>

404Error.jsp代码如下:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <html>
   <head>
     <title>404错误友好提示页面</title>
     <!-- 3秒钟后自动跳转回首页 -->
     <meta http-equiv="refresh" content="3;url=${pageContext.request.contextPath}/index.jsp">
    </head>
    <body>
     <img alt="对不起,你要访问的页面没有找到,请联系管理员处理!" 
     src="${pageContext.request.contextPath}/img/404Error.png"/><br/>
     3秒钟后自动跳转回首页,如果没有跳转,请点击<a href="${pageContext.request.contextPath}/index.jsp">这里</a>
   </body>
 </html>

include指令

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

  • @include指令(静态包含)
  • <jsp:include>指令(动态包含 )
@include指令

@include可以包含任意的文件,当然,只是把文件的内容包含进来。
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入

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

include指令细节注意问题:

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

include指令使用范例:
新建head.jspf页面和foot.jspf页面,分别作为jsp页面的头部和尾部,存放于WebRoot下的jspfragments文件夹中,代码如下:
head.jspf代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <h1 style="color:red;">网页头部</h1>

foot.jspf代码:

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <h1 style="color:blue;">网页尾部</h1>

在WebRoot文件夹下创建一个IncludeTagTest.jsp页面,在IncludeTagTest.jsp页面中使用@include指令引入head.jspf页面和foot.jspf页面,代码如下:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
    <head>
        <title>jsp的Include指令测试</title>
    </head>
    
    <body>
       <%@include file="/jspfragments/head.jspf" %>
       <h1>网页主体内容</h1>
       <%@include file="/jspfragments/foot.jspf" %>
   </body>
 </html>

运行结果如下:

jsp:include指令

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

<jsp:include page= "frangmentURL" />

总结:
<@inlcude file =”header.jsp”/>
此时引入的是静态的jsp文件
它将引入的jsp中的源代码原封不动地附加到当前文件中,最终编译成同一个Servlet,所以在jsp程序中使用这个指令的时候file里面的值(即要导入的文件)不能带多余的标签或是与当前jsp文件重复的东西。例如里面不要包含<html><body>这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错。

<jsp:include page=”/user/test” flush=”true”/>
此时引入执行页面或生成的应答文本
jsp:include标签导入一个重用文件的时候,这个文件是经过编译的,通俗点说就是附加这个要导入文件经过编译后的效果,所以可以含有与当前jsp程序中重复的内容,因为在附加过来之前就会被解析掉。其中flush 表示在读入包含内容之前是否清空任何现有的缓冲区。

taglib指令

在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。
写法:
<%@ taglibprefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
其中prefix表示标签的前缀,这个名称可以随便起。
uri是由第三方标签库定义的,所以你需要知道第三方定义的uri。
例如我们引入JSTL标签库:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<c:set var="ctxStatic" value="${pageContext.request.contextPath}/common"/>
<html>
<head>
    <meta charset="utf-8">
    <title>web-demo</title>
</head>
<body>
<form action="${ctx}/form" method="POST">
    名称:<input type="text" name="name">
    <br/>
    网址:<input type="text" name="url"/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

相关文章

  • JavaWeb-JSP三大指令

    原文链接: http://www.cnblogs.com/xdp-gacl/p/3778993.html JSP指...

  • JavaWeb-JSP

    JSP技术的出现时为了弥补Servlet创建web工程的繁琐,JSP技术就是在html中嵌入Java代码。Serv...

  • javaWeb-JSP

    JSP: MVC:开发模式 EL表达式 JSTL 三层架构:软件设计架构 案例:用户信息列表展示

  • JavaWeb-JSP

    JSP 1. JSP 概念:JSP(Java Server Pages): java服务器端的界面JSP是一个特殊...

  • JavaWeb-JSP常用标签

    JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中...

  • JavaWeb-JSP基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在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页面...

网友评论

      本文标题:JavaWeb-JSP三大指令

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