1、JSP内置对象:

-  在JSP的Java代码块、表达式块等中可以直接使用的引用,称之为JSP的内置对象。常用内置对象有9个,分别为:

JSP编程专题2之JSP核心一(内置对象,JSP指令以及JSP动作)_第1张图片

-  这九个对象在JSP的Java代码块、表达式块中可以直接使用。之所以可以直接使用,是因为Java代码块和表达式块被JSP引擎翻译后均出现在Servlet的_jspService()方法中。而这九个对象,就是_jspService()方法中的局部变量。在JSP的Java代码块、表达式块中的代码就是_jspService()方法中的代码,所以在其中可以直接使用。(关于内置对象的详细用法查看javaee帮助文档,这里不赘述。)


2、JSP指令:(directive)

-  JSP指令的作用是为当前页面做一些基本的属性设置,为当前的页面的运行提供基本的环境。

-  根据功能的不同,JSP中包含三类指令:page指令,即页面指令;include指令,即包含指令;以及taglib指令,即标签库指令。无论是哪种指令,其使用的语法格式均为如下形式:

1a6947b46de236e1a529303eb2b647d4.png


a、page指令:

-  page指令用于设置当前JSP页面的相关信息。一个JSP文件中可以包含多个page指令。常用的page指令的属性用法如下:

-  pageEncoding属性:pageEncodings属性用于设置当前JSP页面所使用的字符编码格式。即用户在浏览器中通过右击查看编码是所看到的编码格式。如:

538577638d16e2ee22818af396e754f5.png

-  其被JSP翻译引擎翻译到Servlet中的语句,是_jspService()方法中的setContextType()方法:

c7ca133a967c656b071bf6e2398adf4a.png


-  contentType属性:JSP翻译引擎翻译page指令中的这个属性和翻译pageEncoding属性的效果相同。不同的是,contentType属性值可以设置为其他,如默认设置contentType="text/html;charset=UTF-8",也可以设置为contentType="text/xml;charset=UTF-8"。


-  import属性:用于完成在JSP页面中导入指定的类,其被JSP引擎翻译为Servlet中的import语句,例如:

0052e7b00c6cc1115b98849008b8490d.png

c0656d25609beac5374cb77345c47cab.png


b、include指令:

-  include指令:即包含指令,用于将指定的文件包含到当前的JSP文件中。该指令只有一个属性file,用于指定要包含的文件。

-  include指令中只有一个属性file,用于指定要包含的文件。(file属性值(路径)为JSP文件中的动态部分,属于后台路径,参照路径为当前web项目的根。)


3、JSP动作(Action):

-  在JSP页面中大量使用Java代码块、表达式块等内容,会使JSP页面看起来“杂乱无章”。为了使JSP页面看起来简洁明了,为了简化Java代码,一般情况下,我们会尽量少的使用Java代码块和表达式块。取而代之的则是使用EL表达式、JSTL表达式,以及JSP动作。

-  JSP动作是指,使用系统定义好的标签来完成应由Java代码来完成的功能。

-  JSP动作的语法格式为:

94e4c8165e91a040e7f392f102cae31b.png

或者:


-  JSP动作很多,但是在实际开发中常用的就两个:转发动作和包含动作。

-  这两个动作的完成,底层使用的是ResponseDispatcher的forward()和include()方法实现的。这两种请求转发方式的本质区别是:标准输出流的开启时间不同。forward()方式的标准输出流是在目标资源中开启的标准输出流,而include()方式的标准输出流则是在当前发出包含动作的页面中开启的。所以,forward()动作的发起页面中是无法向标准输出流中写入数据的;而include()动作的发起页面以及目标页面均可以向标准输出流中写入数据。

22d5923aebc81b7cc23ff1b6fd658083.png

55c3dfacf9fcc4bf1a82a89be3020dc2.png

-  这两份动作都具有一个page属性,用于指定要转向的页面。


a、forward动作:

-  页面中一旦具有了forward动作,那么当前页面中的所有要显示的内容都将无法显示。因为页面直接转发到了下一个页面。

JSP编程专题2之JSP核心一(内置对象,JSP指令以及JSP动作)_第2张图片


b、include动作:用于完成将目标页面包含到当前页面中的功能。


c、include动作和Include指令的区别:

-  指令元素:include指令读入指定页面的内容,并把这些内容和原来的页面融合在一起。然后经历两个阶段:将JSP翻译为Servlet和Servelt翻译成.class文件。(在被引入的文件不要加入contentType属性,因为JSP文件中不能够指定多个contentType。)

-  动作元素:它并没有把所要添加的JSP的代码加入到被添加的JSP中,只是在运行时引入要添加的jsp页面执行后所要产生的应答,这意味着我们可以指定任何能够产生应答的Web资源(例如一个servlet或者一个页面),只要这些资源所产生的类型和JSP页面产生的编码类型相同(如果编码类型不同,则会出现乱码),JSP容器将通过一个内部的函数调用来执行指定的资源。因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象,以及所有原来的请求参数。(如果修改了要添加的JSP页面,那么可以立刻使用该页面的最新版本,这是因为对待被引入的页面的方式与对待由浏览器直接调用的JSP页面的方式完全相同,即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本)。

-  以下是对两种include两种用法的区别,主要有两个方面的不同:

在执行时间上:

<%@ include file=" .jsp" %> 是在翻译阶段执行。

<jsp:include page=" .jsp" flush="true" /> 在请求处理阶段执行。

在引入内容的不同:

<%@ include file=" .jsp"%>引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。

<jsp:include page=" .jsp" flush="true" />引入执行页面或servlet所生成的应答文本。