zoukankan      html  css  js  c++  java
  • JSP的七个动作指令

     JSP动作指令

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

    1.1 JSP7个动作指令如下 :

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

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

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

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

    jsp:useBean: 使用 JavaBean。

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

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

    1.2 forward指令

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

    1.2.1 JSP的forward指令的格式如下。 

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

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

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

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

    {<jsp:param name="paramname" value="paramvalue"/>}  

    </jsp:forward> 

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

    1.2.2 如果是forward指令被执行,那么JSP容器回味新的目标页面制定一个新的pageContext对象,而request对象和session对象可能被员页面和目标页面共同使用。Application对象是否共同使用将取决于两个页面是否在同一个application中。 

    1.2.3 注意:在使用forward时,会丢弃挡墙页面的输出缓冲区,而且forward指令后面的所有指令也不会执行,因此,在执行forward指令钱,应做好相应准备,如关掉已经打开的文件、关闭正在连接的数据库等,释放已经不用的资源,防止程序因资源耗尽而瘫痪。

    1.2.4 下面示例页面使用了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")%> 

    1.2.5 执行forward指令转发请求时,客户端的请求参数不会丢失。执行forward指令转发请求时将产生新的地址,但新的地址不会通知用户浏览器,仅仅发生在服务器内部,所以用户请求的地址没有发生变化,但页面内容完全变为被forward目标页的内容。

    1.3 param指令

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

    jsp:include,jsp:forward,jsp:plugin。。

    1.3.2 param指令的语法格式如下:

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

    1.4 include指令

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

    1.4.2 下面是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。 

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

    1.4.3 为了结局第二种语法格式传参中出现的中文乱码问题可在head之间加入以下内容:

    <%

    response.setCharacterEncoding("UTF-8");

    request.setCharacterEncoding("UTF-8");

    %>

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

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

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

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

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

     

    比较内容

    Jsp:include动作指令

    Include指令

    语法的基本形式

    <jsp:include page=”…”/>

    <%@ include file=”…”%>

    包含动作的发生时间

    请求期间

    页面转换期间

    包含的内容

    页面的输出

    文件的实际内容

    产生多少servlet

    两个(主页面和被包含页面会成为独立的servlet)

    一个(被包含文件首先被插入到主页面中,然后,得到的页面被转换成servlet)

    被包含页面可否定义主页面使用的字段或方法

    不可以

    可以

    被包含页面中可否设置影响主页面的响应报头

    不可以

    可以

    被包含页面发生更改是否需要更新主页面

    不需要

    需要

    JSP页面转换:JSP页面被编译,JSP页面转换为servlet代码

    JSP请求期间:JSP页面已经被编译,在请求期间,完全不会理会初始的JSP页面,所使用的只是由它所产生的servlet

    对于文件包含,应该尽可能地使用jsp:include,仅在所包含的文件中定义了主页面要用到的字段或方法,或者所包含的文件设置了主页面的响应报头时,才应该使用include指令。

    1.5 UseBean指令

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

    1.5.2 语法:

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

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

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

    1.5.3 注:

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

    1.6 GetProperty指令

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

    1.6.2 语法:

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

    1.6.3 注:

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

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

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

    1.7 SetProperty指令

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

    1.7.2  语法:

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

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

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

    1.8 Plugin指令

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

    1.8.2 语法:

    <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>

    1.8.3 注:

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

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

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

  • 相关阅读:
    意外发现,VC断点可加在构造函数的左括号上
    C++中的INL
    如何用DELPHI编程修改外部EXE文件的版本信
    j2ee面试宝典翻译(1)
    华为总裁任正非:允许小部分力量去颠覆性创新
    QStringList与QString互转
    QTreeView只显示指定驱动器及其目录,隐藏所有兄弟节点
    Protected Functions 是理解OO的难点和关键
    技术人员的创业陷阱:我能,但不管用户在哪里!
    大陆的创业环境和风气的确产生巨大变化,大众创业“蔚然成风”
  • 原文地址:https://www.cnblogs.com/Miliery/p/3528079.html
Copyright © 2011-2022 走看看