`

servlet和jsp核心编程(第2版)第十四章 JavaBean组件在JSP文档中的应用 学习笔记

阅读更多
第十四章 JavaBean组件在JSP文档中的应用
一、bean是什么
1.bean类拥有一个零参数的( 默认)构造函数。
2.bean类不应该有公开的实例变量(字段)。
3.持续性的值应该通过get和set方法来访问。
二、bean的应用
jsp页面中可以使用三种构造函数来构建和操作javabean组件。
(一).jsp:useBean,构建一个新的bean
<jsp:useBean id = "beanName" class = "package.Class"/>
这句的意思就是实例化由class指定的类,并将实例化后的对象绑定到_jspService中的变量。变量的名字由id指定。但要注意,<警
告>一定要使用完全的类限定名。即使我们已经import了相应的包。

2.我们可以把
<jsp:useBean id = "book1" class = "coreservlets.Book">
看做
<%coreservlets.Book book1 = new coreservlets.Book();%>


3.将所有的bean都放在包中,安装在通常用来存放java的代码目录中,单个的类放在WEB-
INF/classes/subdirectoryMatchingPackageName中,JAR放在WEB-INF/lib中。

4.jsp:useBean选项的使用:scope,beanName,type。scope指定指定bean的应用范围,仅当不存在相同的id和scope时,才实例化新的对象。beanName既可以指向类,也可以指定含有序列化bean对象的文件。beanName属性的值被传递给java.beans.Bean的instantiate。type可以实现我们要声明的变量的类型是实际bean类型的超类,或是bean实现的接口。比如
<jsp:useBean id = "thread1" class = "mypackage.MyClass" type ="java.lang.Runnable"> 
实际为
java.lang.Runnable thread1 = new myPackage.MyClass()
;如果实际的类与type不兼容,则会产生ClassCastException异常。如果bean已存在,我们可以不使用class属性,而只使用type属性指定其类型。

(二).jsp:getProperty
,<jsp:getProperty name = "beanName" property = "propertyName"/>

1.获得bean之后,就可以使用jsp:getProperty输出他的属性。<重点提示>在jsp:useBean中,bean的名字由id指出,而在jsp:setProperty和jsp:getProperty中由name属性指出。

2.我们可以把
<jsp:getProperty name = "book1" property = "title">看做<%= book1.getTitle()%>


(三).jsp:setProperty
<jsp:setProperty name = "beanName" property = "propertyName" value = "propertyValue"/>


1.我们可以把
<jsp:setProperty name = "book1" property = "title" value = "Core Servlets and JavaServer page">
视为
<%book1.setTitle("Core Servlets and JavaServer page");%>
后者为显式java语法,前者为XML语法。

三、设置bean的属性:高级技术

1.jsp:setProperty的value属性允许给出的值为请求期间的表达式,如
<jsp :setProperty name = "entry" property = "itemID" value = '<%=request.getParameter("itemID")%>'/>.


2.如果我们的bean的属性不是String类型的那么把属性传给bean就会很复杂,因为我的理解是,由于表单提交的属性值都为String,而bean类中所对应的属性不一定为String,这就遇到了一个类型转换的问题。我们可以在
<jsp:setProperty name ="entry" property = "numItems" param ="numItems"/>
中不使用value属性,而使用param属性指定一个输入参数,然后自动完成类型转换,这个param就对应表单中的name属性的值,并且要注意如果param和property的值相同,那么可以省略param属性。我们倾向于不省略param。

3.将所有属性和同名的请求参数关联起来,注意是同名的请求参数,也就是可以理解为表单中和name属性的值相同的那些bean属性。我们使用
<jsp:setProperty name = "entry" property = "*"/>


四、共享bean
1.使用scope时,系统首先检查指定的位置是否存在指定名称的bean,如果找不到现有的bean时,才会创建新的bean。
2.<jsp:useBean scope = "page"/>省略scope也可以得到该效果,page作用域表示,在处理当前请求期间,除了要将bean对象绑定到局部变量外,还应该将他放在PageContext对象中,将此对象存储在此表示,servlet可以通过调用预定义变量pageContext的getAttribute方法访问它。由于每个页面和每个请求都有不同的pageContext对象,所以scope ="page"(或省略scope)就表示不共享bean,也就是针对每个请求都创建新的bean。

3.scope="request"除了要将bean对象绑定到局部变量外,还应该将他放在HttpServletRequest对象中,看似好像也是非共享bean,但是由于<jsp:include>是在请求该页面时调用此页面,我们可以把其视其为,同一个请求,主次页面都会得到调用,所以主次或jsp页面和servlet页面将会共享请求对象。而<jsp:forward>也会自动转到新的页面,所以jsp:forward的主次页面也会共享请求对象。同理,和这两者作用相同的RequestDispatcher的include或forward方法也共享请求对象。

4.scope="session":除了要将bean对象绑定到局部变量外,还应该将他放在HttpSession对象中。

5.scope="application":除了要将bean对象绑定到局部变量外,还应该将他放在ServletContext对象中。ServletContext可以通过application.getServletContext()。ServletContext由Web应用中多个servlet和jsp共享。ServletContext中的值可以用getAttribute()方法取得。

6.我们可以使用<jsp:useBean...>statements</jsp:useBean>来完成类的初始化,其中的statements只有当创建新的bean时执行。如果使用已有的bean,则不执行。

五共享bean的四种方式
1.<警告>不要为存储在不同位置的bean取相同的名字,服务器可能会发生错误,并取回错误的bean,jsp:useBean中的id都应该使用唯一的值,这就是为什么它用id,而不用name的原因吧。这里不再赘述
分享到:
评论

相关推荐

    JSP网络编程学习笔记源代码 part2

    第三篇为“JSP技术基础”,主要讲述JSP的基本语法和内建对象及JSP和Servlet的集成,JavaBean和表达式语言;第四篇为“数据库访问技术”,主要讲述JDBC技术及JSP和Servlet如何通过JDBC访问数据库,以及如何改进数据库...

    Jsp_Servlet学习课堂笔记

    关于Jsp以及Servlet的学习笔记,包含有JavaBean 自定义标签库等等一系列重点的概念以及代码 绝对超值

    struts项目学习笔记

    Struts2 是一个非常优秀的MVC框架,基于Model2 设计模型 由传统Struts1和WebWork两个经典框架发展而来 Struts2框架=Struts2+XWork Strust2 核心功能 允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,...

    jsp 公司管理系统的制作原理

    jsp 公司管理系统的制作原理JSP+Servlet+JavaBean

    javaWeb学习笔记基础知识

    Servlet,请求和响应机制,jsp动态网页技术,会话跟踪 javaBean,JSP常用标签和自定义标签,AJAX实例,以及监听器,过滤器和BaseServlet和分页

    学习笔记:javaWeb考试系统(基于MVC模式)

    《学习笔记》:临近期末考试,javaweb应用开发 布置的一项简单的在线考试系统,基于MVC模式(jsp+servlet+javabean)以及mySQL数据库,大家共同进步,谢谢。

    J2EE相关技术知识学习笔记

    J2EE相关技术知识点经典总结,外加学习笔记,重点突出,清楚明白。

    桂浩 解释器构造实验1

    桂浩 解释器构造实验1 含JAVACC学习笔记 高分作业

    跟我学javaweb全套ppt

    除此之外,第11、第14章还提供了两个完整的实例来讲解Struts2开发新特性和开发SSH的详细步骤.通过对这两章的学习,读者可以对SSH开发模式有更透彻的理解和认识。《跟我学Java Web》光盘中提供了丰富的内容,包括全书...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    J2EE复习笔记--java程序员学习与进阶的良师益友

    基础知识阐述和高级知识进阶,难点解疑,热点分析。...包括jsp基础,servlet,数据库,javabean, structs,mvc设计,spring,jsp进阶,hibernate,ssh项目实战,jsp-dao-mvc进阶等章节,是学习参考不错的资料。

    web学习笔记

    这是上课时直接做的笔记,包括老师多年以来的教学经验和开发经验,希望对大家有帮助!

    图书商城系统资料+源码+笔记 非常适合学习

    JSTL + JSP + Servlet + JavaBean + BeanUtils + FileUpload + JavaMail + DBUtils(JDBC) + C3P0 + MySQL + MyEclipse10+ Tomcat7.0 + JDK6 + Windows MVC 模式 JavaEE 三层结构 web层 service层 dao层 DAO 模式

Global site tag (gtag.js) - Google Analytics