<jsp:useBean />及相关动作深入理解

学JSP的时候,发现jsp和javaBean合作真的很方便,一些东西直接交给javaBean处理,但是在用的过程中,还是发现了不少问题,如果提交表单中有中文怎么办?javaBean里面的属性成员不只是基本数据类型,而是Object类型又如何处理?深入了解了后,发现javaBean其实不过是各种作用域的一个Attrubute属性。
        1、<jsp:useBean />单独使用和包含使用。单独使用即<jsp:useBean ../>,是以"/>"号结束。则表示在作用域中查找有无该Bean的实例,若找不到,则初始化并设置为作用域(scope,默认为page)的属性,若有则不初始化。 
        在包含使用中<jsp:useBean > <jsp:setProperty /> </jsp:useBean>。则包含中的语句在执行javaBean新建实例的时候才执行,若已经能找到则不执行。所有如果是scope=“session”则<jsp:setProperty />应该放在<jsp:useBean />外面,这样不会导致在整个会话作用域都不执行,相反,若是scope="page"或者scope="request"则 <jsp:setProperty />  最好放在  <jsp:useBean />  里面,这样就能保证执行  <jsp:setProperty />。
        2、<jsp:useBean />真正执行的语句如下。 
    在jsp中     
<jsp:useBean id="book" class="com.Book" scope=“page" > 
                 <jsp:setProperty name="book" property="*" />
                    </jsp:useBean>

    在转化后的jsp.java文件代码如下 
      
     com.Book book = null; 
     synchronized (_jspx_page_context) {//对上下文作用域加锁,同步
        book = (com.Book) _jspx_page_context.getAttribute("book", PageContext.PAGE_SCOPE);//找到在scope中设置的作用域进行查找
        if (book == null){//如果找不到
          book = new com.Book();//初始化 新建对象
          _jspx_page_context.setAttribute("book", book, PageContext.PAGE_SCOPE);//给Page作用域设置属性
          org.apache.jasper.runtime.JspRuntimeLibrary.introspect(_jspx_page_context.findAttribute("book"), request);//这就是在useBean中用setProperty的效果
        }
      }

    在jsp中执行 <jsp:useBean id="bookBean" class="com.BookBean" />//默认scope=”page“ 
    相应的jsp.java文件中代码如下: 
       
      com.BookBean bookBean = null;
      synchronized (_jspx_page_context) {
        bookBean = (com.BookBean) _jspx_page_context.getAttribute("bookBean", PageContext.PAGE_SCOPE);
        if (bookBean == null){
          bookBean = new com.BookBean();
          _jspx_page_context.setAttribute("bookBean", bookBean, PageContext.PAGE_SCOPE);
        }
      }

这部分代码和上面的差不多,不解释了,就是少了中间setProperty的部分。
    3,、个人看法之利弊。用   <jsp:setProperty name="book" property="*" />进行处理表单提交的数据确实很方便,简写了很多代码,只要和表单相同的property对应javaBean中的实例变量,这样自动进行设置,但是这个也有不好的地方,就是在表单提交中文的情况下会有乱码,容器默认ISO8859-1编码,这样得到的javaBean中的实例变量就有乱码,不利于处理。
        加上通过<jsp:useBean />操作最终还是转还为将Bean中的对象存储到相应作用域对象的Attribute中,这样的话,可以用手动代替,实例化Bean,然后setAttribute进行设置。这样处理也比较方便。然后再用getAttribute得到属性也就是javaBean的对象。
       对<jsp:useBean /的理解差不多就这些吧。。。。 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值