一、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语句;只有被第一个访问的页面才会执行这些语句。 ************************************************************************************* |
|