JAVA WEB学习笔记(二)-JavaBean学习专题

一、JavaBean的优点:
*************************************************************************************
A.不需要用到Java语法
B.对象的共享更简单
C.请求参数与对象属性之间可以方便地对应起来
*************************************************************************************

二、JavaBean的特点:
*************************************************************************************
A.bean类必须拥有一个零参数的(默认)构造函数:JSP元素创建bean时,会调用默认的构造函数。实际的应用中经常会由servlet创建bean,JSP页面只是从中查询数据。
B.bean类不应该有公开的实例变量(字段):要成为JSP可以访问的bean,相应的类应该使用访问器方法(access method)取代对实例变量的直接访问。
C.持续性的值应该通过getXxx和setXxx方法来访问:尽管我们可以使用JSP script或表达式访问类的任意方法,但是,访问bean的标准JSP只能使用那些遵循getXxx/setXxx或isXxx/setXxx命名约定的方法。
*************************************************************************************

三、JavaBean的构建:
*************************************************************************************
A.<jsp:useBean id = “name”class = “package.Class”/>
这个语句表示:实例化由Class指定的类,并将实例化后的对象绑定到_jspService中的变量,变量的名字由id指定。
B.一定要使用完全限定类名——包括包名的类名。不管你是否使用<%@ page import…%>引入包,都要满足这个要求。
C.jsp:useBean动作规定:仅当不存在相同id和scope的bean时才实例化新的对象
*************************************************************************************

四、bean类的安装:
*************************************************************************************
A.单个bean类的正确位置是WEB-INF/classes/subdirectoryMatchingPackageName
B.含有bean类的JAR文件应该放在WEB-INF/lib目录中
*************************************************************************************

五、jsp:useBean中beanName、type选项的使用:
*************************************************************************************
A.beanName:即可以指向类,也可以指定包含序列化bean对象的文件
B.type:    当希望所要声明的变量的类型是实际bean类的超类,或是bean实现的接口。应该使用type属性来控制这种声明。此时type中声明的类型是class中指明的类型的父类或者接口,即用子类的构造方法初始化一个父类对象-多态。例如:
    <jsp:useBean id = “thread1” class = “mypackage.MyClass”
type  = “java.lang.Runnable”>
*************************************************************************************

六、jsp:useBean的语法规则:
*************************************************************************************
A.属性名大小写敏感
B.单引号和双引号都可以使用(但必须使用其中的一种)
C.标签的结束标记为/>,不只是>
*************************************************************************************

七、JavaBean属性的设置:
*************************************************************************************
A.<jsp:setProperty name = “beanName”property = “beanProperty”value = “beanValue”/>
B.jsp:setProperty的value属性允许给出的值为请求期间的表达式
*************************************************************************************

八、将单个属性与输入参数关联:
*************************************************************************************
A.可以不使用value属性,而是使用param指定一个输入参数,被指定的请求参数的值字段用作bean属性的值,由String到基本类型和封装类的类型转换都自动执行。

B.如果请求中没有指定的参数,则不采用任何动作(系统并不传递null到相关联的属性),例如:
<jsp:setProperty name = “bean1”property = “property1”param = “property1”>

C.如果请求参数的名称和bean属性的名称相同,还可以更进一步地简化这段代码。这种情况下可以省略param
*************************************************************************************

九、将所有的属性与请求参数关联:
*************************************************************************************
A.JSP允许将所有的属性与同名的请求参数关联起来。我们所要做的只是以”*”作为property参数的值。例如:<jsp:setProperty name = “entry”property = “*”/>

B.系统从请求参数开始查找匹配的bean属性,而非采用相反的方式。因此,对于没有请求参数与之匹配的属性,则不采用任何动作。这种行为意味着:表单bean不必一次填充完毕,相反,一次提交可以填写bean的部分属性,另一个表单填写其他属性。以此类推。但要使用这项功能,需要将bean在多个页面中共享。
*************************************************************************************

十、使用属性与请求参数自动关系方式的注意点:
*************************************************************************************
A.输入参数缺失时不采取任何动作:系统不会提供null作为属性的值。因此在设计bean时,一般
要为其设置可以识别的默认值,以便可以确定某个属性是否修改过

B.自动类型转换不能像手动类型转换那样那个防止不合法的值:在使用自动类型转换时,应该考虑使错误处理页面或显示使用try/catch块来处理异常数据

C.bean属性的名称和请求参数大小写敏感:属性名和请求参数的名字必须精确匹配
*************************************************************************************

十一、共享bean
*************************************************************************************
使用scope时,系统首先检查指定的位置是否存在指定名称的bean。仅当系统找不倒现有的bean时,才会创建新的bean.scope属性有4个可选值:page、request、session、application
*************************************************************************************

十二、bean的scpoe = “page”:
*************************************************************************************
A.这个值表示:在处理当前请求期间,除了要将bean对象绑定到局部变量外,还应该将它放在PageContext对象中。

B.将此对象存储在此表示,servlet可以通过调用预定义变量pageContext的getAttribute方法访问它.由于每个页面和每个请求都有不同的PageContext对象,

C.所有scope = “page”表示不共享bean,也就是针对每个请求都创建新的bean
*************************************************************************************

十三、bean的scope = “request”:
*************************************************************************************
A.这个值表示:在处理当前请求期间,除了要将bean对象绑定到局部变量外,还应该将它放在
HttpServletRequest对象中,从而可以通过getAttribute方法访问它。

B.在使用jsp:include、jsp:forward、RequestDispatcher的include或forward方法时,两个JSP页面,或JSP页面和servlet将会共享请求对象。而scope = “page”的bean则无法共享请求对象
*************************************************************************************

十四、bean的scope = “session”:
*************************************************************************************
A.这个值表示:除了要将bean对象绑定到局部变量之外,还要将它存储到与当前请求相关联的HttpSession对象中,我们可以使用getAttribute获取存储在HttpSession中的对象

B.bean存储在HttpSession对象中,若该会话不失效(如超时)则bean的属性可跨请求持续
*************************************************************************************

十五、bean的scope = “application”:
*************************************************************************************
A.这个值表示:除了要将bean对象绑定到局部变量之外,还要将它存储在ServletContext中,通过预定义application变量或通过调用getServletContext获得。

B.ServletContext由Web应用中多个servlet和JSP页面共享。ServletContext中的值可以用getAttribute方法获得。
*************************************************************************************

十六、根据条件构建bean:
*************************************************************************************
A.根据条件构建bean:<jsp:useBean…>statements</jsp:useBean>

B.jsp:useBean的起始标签和结束标签之间的语句只在创建新的bean时执行,如果使用已有的bean,则不执行。由于jsp:useBean调用默认(零参数)构造函数,因此,我们经常需要在bean创建之后修改它的属性。为了模拟构造函数,应该在bean首次创建时执行这些修改,而不应该在访问现存(或更新后)的bean时执行。

C.多个页面都可以在jsp:useBean的起始标签和结束标签之间包含jsp:setProperty语句;只有被第一个访问的页面才会执行这些语句。
*************************************************************************************

你可能感兴趣的:(java,bean,Web,jsp,servlet,application)