`
tzq668766
  • 浏览: 79224 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

JSP有哪些动作?作用分别是什么?

    博客分类:
  • JSP
阅读更多

JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
  JSP动作包括:
  jsp:include:在页面被请求的时候引入一个文件。
  jsp:useBean:寻找或者实例化一个JavaBean。
  jsp:setProperty:设置JavaBean的属性。
  jsp:getProperty:输出某个JavaBean的属性。
  jsp:forward:把请求转到一个新的页面。
  jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
  13.1 jsp:include动作
  该动作把指定文件插入正在生成的页面。其语法如下:
  <jsp:include page="relative URL" flush="true" />
  前面已经介绍过include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。jsp:include动作的文件引入时间决定了它的效率要稍微差一点,而且被引用文件不能包含某些JSP代码(例如不能设置 HTTP头),但它的灵活性却要好得多。
  例如,下面的JSP页面把4则新闻摘要插入一个“What's New ?”页面。改变新闻摘要时只需改变这四个文件,而主JSP页面却可以不作修改:
  WhatsNew.jsp
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <HTML>
  <HEAD>
  <TITLE>What's New</TITLE>
  </HEAD>
  <BODY BGCOLOR="#FDF5E6" TEXT="#000000" LINK="#0000EE"
  VLINK="#551A8B" ALINK="#FF0000">
  <CENTER>
  <TABLE BORDER=5 BGCOLOR="#EF8429">
  <TR><TH CLASS="TITLE">
  What's New at JspNews.com</TABLE>
  </CENTER>
  <P>
  Here is a summary of our four most recent news stories:
  <OL>
  <LI><jsp:include page="news/Item1.html" flush="true"/>
  <LI><jsp:include page="news/Item2.html" flush="true"/>
  <LI><jsp:include page="news/Item3.html" flush="true"/>
  <LI><jsp:include page="news/Item4.html" flush="true"/>
  </OL>
  </BODY>
  </HTML>
  13.2 jsp:useBean动作
  jsp:useBean动作用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它使得我们既可以发挥Java组件重用的优势,同时也避免了损失JSP区别于Servlet的方便性。jsp:useBean动作最简单的语法为:
  <jsp:useBean id="name" class="package.class" />
  这行代码的含义是:“创建一个由class属性指定的类的实例,然后把它绑定到其名字由id属性给出的变量上”。不过,就象我们接下来会看到的,定义一个 scope属性可以让Bean关联到更多的页面。此时,jsp:useBean动作只有在不存在同样id和scope的Bean时才创建新的对象实例,同时,获得现有Bean的引用就变得很有必要。
  获得Bean实例之后,要修改Bean的属性既可以通过jsp:setProperty动作进行,也可以在Scriptlet中利用id属性所命名的对象变量,通过调用该对象的方法显式地修改其属性。这使我们想起,当我们说“某个Bean有一个类型为X的属性foo”时,就意味着“这个类有一个返回值类型为X的getFoo方法,还有一个setFoo方法以X类型的值为参数”。
  有关jsp:setProperty动作的详细情况在后面讨论。但现在必须了解的是,我们既可以通过jsp:setProperty动作的value属性直接提供一个值,也可以通过param属性声明Bean的属性值来自指定的请求参数,还可以列出Bean属性表明它的值应该来自请求参数中的同名变量。
  在JSP表达式或Scriptlet中读取Bean属性通过调用相应的getXXX方法实现,或者更一般地,使用jsp:getProperty动作。
  注意包含Bean的类文件应该放到服务器正式存放Java类的目录下,而不是保留给修改后能够自动装载的类的目录。例如,对于Java Web Server来说,Bean和所有Bean用到的类都应该放入classes目录,或者封装进jar文件后放入lib目录,但不应该放到servlets 下。
  下面是一个很简单的例子,它的功能是装载一个Bean,然后设置/读取它的message属性。
  BeanTest.jsp
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <HTML>
  <HEAD>
  <TITLE>Reusing JavaBeans in JSP</TITLE>
  </HEAD>
  <BODY>
  <CENTER>
  <TABLE BORDER=5>
  <TR><TH CLASS="TITLE">
  Reusing JavaBeans in JSP</TABLE>
  </CENTER>
  <P>
  <jsp:useBean id="test" class="hall.SimpleBean" />
  <jsp:setProperty name="test"
  property="message"
  value="Hello WWW" />
  <H1>Message: <I>
  <jsp:getProperty name="test" property="message" />
  </I></H1>
  </BODY>
  </HTML>
  SimpleBean.java
  BeanTest页面用到了一个SimpleBean。SimpleBean的代码如下:
  package hall;
  public class SimpleBean {
  private String message = "No message specified";
  public String getMessage() {
  return(message);
  }
  public void setMessage(String message) {
  this.message = message;
  }
  }
  13.3 关于jsp:useBean的进一步说明
  使用Bean最简单的方法是先用下面的代码装载Bean:
  <jsp:useBean id="name" class="package.class" />
  然后通过jsp:setProperty和jsp:getProperty修改和提取Bean 的属性。不过有两点必须注意。第一,我们还可以用下面这种格式实例化Bean:
  <jsp:useBean ...>
  Body
  </jsp:useBean>
  它的意思是,只有当第一次实例化Bean时才执行Body部分,如果是利用现有的Bean实例则不执行Body部分。正如下面将要介绍的,jsp:useBean并非总是意味着创建一个新的Bean实例。
  第二,除了id和class外,jsp:useBean还有其他三个属性,即:scope,type,beanName。下表简要说明这些属性的用法。 属性 用法
  id 命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例。
  class 指定Bean的完整包名。
  scope 指定Bean在哪种上下文内可用,可以取下面的四个值之一:page,request,session和application。
  默认值是page,表示该Bean只在当前页面内可用(保存在当前页面的 PageContext内)。
  request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。
  session表示该Bean对当前HttpSession内的所有页面都有效。
  最后,如果取值application,则表示该Bean对所有具有相同 ServletContext的页面都有效。
  scope之所以很重要,是因为jsp:useBean只有在不存在具有相同id和scope 的对象时才会实例化新的对象;如果已有id和scope都相同的对象则直接使用已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略。
  type 指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的。
  beanName 指定Bean的名字。如果提供了type属性和beanName属性,允许省略class属性。
  13.4 jsp:setProperty动作
  jsp:setProperty用来设置已经实例化的Bean对象的属性,有两种用法。首先,你可以在jsp:useBean元素的外面(后面)使用jsp:setProperty,如下所示:
  <jsp:useBean id="myName" ... />
  ...
  <jsp:setProperty name="myName"
  property="someProperty" ... />
  此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。第二种用法是把jsp:setProperty放入jsp:useBean元素的内部,如下所示:
  <jsp:useBean id="myName" ... >
  ...
  <jsp:setProperty name="myName"
  property="someProperty" ... />
  </jsp:useBean>
  此时,jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。
  jsp:setProperty动作有下面四个属性: 属性 说明
  name name属性是必需的。它表示要设置属性的是哪个Bean。
  property property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是“*”,表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
  value value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如“true”)通过 Boolean.valueOf转换,int和Integer类型的属性值(比如“42”)通过Integer.valueOf转换。
  value和param不能同时使用,但可以使用其中任意一个。
  param param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。
  例如,下面的代码片断表示:如果存在numItems请求参数的话,把 numberOfItems属性的值设置为请求参数numItems的值;否则什么也不做。
  <jsp:setProperty name="orderBean"
  property="numberOfItems"
  param="numItems" />
  如果同时省略value和param,其效果相当于提供一个param且其值等于 property的值。进一步利用这种借助请求参数和属性名字相同进行自动赋值的思想,你还可以在property(Bean属性的名字)中指定“*”,然后省略value和param。此时,服务器会查看所有的Bean属性和请求参数,如果两者名字相同则自动赋值。
  下面是一个利用JavaBean计算素数的例子。如果请求中有一个numDigits参数,则该值被传递给Bean的numDigits属性;numPrimes也类似。
  JspPrimes.jsp
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <HTML>
  <HEAD>
  <TITLE>在JSP中使用JavaBean</TITLE>
  </HEAD>
  <BODY>
  <CENTER>
  <TABLE BORDER=5>
  <TR><TH CLASS="TITLE">
  在JSP中使用JavaBean</TABLE>
  </CENTER>
  <P>
  <jsp:useBean id="primeTable" class="hall.NumberedPrimes" />
  <jsp:setProperty name="primeTable" property="numDigits" />
  <jsp:setProperty name="primeTable" property="numPrimes" />
  Some <jsp:getProperty name="primeTable" property="numDigits" />
  digit primes:
  <jsp:getProperty name="primeTable" property="numberedList" />
  </BODY>
  </HTML>
  注:NumberedPrimes的代码略。
  13.5 jsp:getProperty动作
  jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。 jsp:getProperty有两个必需的属性,即: name,表示Bean的名字;property,表示要提取哪个属性的值。下面是一个例子,更多的例子可以在前文找到。
  <jsp:useBean id="itemBean" ... />
  ...
  <UL>
  <LI>Number of items:
  <jsp:getProperty name="itemBean" property="numItems" />
  <LI>Cost of each:
  <jsp:getProperty name="itemBean" property="unitCost" />
  </UL>
  13.6 jsp:forward动作
  jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性 page。page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,如下面的例子所示:
  <jsp:forward page="/utils/errorReporter.jsp" />
  <jsp:forward page="<%= someJavaExpression %>" />
  13.7 jsp:plugin动作
  jsp:plugin动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。

分享到:
评论

相关推荐

    华为招聘Java面试题:概念题:1. 描述Struts体系结构?对应各个部分的开发工作主要包括哪些?2. JSP有哪些内置对象和动作?它们的作用分别是什么?……

    华为招聘Java面试题:概念题:1. 描述Struts体系结构?对应各个部分的开发工作主要包括哪些?2. JSP有哪些内置对象和动作?它们的作用分别是什么?……

    JavaWeb 面试

    2、jsp有哪些动作?作用分别是什么? 3、JSP中动态INCLUDE与静态INCLUDE的区别 4、两种跳转方式分别是什么?有什么区别? 5、说一说Servlet的生命周期? 6、Servlet版本间(忘了问的是哪两个版本了)的不同? 7、JAVA...

    j2ee面试经典的知识

    1.jsp有哪些内置对象?作用分别是什么? 2.jsp有哪些动作?作用分别是什么?

    java web 面试知识

    1、jsp有哪些内置对象?作用分别是什么? 2、jsp有哪些动作?作用分别是什么? 3、JSP中动态INCLUDE与静态INCLUDE的区别? ----------------------

    千方百计笔试题大全

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

    java面试宝典

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

    Java面试宝典2020修订版V1.0.1.doc

    17、Jsp有哪些动作?作用分别是什么? 37 18、JSP中动态INCLUDE与静态INCLUDE的区别? 37 19、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 38 20、页面传递对象的方法? 38 21、Cookied和session区别?...

    网络编程复习资料

    1、JSP有哪些动作?作用分别是什么? 2、简述JSP的内置对象及方法。 3、简述JSP的常用指令。 4、什么情况下调用doGet()和doPost()? 5、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 6、说出Servlet的...

    java面试122道题

    java面试题,122道精选,包含基础题,web框架、服务器等; 112、说出一些常用的类,包,接口,请各举5个 113、开发中都用到了那些设计模式?...114、jsp有哪些动作?作用分别是什么? 116、应用服务器与WEB SERVER的区别?

    jsp动作jsp动作jsp动作jsp动作jsp动作jsp动作

    jsp动作jsp动作jsp动作jsp动作jsp动作jsp动作jsp动作

    Java程序员面试葵花宝典.doc

    、jsp有哪些动作?作用分别是什么? JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:...

    java基础题 很全面

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

    最新Java面试宝典pdf版

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

    Java面试宝典2010版

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

    Java面试笔试资料大全

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

    Java面试宝典-经典

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

    JAVA面试宝典2010

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

    java面试题大全(2012版)

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

    Java面试宝典2012版

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

Global site tag (gtag.js) - Google Analytics