`

JSP的七个常用动作解析

阅读更多

1、定义

    JSP动作通过XML语法格式的标记来在请求处理阶段控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面以及为Java插件生成HTML代码等(百科摘录)。

 

2、在JSP2.0规范中,大概定义了20种标准动作元素,本文主要讲解七种常用的七种。即include、forward、useBean、getProperty、setProperty、param、plugin。

 

    1)<jsp:include>动作

 

        a)主要用来在请求处理阶段动态地包含一个静态或者动态的文件。

        b)容器会检查被包含页面是否发生更改,如果发生更改,则会(只会)重新编译被包含文件。

        c)语法:<jsp:include page=”{relativeURL |<%=expression%>}” flush=”true” />。

        d)可以向被包含页面传到参数:

  <jsp:include page=”{relativeURL |<%=expression%>}” flush=”true”>
      <jsp:param name=”paramName” value=”paramValue”/>
  </jsp:include>

 

    2)<jsp:forward>动作

 

         a)用于将请求转发到Web应用的其他组件(如Servlet、Jsp或HTML文件等)处理。

         b)使用语法:<jsp:forward page=”{relativeURL |<%=expression%>}” />。

         d)可以向请求转发的页面页面传到参数:

  <jsp:forward page=”{relativeURL |<%=expression%>}” flush=”true”>
     <jsp:param name=”paramName” value=”paramValue”/>
  </jsp:forward>

 

    3)<jsp:useBean>动作

 

        a)使用useBean动作声明并初始化一个bean对象,并指定其名称和作用范围。

        b)创建对象时,容器会先在指定的属性范围查找当前指定id标识的bean对象是否存在,如果存在则直接使用,否则使用new创建一个新的bean对象(可以参考该动作生成的对应servlet代码)。

        c)语法:<jsp:useBean id=”” class=”” scope=”page | request |session | application” />,其中id属性表示bean对象的标识符,class属性表示bean对象的类类型,scope表示bean对象作用范围(默认为page)。

        d)可以使用UseBean动作消除Jsp代码中的脚本代码(如变量声明、scriptlet及表达式)。

        方式一:使用脚本代码:

<html><body>
  <%
      foo.Person p =(foo.Person) request.getAttribute("person");  
      p.setName("zhansan");
  %>
  Persion is:<%=p.getName() %>  
<body><html>

 

         方式二:使用useBean标准动作(配合getPropeterty动作):

<html><body>
  <jsp:useBean id="person" class="foo.Person" scope="request"/>
  Persion is:<jsp:getPropeterty name="person" property="name"/>
<body><html>

 

    4)<jsp:getProperty>动作

 

        a)用于获取标识bean的属性值。

        b)语法:<jsp:sgetProperty name=”” property=”” />,其中name属性表示bean的标识符(<jsp:useBean>动作的id属性),property属性表示bean的属性名称(对应getter,而不是实例变量)。

 

    5)<jsp:setProperty>动作(重难点)


        a)用于设置标识Bean中的属性值。

        b)语法:<jsp:setProperty name=”” property=”” value|param=”” />,其中name属性表示bean的标识符(<jsp:useBean>动作的id属性),property属性表示bean的属性名称(对应setter,而不是实例变量),value属性表示直接设置值,param属性表示获取请求参数值来设置属性值(不能与value共用)。

        c)如果请求参数名与性质名(setter属性名)不同,此时如果想把性质的值设置为请求参数的值,则必须使用param属性。如:<jsp:setProperty name=”” property=”性质名” param="请求参数名"/>。

        d)值得一提的是,如果表单请求参数名与Bean中性质名(setter属性名)相同,则就无需在<jsp:setProperty >中指定请求参数名,即可以直接使用:<jsp:setProperty name=”” property=”” />。

        e)更近一步,如果表单请求参数名与Bean中性质名(setter属性名)都相同,则可以使用通配符“*”来一次性设置所有的属性值为请求参数值,即:<jsp:setProperty name=”” property=”*” />。

        f)使用方式一:放在<jsp:useBean>动作外:

<html><body>
  <jsp:useBean id="person" class="foo.Person" scope="request"/>
  <jsp:setProperty name="person" property="name" value="zhangsan"/>
  <jsp:getProperty name="person" property="name"/>
<body><html>

        生成的Servlet代码(部分):

//声明一个对象引用
foo.Person person = null;
synchronized (request) {
    person = (foo.Person) _jspx_page_context.getAttribute("person", PageContext.REQUEST_SCOPE);
    if (person == null){
        //如果指定属性范围内的对象不存在,则创建一个新对象
        person = new foo.Person();
        //将对象保存到指定的属性范围
        _jspx_page_context.setAttribute("person", person, PageContext.REQUEST_SCOPE);
    }
}
//设置属性值(其实最终调用的就是setName()方法)
org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("person"), "name", "zhangsan", null, null, false);
//获取并输出属性值(其实最终调用的就是getName()方法)
out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString((((foo.Person)_jspx_page_context.findAttribute("person")).getName())));

       

        可以看出,使用此方式,会直接将person的属性值设置为新值,而不管该person对象是否已经存在。如果已经存在,则会覆盖已有对象的属性值,不存在则设置为新对象的属性值。

 

        g)使用方式二:放在<jsp:useBean>动作内

<html><body>
  <jsp:useBean id="person" class="foo.Person" scope="request">
      <jsp:setPropeterty name="person" property="name" value="zhangsan"/>
  </jsp:useBean>
  <jsp:getPropeterty name="person" property="name" />
<body><html>

        生成的Servlet代码(部分):

//声明一个对象引用
foo.Person person = null;
synchronized (request) {
    person = (foo.Person) _jspx_page_context.getAttribute("person", PageContext.REQUEST_SCOPE);
    if (person == null){
        //如果指定属性范围内的对象不存在,则创建一个新对象
        person = new foo.Person();
        //将对象保存到指定的属性范围
        _jspx_page_context.setAttribute("person", person, PageContext.REQUEST_SCOPE);
       //设置属性值(其实最终调用的就是setName()方法)
        org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("person"), "name", "zhangsan", null, null, false);   
    }
}
//获取并输出属性值(其实最终调用的就是getName()方法)
out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString((((foo.Person)_jspx_page_context.findAttribute("person")).getName())));

       

        可以看出,使用此种方式,如果person对象已经存在,则不会重新覆盖(设置)对象的属性值,只有新建一个对象时,才会设置对象的属性值。

 

    6)<jsp:param>动作

 

        a)用于传递参数值,必须与include、forward或plugin动作配合使用。

        b)语法:<jsp:param name=”paramName” value=”paramValue” />

 

    7)<jsp:plugin> 动作

    

        a)用于下载服务器端的JavaBean或Applet到客户端执行,这种显示需要在浏览器上安装Java插件。

        b)语法:<jsp:plugin type=”bean | applet" code="className" codebase="classDiretoryName">,其中type属性表示被执行的java程序的类型,code属性表示被执行的文件名,该属性值必须以“.class”扩展名结尾,codebase表示被执行文件的目录。

 

分享到:
评论

相关推荐

    JSP 程序设计从入门到精通 PDF 教程

    由浅入深、循序渐进地介绍了JSP的运行系统,基本概念,语法规范及其相关内容,从基本的JSP概述、与其他技术的对比,到JSP的运行系统和模式,逐步深入地对JSP语法规范进行了详细的讲解,并结合应用实例加以巩固。...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    全书一共被压缩为5个rar,这是第二个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    全书一共被压缩为5个rar,这是第三个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    全书一共被压缩为5个rar,这是第四个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    全书一共被压缩为5个rar,这是第五个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    web开发常用对象和技术总结

    11个word文档,10个pdf文件,详细讲解web开发中要用到各种技术,包括jsp隐式对象,表达式语言,自定义标签,标准标签库,javabean和标准动作,javamail ,过滤器,监听器servlet ,request ,session ,application.......

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    java面试宝典

    122、jsp有哪些动作?作用分别是什么? 31 123、JSP中动态INCLUDE与静态INCLUDE的区别? 31 124、两种跳转方式分别是什么?有什么区别? 31 125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM中的数据? 31 ...

    java面试要点集合

    List与Set的相同与不同之处,分别举出两个这两个接口的常用方法。(10分) 2。谈谈你对接口的理解与看法。(10分) 3。用递归方法实现 1的平方+2的平方+3的平方+……+i的平方。(10分) 4。(1)用JS方法实现提交...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    2.6 常用的JSP动作标识 2.6.1 使用包含动作标识&lt;jsp:illclude&gt; 2.6.2 使用请求转发的动作标识&lt;jsp:forward&gt; 2.6.3 子动作标.iR&lt;jsp:param&gt;~使用 2.7 实战检验 2.7.1 输出九九乘法表 2.7.2 JSP中实现随机抽奖 2.8 ...

    千方百计笔试题大全

    122、jsp有哪些动作?作用分别是什么? 31 123、JSP中动态INCLUDE与静态INCLUDE的区别? 31 124、两种跳转方式分别是什么?有什么区别? 31 125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM中的数据? 31...

    java 面试题 总结

    动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的...

    Java面试宝典2010版

    12. jsp有哪些动作?作用分别是什么? 13、JSP的常用指令 14. JSP中动态INCLUDE与静态INCLUDE的区别? 15、两种跳转方式分别是什么?有什么区别? 16、页面间对象传递的方法 17、JSP和Servlet有哪些相同点和不同点...

    java基础题 很全面

    4. jsp有哪些动作?作用分别是什么? 16 5. JSP中动态INCLUDE与静态INCLUDE的区别? 17 6. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 17 7. forward 和redirect的区别 17 8. 说出在JSP页面里是怎么分页...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    超级有影响力霸气的Java面试题大全文档

     动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件...

    最新Java面试宝典pdf版

    12. jsp有哪些动作?作用分别是什么? 88 13、JSP的常用指令 89 14. JSP中动态INCLUDE与静态INCLUDE的区别? 89 15、两种跳转方式分别是什么?有什么区别? 89 16、页面间对象传递的方法 89 17、JSP和Servlet有哪些相同...

    java面试题

    jsp常用动作? 答:jsp:include 引入一个文件 jsp:useBean 实例化JavaBean jsp:setProperty 设置JavaBean属性 jsp:getProperty 输出JavaBean属性 jsp:forward 转发 CTS、CLS、CLR分别作何解释? 答:CTS 通用...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    13.5.7 查看调查结果的画面surveyOK.jsp 13.6 根据数据库表生成XML和POJO 13.6.1 生成对应的XML 13.6.2 生成POJO 13.7 编写网上调查系统的DAO 13.7.1 用户DAO接口UserDAO.java 13.7.2 调查题目DAO接口SurveyDAO.java...

Global site tag (gtag.js) - Google Analytics