JSP动作指令

动作指令与编译指令不间,编译指令是通知 Servlet 引擎的处理消息,而动作指令只是运行时的脚本动作。编译指令在将JSP 编译成 Servlet 时起作用:处理指令通常可替换成 Java脚本,是 JSP脚本的标准化写法。

JSP7个动作指令如下 :

jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。

jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。

jsp:include: 用于动态引入一个 JSP 页面。

jsp:plugin: 用于下载 JavaBean 或 Applet 到客户端执行。

jsp:useBean: 使用 JavaBean。

jsp:setProperty: 修改 JavaBean 实例的属性值。

jsp:getProperty: 获取 JavaBean 实例的属性值。

1、forward指令  

 

forward指令用于将页面响应转发给另外的页面。既可以转发给静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。

JSP的forward指令的格式如下。

对于JSP 1.0,使用如下语法:

<jsp:forward page="{relativeURL|<%=expression%>}"/>

对于JSP 1.1以上,可使用如下语法:

<jsp:forward page="{relativeURL|<%=expression%>}">

{<jsp:param.../>}

</jsp:forward>

第二种语法用于在转发时增加额外的请求参数。增加的请求参数的值可以通过HttpServletRequest类的getParameter()方法获取。

下面示例页面使用了forward动作指令来转发用户请求。

<jsp:forward page="forward-result.jsp">

<jsp:param name="age" value="29"/>

</jsp:forward>

将客户端请求转发到forward-result.jsp页面,转发请求时增加了一个请求参数:参数名为age,参数值为29。

在forward-result.jsp页面中,使用request内置对象(request内置对象是HttpServletRequest的实例)来获取增加的请求参数值。

<!-- 使用request内置对象获取age参数的值 -->

<%=request.getParameter("age")%>

执行forward指令转发请求时,客户端的请求参数不会丢失。

执行forward指令转发请求时,用户请求的地址没有发生变化,但页面内容完全变为被forward目标页的内容。

2、include指令 

include指令是一个动态include指令,也用于导入某个页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。

下面是include动作指令的语法格式:

<jsp:include page="{relativeURL│<%=expression%>}" flush="true"/>

或者

<jsp:include page="{relativeURL│<%=expression%>}" flush="true">

<jsp:param name="parameterName" value="patameterValue"/>

</jsp:include>

flush属性用于指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中;如果指定为false,则包含在原文件中。对于JSP 1.1旧版本,只能设置为false。

对于第二种语法格式,则可在被导入页面中加入额外的请求参数。

下面页面使用了动态导入语法来导入指定JSP页面。

<!-- 使用动态include指令导入页面 -->

<jsp:include page="scriptlet.jsp" />

上面页面中粗体字代码使用了动态导入语法来导入了scriptlet.jsp。表面上看,该页面的执行效果与使用静态include导入的页面并没有什么不同。但查看jsp-include.jsp页面生成Servlet的源代码,可以看到如下片段:

//使用页面输出流,生成HTML标签内容

out.write("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 Transitional//EN/ ">/r/n");

out.write("<HTML>/r/n");

out.write("<HEAD>/r/n");

out.write("<TITLE>jsp-include测试</TITLE>/r/n");

out.write("</HEAD>/r/n");

out.write("<BODY>/r/n");

//动态导入,直接引入scriptlet.jsp页面

org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response,

"scriptlet.jsp", out);

out.write("/r/n");

out.write("</BODY>/r/n");

out.write("</HTML>/r/n");

out.write("/r/n");

上面代码片段中粗体字代码显示了动态导入的关键:动态导入只是使用一个include方法来插入目标页面的内容,而不是将目标页面完全融入本页面中。

归纳起来,静态导入和动态导入有如下两点区别:

   静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。

   静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。

除此之外,执行include动态指令时,还可增加额外的请求参数。

在上面的JSP页面中的粗体字代码同样使用jsp:include指令导入页面,而且在jsp:include指令中还使用param指令传入参数,该参数可以在forward-result.jsp页面中使用request对象获取。

3、UseBean指令

<jsp:useBean>标签表示用来在JSP页面中创建一个BEAN实例并指定它的名字以及作用范围。

语法:

<jsp:useBean id="name" scope="page | request | session | application" typeSpec />

其中typeSpec有以下几种可能的情况:

class="className" | class="className" type="typeName" | beanName="beanName" type="typeName" | type="typeName" |

注:

你必须使用class或type,而不能同时使用class和beanName。beanName表示Bean的名字,其形式为“a.b.c”。

4、GetProperty指令

<jsp:getProperty>标签表示获取BEAN的属性的值并将之转化为一个字符串,然后将其插入到输出的页面中。

语法:

<jsp:getProperty name="name" property="propertyName" />

注:

1、在使用<jsp:getProperty>之前,必须用<jsp:useBean>来创建它。

2、不能使用<jsp:getProperty>来检索一个已经被索引了的属性。

3、能够和JavaBeans组件一起使用<jsp:getProperty>,但是不能与Enterprise Java Bean一起使用。

5、SetProperty指令

<jsp:setProperty>标签表示用来设置Bean中的属性值。

语法:

<jsp:setProperty name="beanName" prop_expr />

其中prop_expr有以下几种可能的情形:

property="*" | property="propertyName" | property="propertyName" param="parameterName" | property="propertyName" value="propertyValue"

6、Plugin指令

<jsp:plugin>标签表示执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它。

语法:

<jsp:plugin

type="bean | applet"

code="classFileName"

codebase="classFileDirectoryName"

[ name="instanceName" ]

[ archive="URIToArchive, ..." ]

[ align="bottom | top | middle | left | right" ]

[ height="displayPixels" ]

[ width="displayPixels" ]

[ hspace="leftRightPixels" ]

[ vspace="topBottomPixels" ]

[ jreversion="JREVersionNumber | 1.1" ]

[ nspluginurl="URLToPlugin" ]

[ iepluginurl="URLToPlugin" ] >

[ <jsp:params>

[ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]+

</jsp:params> ]

[ <jsp:fallback> text message for user </jsp:fallback> ]

</jsp:plugin>

注:

<jsp:plugin>元素用于在浏览器中播放或显示一个对象(典型的就是applet和Bean),而这种显示需要在浏览器的java插件。

当Jsp文件被编译,送往浏览器时,<jsp:plugin>元素将会根据浏览器的版本替换成<object>或者<embed>元素。注意,<object>用于HTML 4.0 ,<embed>用于HTML 3.2。

一般来说,<jsp:plugin>元素会指定对象是Applet还是Bean,同样也会指定class的名字,还有位置,另外还会指定将从哪里下载这个Java插件。

7、param指令

param指令用于设置参数值,这个指令本身不能单独使用,单独的param没有实际意义,param指令可与一下三个指令结合使用:

jsp:include

jsp:forward

jsp:plugin

param指令的语法格式如下:

<jsp:param  name="paramName" value="paramValue">

 
 
分类: java

JSP动作指令的更多相关文章

  1. IT兄弟连 JavaWeb教程 JSP动作指令

    JSP动作指令语法 JSP动作指令语法格式如下: <jsp:动作名 属性名1="属性值1" 属性名2="属性值2" ... %> JSP具体动作指令 ...

  2. JSP编译指令、JSP动作指令

    JSP编译指令:通过指令中的属性配置来向JSP容器发出指令,用来控制JSP页面的某些特征 JSP指令格式:<%@ 指令名   [一个或多个指令属性]%> 1.page:用于对JSP页面中的 ...

  3. 【JSP】JSP基础学习记录(二)—— JSP的7个动作指令

    2.JSP的7个动作指令: 动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作.编译指令在将JSP编译成Servlet时起作用:而处理指令通常可替换成JSP ...

  4. JSP的7个动作指令

    动作指令与编译指令不同,编译指令是通知Servlet引擎的处理信息,而动作指令知识运行时的动作.编译指令在将JSP编译成Servlet时起作用,而处理指令通常可替换成JSP脚本,它知识JSP脚本的标准 ...

  5. jsp的常用指令有哪些(编译指令/动作指令整理)

    jsp的常用指令有哪些(编译指令/动作指令整理) JSP动作指令 JSP - JSP中的脚本.指令.动作和注释

  6. jsp 的 7 个动作指令

    动作指令与编译指令不同,编译指令是通知 Servlet 引擎的处理消息,而动作指令只是运行时的动作.编译指令在将 JSP 编译成 Servlet 时起作用:而处理指令通常可替换成 JSP 脚本,它只是 ...

  7. JSP三大指令、七大动作、九大对象

    <%---------------------- JSP三大指令 -----------------------------%><%-- 1. page: language impo ...

  8. jsp七大动作指令

    jsp 七大动作指令 1) jsp:include 指令 用于在请求处理阶段包含来自一个Servlet或jsp页面的响应.和编译指令中的include不同,include只能用于包含静态页面,而jsp ...

  9. JavaWeb笔记——Jsp的指令、内置对象和动作标签

    JSP三大指令   一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info=" ...

随机推荐

  1. Python面试题之Python反射详解

    0x00 前言 反射,可以理解为利用字符串的形式去对象中操作成员属性和方法 反射的这点特性让我联想到了exec函数,也是把利用字符串的形式去让Python解释器去执行命令 Python Version ...

  2. bzoj1603 / P2913 [USACO08OCT]车轮旋转Wheel Rotation

    P2913 [USACO08OCT]车轮旋转Wheel Rotation 稳妥起见(防止数据出锅),用了bfs 每次的转移可以直接用异或和解决. #include<iostream> #i ...

  3. UVa 10791 最小公倍数的最小和(唯一分解定理)

    https://vjudge.net/problem/UVA-10791 题意: 输入整数n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小. 思路: 首先对n进行质因数分解,举个例子 ...

  4. [原][译][osgearth]Model Source Drivers模型驱动源(OE官方文档翻译)

    ModelSource 是一个能生成OpenSceneGraph节点的驱动(driver) osgEarth使用ModelSources显示矢量特征(feature)数据和加载和显示外部3d模型 Fe ...

  5. 如何基于Netty处理粘包、拆包问题?

    涉及到相关重要组件: ByteToMessageDecoder MessageToMessageDecoder 这两个组件都实现了ChannelInboundHandler接口,这说明这两个组件都是用 ...

  6. C# Word转PDF/HTML/XML/XPS/SVG/EMF/EPUB/TIFF

    一款有着强大的文档转换功能的工具,无论何时何地都会是现代办公环境极为需要的.在本篇文章中,将介绍关于Word文档的转换功能(Word转XPS/SVG/EMF/EPUB/TIFF).希望方法中的代码能为 ...

  7. python json与字典对象互相转换

    改文章转自:https://www.cnblogs.com/Lin-Yi/p/7640147.html 1 import requests 2 import json 3 ''' 4 json.loa ...

  8. 通过电信ADSL无线猫WLAN上网的方法

    本教程只适合中国电信ADSL无线猫使用wifi(路由器不适合此帖)我的无线猫是电信赠送的华为[EchoLife]HG522c,亲测可用,解决网关无回应! 首先打开IE(注意,只能是IE,其他内核的浏览 ...

  9. Rails 5 Test Prescriptions 第4章 什么制造了伟大的测试

    伴随着程序成长,测试变长,复杂性增加,如何更高效的写测试,对以后开发不会造成麻烦. 测试本身没发被测试,所以一定要清楚,可控.不要加循环,不要过于复杂的自动编程. Cost and Value 成本和 ...

  10. Android------个人项目(歆语气象通)

    歆语气象通: 歆语气象伴随你的身边,便捷生活. 包含了以下功能: 1. 天气预报数据覆盖中国城市和地区:2. 提供一周天气预报及最低最高温度,时刻关注天气,轻松计划出行:3. 各种指数详细信息,如太阳 ...