JSP基础知识_3

时间:2021-12-17 13:39:36

一.JSP指令

1.简介

   为JSP引擎而设计,不产生可见输出,告诉引擎如何处理JSP页面中的其余部分

   基本语法:

        <%@ 指令 属性名="值" %>    (注意:属性名部分是大小写敏感的

  配置一个指令的多个属性时,可以分开成多条,也可以写成一条

  有page、include和taglib这三种指令

 

2.page指令

    page指令用于定义JSP页面的各种属性,它作用于整个JSP页面,一般是放在整个JSP页面的起始位置

 <%@ page
[ language
="java" ] //指定语言,但是唯一合法值只有“java”
[ extends="package.class" ]
[
import="{package.class | package.*}, ..." ] //导包
[ session="true | false" ] //当前JSP是否允许使用session,session隐藏对象在该jsp中不能被使用,即指定是否生产HttpSession对象
[ buffer="none | 8kb | sizekb" ] //
[ autoFlush="true | false" ]
[ isThreadSafe
="true | false" ]
[ info
="text" ]
[ errorPage
="relative_url" ] //指定当前页面出现错误时的实际响应页面
[ isErrorPage="true | false" ] //指定该page为错误页面,可以使用exception隐藏对象
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]//指定页面响应类型,JSP取值均为text/html;charset=utf-8
[ pageEncoding="characterSet | ISO-8859-1" ]//页面编码,通常与contentType中charset值一致
[ isELIgnored="true | false" ]//指定是否可以使用EL表达式
%>

 

   errorPage和isErrorPage属性其他说明:

           errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面
            可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的完全限定名

            <location>元素指定以“/”开头的错误处理页面的路径。如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用

 

            isErrorPage:指定当前页面是否为错误处理页面,若true,则可使用exception隐藏变量;注意若设置了true并且使用了exception的方法,那么一般不能直接访问该页面

 

3.include指令

   include指令用于通知JSP引擎在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称之为静态引入

   当前JSP页面与静态引入的页面紧密结合为一个Servlet,即最终只生成一个xxx_jsp.java文件

<%@ include file="relativeURL"%>  //file属性用于指定被引入文件的相对路径,以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前文件

 

  具体说明:

    (1)被引入的文件必须遵循JSP语法;

    (2)被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)

        作为静态引入文件的扩展名;

   (3)将JSP文件翻译成Servlet源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素(设置pageEncoding属性的page指令除外),所以,除了import和pageEncoding

        属性之外,page指令的其他属性不能在这两个页面中有不同的设置值;

   (4)除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致

   (5)引入文件与被引入文件是在被JSP引擎翻译成Servlet的过程中进行合并,而不是先合并源文件后再对合并的结果进行翻译

4.taglib指令

     等学习完标签后再补上

 

二.JSP标签

   JSP还提供了一种称之为Action的元素,在JSP页面中使用Action元素可以完成各种通用的JSP页面功能,Action元素采用XML元素的语法格式,即每个Action元素在JSP页面中都以XML标签的形式出现,

   标签名都以jsp作为前缀,并且全部采用小写,例如,<jsp:include>、<jsp:forward>

1.<jsp:include>标签

    用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入;此时生成了两个xxx_jsp.java,通过方法将被包含页面包含尽量

<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
//page属性用于指定被引入资源的相对路径
//flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端

 

   静态引入和动态引入的区别:

    1.<jsp:include>标签是在当前JSP页面的执行期间插入被引入资源的输出内容,当前JSP页面与被动态引入的资源是两个彼此独立的执行实体,被动态引入的资源必须是一个能独立

      被WEB容器调用和执行的资源。include指令只能引入遵循JSP格式的文件,被引入文件与当前JSP文件共同合被翻译成一个Servlet的源文件

   2.<jsp:include>标签对JSP引擎翻译JSP页面的过程不起作用,它是在JSP页面的执行期间才被调用,因此不会影响两个页面的编译。由于include指令是在JSP引擎翻译JSP页面的

     过程中被解释处理的,所以它对JSP引擎翻译JSP页面的过程起作用,如果多个JSP页面中都要用到一些相同的声明,那么就可以把这些声明语句放在一个单独的文件中编写,然后在

     每个JSP页面中使用include指令将那个文件包含进来

   3.<jsp:include>标签可以通过<jsp:param>标签传参

 

2.<jsp:forward>标签

    用于把请求转发给另外一个资源,类似于request.getRequestDispatcher("relativeURL ").forward(request, response);

<jsp:forward page="relativeURL | <%=expression%>" />  //page属性用于指定请求转发到的资源的相对路径

 

  区别:

      1.RequestDispatcher.forward方法的JSP脚本代码的前后不能有JSP模版内容,而<jsp:forward>标签前后都可以有

      2.可以通过<jsp:param>标签传参,而RequestDispatcher.forward方法则不可以

 

3.<jsp:param>标签

   在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数,name:参数名,value:参数值