Jsp包含三个编译指令和七个动作指令。
三个编译指令为:page、include、taglib
七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:userBean、jsp:setProperty、jsp:getProperty。
一、编译指令:
1.page指令
通常位于jsp页面的顶端,同一页面可以有多个page指令。
1.language属性,一般情况就是java,代表jsp页面使用的脚本语言。
2.Extends属性,确定 JSP 程序编译时所产生的 Java 类,需要继承的父类,或者需要实现的接口的全限定类名。
3.import属性,用来导入包,下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
4.Session属性,控制页面是否参与会话
默认true。如果存在已有会话,则预定义session变量,绑定到已有会话中。否则创建新会话将其绑定到session。
对于高流量网站,设置false可以节省大量服务器内存。
设置false表示不自动创建新会话,在jsp页面转换为servlet时,这时对变量session的访问导致错误。
设置为false并不是禁用会话跟踪,它只是阻止jsp页面为不拥有会话的用户创建新会话。
对于不需要会话跟踪的页面那就设置为false;当设置为false时session对象是不可访问的。
5.buffer属性,指定输出缓冲区的大小。输出缓冲区的 JSP 内部对象: out 用于缓存 JSP页面对客户浏览器的输出,默认值为 8kb,可以设置为 none ,也可以设置为其他值,单位为kb。
6.autoFlush属性,当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true 时为正常输出;如果设置为 false ,会在 buffer 溢出时产生一个异常。
7.Info属性,设置该 JSP 程序的信息,也可以看做其说明,可以通过 Servlet. getServletInfo()方法获取该值。如果在 JSP 页面中,可直接调用 getServletInfoO方法获取该值,因为 JSP 页面的实质就是 Servlet 。
8.errorPage属性,用来指定一个jsp页面,由该页面来处理当前页面中抛出但没有捕获的任何异常。指定的页面可以通过exception变量访问异常信息。
9.IsErrorPage属性,设置本 JSP 页面是否为错误处理程序。如果该页面本身己是错误处理页面,则无须使用 errorPage 属性。
10.contentType和pageEncodeing属性,ContentType属性用于设定生成网页的文件格式和编码方式,即 MIME 类型和页面字符集类型,默认的 MIME 类型是 text/html; 默认的字符集为 ISO-8859-1 。
contentType=“text/html;charset=utf-8” 指定网页以什么方式显示页面
pageEncoding=“utf-8” 指定Servlet引擎以什么方法翻译jsp->servlet 并 指定网页以什么方式显示页面
11.isThreadSafe属性:采用显式的同步来代替该方法。
控制由jsp页面生成的servlet是否允许并发访问(默认true允许)。
这种阻止并发访问的实现是基于SingleThreadModel接口。所以,避免使用isThreadSafe属性。
2、include指令
使用 include 指令,可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP 语句(如果有的话)。这是个静态的 include 语旬,不会检查所包含 JSP 页面的变化。
include 既可以包含静态的文本,也可以包含动态的 JSP 页面。静态的编译指令include ,是将被包含的页面加入进来,生成一个完整的页面。
在被包含的文件中不要使用和主页重复的HTML标签。这样会影响原jsp文件中同样的标签导致错误。
因为原文件和被包含文件可以互相访问彼此定义的变量和方法,所以要避免变量和方法在命名上的问题。
如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的 include 语句。
include指令和jsp:include动作的区别:
调用的时间:
jsp:include动作在“请求期间”被包含。
include指令在“转换期间”被包含。
包含的内容:
jsp:include动作是包含jsp页面或servlet的“输出”和HTML文本。
include指令是文件的实际内容。
最终转换的servle个数:
jsp:include动作在请求期间,会将被请求页面转译为独立的servlet。和主页面的servlet对应。
include指令在转换期间将被包含页面的内容插入到主页面中,得到主页面转译成的servlet。
可否设置影响主页面的响应报头和参数:
jsp:incurred动作不可以,include指令可以。
更新:
jsp:include动作是在请求期间被插入所以他的更改不需要更新主页面。
include指令的更新意味着主页面servlet的更新。
3、taglib指令
taglib指令:声明用户使用的自定义标签。
声明用户使用自定义的标签,将标签库描述符文件导入到jsp页面。
taglib指令语法:
<%@ taglib (uri=”tigLibURL” 或 tagDir=”tagDir”) prefix=”tagPrefix” %>
uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。
tagDir属性:指示前缀将被用于标识在WEV-INF/tags目录下的标签文件。
prefix属性:标签的前缀,区分多个自定义标签。不可以使用保留前缀和空前缀,遵循XML命名空间的命名约定。
二、动作指令
1、 forward动作指令:forward 指令用于将页面响应控制转发给另外的页面。既可以转发给静态的 HTML页面,也可以转发到动态的 JSP 页面,或者转发到容器中的 Servlet。
语法:
1 2 3 4 5 6 7 8 9 10 | <jsp:forward page="文件路径" /> 或者 <jsp:forward page="文件路径"> <jsp:param name="参数名1" value="参数1值" /> ............... <jsp:param name="参数名n" value="参数n值" /> </jsp:forward> |
2、 include动作指令:它是一个动态的指令,可以用于导入某个页面。它的导入会每次检查被导入页面的改变。
语法:
1 2 3 4 5 6 7 8 9 | <jsp:include page="文件路径" flush="true" /> 或者 <jsp:include page="path" flush="true"> <jsp:param name="参数名1" value="参数1值" /> ............... <jsp:param name="参数名n" value="参数n值" /> </jsp:include> |
注:
1、flush=”true” 必须使用flush为true,它默认值是false。
2、<jsp:param>子句能让你传递一个或多个参数给动态文件,也可在一个页面中使用多个<jsp:param>来传递多个参数给动态文件。
3、userBean动作指令:
<jsp:useBean>标签表示用来在JSP页面中创建一个BEAN实例并指定它的名字以及作用范围。
语法:
<jsp:useBean id=”name” scope=”page | request | session | application” typeSpec />
其中typeSpec有以下几种可能的情况:
class=”包名.类名” | class=”包名.类名” type=”typeName” | beanName=”包名.类名” type=”typeName”
在JSP中使用bean,class属性必须使用完全限定类名——包括包名的类名。不管你是否使用<%@ page import …%>输入包,都要满足这个要求。
<jsp:useBean id=”book” class=”core.Book”/> 等价于 <%core.Book book=new core.Book();%>
仅当找不到相同id和scope的bean时,jsp:useBean元素才会实例化新的bean。如果存在相同id和scope的bean,则只是将已有的bean绑定到相关的变量(由id指定)。
我们可以不使用 <jsp:useBean…/>
转而使用 <jsp:useBean>statements</jsp:useBean>
使用第二种形式的意义在于,jsp:useBean的起始标签和结束标签之间的语句只是在创建新的bean时执行,如果使用已有的bean,则不执行。
4、getProperty动作指令:
<jsp:getProperty>标签表示获取BEAN的属性的值并将之转化为一个字符串,然后将其插入到输出的页面中。
语法:
<jsp:getProperty name=”bean的名称” property=”属性名称” />
注:
1、在使用<jsp:getProperty>之前,必须用<jsp:useBean>来创建它。
2、不能使用<jsp:getProperty>来检索一个已经被索引了的属性。
3、能够和JavaBeans组件一起使用<jsp:getProperty>,但是不能与Enterprise Java Bean一起使用。
5、setProperty动作指令:
<jsp:setProperty>标签表示用来设置Bean中的属性值。
四种语法格式:
<jsp:setProperty name=”bean的名称” property=”*” />
<jsp:setProperty name=”bean的名称” property=”属性名称”/>
<jsp:setProperty name=”bean的名称” property=”属性名称” param=”参数值” />
<jsp:setProperty name=”bean的名称” property=”属性名称” value=”属性值” />
第一种语法格式中,property=”*”,应用这种格式要求bean属性的名字与类型要和request对象中参数名称与类型一致,一次用bean中的属性来接收客户输入的数据,系统会根据名称来自动匹配。
第二种语法格式则指设置其中匹配的一个bean的属性。
第三种语法格式根据制定的request对象中的参数与属性匹配。
第四种语法格式用来给bean的属性赋值,属性值的数据类型要与属性的数据类型一致,否则会出错。
注:使用 jsp:setProperty 来为一个Bean的属性赋值;可以使用两种方式来实现。
1、在jsp:useBean后使用jsp:setProperty:
<jsp:useBean id=”myUser” … />
…
<jsp:setProperty name=”user” property=”user” … />
在这种方式中,jsp:setProperty将被执行。
2、jsp:setProperty出现在jsp:useBean标签内:
<jsp:useBean id=”myUser” … >
…
<jsp:setProperty name=”user” property=”user” … />
</jsp:useBean>
在这种方式中,jsp:setProperty只会在新的对象被实例化时才将被执行。
在同一个setProperty动作指令中不能同时存在param和value参数。
6、plugin动作指令:
这个动作指令用来在JSP中加载Java applet小程序。用<applet></applet>也可以是客户端下载并运行Java applet小程序,但有的浏览器不支持,如果Java applet小程序使用了这样的类,将无法执行。用plugin动作指令可以较好的解决这个问题。
语法:
<jsp:plugin
type=”applet”
code=”小程序的类文件”
codebase=”小程序所在的位置”
[ height=”小程序显示高度” ]
[ width=”小程序显示宽度” ]
[ jreversion=”虚拟机版本号” ]
[ <jsp:params>
[ <jsp:param name=”parameterName” value=”{parameterValue | <%= expression %>}” /> ]+
</jsp:params> ]
[ <jsp:fallback> 客户端浏览器是否支持插件下载的提示信息</jsp:fallback> ]
</jsp:plugin>
注:
code参数是指小程序经过编译后的字节码文件,扩展名为.class。
codebase参数值出这个字解码文件所在的位置,可以是相对路径也可以是绝对路径,但在这个参数中不需要文件名,只需要目录路径就可以了,如果自己吗文件与调用的jsp文件在同一目录下,则此参数可以省略。
7、 param动作指令:
param指令用于设置参数值,这个指令本身不能单独使用,因为单独使用没有意义。它可以和以下几个指令合起来使用
jsp:include
jsp:forward
jsp:plugin
附:
定义全局变量:
<%! int i=90; %>
定义局部变量:
<% int i=90; %>
除非注明,Coder文章均为原创,转载请以链接形式标明本文地址