博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

useBean详解

Posted on 2012-08-21 17:13  奥客  阅读(717)  评论(0)    收藏  举报

useBean详解(1)

分类: jsp&servlet 54人阅读 评论(0) 收藏 举报

MVC模式中,常常需要各个部分之间交互信息,这就需要Bean。在展示层更是如此。所以就出现了useBean、EL等这些更方便,更优雅的解决方式。这里以hello world为例子,说明useBean的用法和优势。

不用useBean的例子:

web.xml

Word.java

 

SayHello.java

 

Show.jsp

 

     视图页面是用来显示信息的,而应该尽量避免使用不必要的逻辑,我不知道“使用脚本者,必死!”这句话到底有多严重。但避免java代码和html标记混合是必要的。

 

     如果在<url-pattern>/say.jsp</url-pattern>改写成<url-pattern>/*</url-pattern>在语法上不会出错,而且这也是许多框架常用的伎俩。但在这里,由于使用RequestDispatcher从定向了,就会出现自己定向到自己,不断的追自己的尾巴。

 

     如果改成useBean去处理Bean的操作,就会很轻松,代码也很美观了。

修改后的Show.jsp

      现在,是把精力集中在useBean的用法上来的时候了。

 

  •  <jsp:useBean id="bean的名称" class="bean的权限定类名" scope="page/request/session/context" />。这个标记首先会在是定的作用域中查找对象,如果存在,就直接拿来。如果不存在,就重新创建一个对象。这里面的scope是这个Bean的作用域。page表示只在本页面有效,request表示这个bean是request属性,session表示这个bean是session属性context是,这几个属性是servlet中的知识,稍后会解释。
  • <jsp:setProperty name="bean的名称" property="属性名称" value="属性值" />就是向bean设置属性。当表单的名称和bean的属性名称相同时可以简写成这样:<jsp:setProperty name="bean的名称" property="*"  />这会大大降低代码的编写量。
  • <jsp:getProperty name="bean的名称" property="属性名称">这个标记是把bean的属性打印出来。

useBean的体

从上一节我们已经知道,useBean在找不到指定对象的时候重新创建对象。我们可能这样想--在没有找到对像的时候创建对象并设置属性。但是我们如果直接用<jsp:setProperty />时很可能覆盖掉本来存在的对象的属性。实例代码如下:

  1. <jsp:useBean id="people" class="com.star7.goodjob.People" scope="request" />  
  2. <!-- 我们只想在从新创建对象的时候设置属性,而不像覆盖request作用域中的属性-->  
  3. <jsp:setProperty name="people" property="name" value="default" />  

 

使用useBean的体,进行有条件的设置属性。

实例代码如下:

  1. <jsp:useBean id="people" class="com.star7.goodjob.People" scope="request">  
  2. <jsp:setProperty name="people" peoperty="name" value="default" />  
  • <jsp:useBean>  

 

这样,只有创建新的bean是才会设置属性了。

useBean实现多态引用

<jsp:useBean id="people" class="非抽象类的权限定名" type="父类的权限定名" scope="作用域" />

这里面tyep实际上是用来声明的,而不会进行初始化。而class属性就可以声明并且初始化。所以,在作用域中有bean对象时<jsp:useBean id="people" type="com.star7.goodjob.People" scope="request" />是正确的,因为他不需要初始化。

作用域

page:是在本jsp文件中有效的bean。

request:是在一次请求中有效的bean。也就是request.setAttribute("beanName",bean实体)中的 bean实体。

session:是在一次会话中有效的bean。也就是session.setAttribute( "beanName",bean实体)中的 bean实体。

context:是整个应用中有效的bean。