第10讲 JSP动作 - 在JSP中使用JavaBean_第1页
第10讲 JSP动作 - 在JSP中使用JavaBean_第2页
第10讲 JSP动作 - 在JSP中使用JavaBean_第3页
第10讲 JSP动作 - 在JSP中使用JavaBean_第4页
第10讲 JSP动作 - 在JSP中使用JavaBean_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.4在JSP页面中使用JavaBean,JSP动作指令,4.4.1JavaBean概述,Sun公司将JavaBean定义为可以复用的软件组件,它在遵循JavaBean技术规范的基础上提供特定的功能,这些功能模块可以组合成更大规模的应用系统。JavaBean是Java中的一个组件技术,类似于微软的COM组件,其本质是一个封装了一系列属性和方法的类。在JSP中使用JavaBean具有以下好处:可实现代码的重复利用。易编写,易维护,易使用。,JavaBean的种类,可视化JavaBean:即带有界面的类,如文本框、下拉列表框等。非可视化JavaBean:即没有界面元素的类。这种JavaBean仅仅是在功能上进行封装,从而提供可以重复利用的软件组件,不涉及界面元素的编程。在JSP程序中所用的JavaBean一般以非可视化为主,可视的JavaBean一般用于编写Applet程序或Java应用程序。,JavaBean示例,publicclassUserprivateStringname;privateintage;privatebooleanisVip;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicbooleanisVip()returnisVip;publicvoidsetVip(booleanisVip)this.isVip=isVip;,作为JavaBean的类中所有属性都应定义为private,以实现封装。,每个属性都应定义getXxx()和setXxx()方法来进行操作,其中Xxx是首字母大写的私有属性的名称。,如果某个属性的类型为boolean,属性名为isA,则对应的获取方法为isA(),对应的设置方法为setA()。,JavaBean类必须有一个无参公共构造器,以便JSP引擎调用来实例化类对象。JavaBean组件可以实现序列化。,序列化JavaBean,通过将数据库中的表与JavaBean组件形成映射关系可以JavaBean组件的持久化。但由于关系型数据库与面向对象机制不同,为了方便存储JavaBean的某时状态,JavaBean规范提供了序列化机制来通过文件系统存储JavaBean快照。序列化分为:序列化和反序列化。序列化是将对象数据分解成字节流,写入字节流,以便存储在文件中。反序列化是打开字节流,从字节流中读取对象并重构对象。JavaBean组件序列化只需实现java.io.Serializable接口即可,不需要在类中增加任何代码。,4.4.2在JSP使用JavaBean,操作演示在JSP中使用JavaBean的优势,1)动作,动作用于在JSP页面中创建一个JavaBean实例,并指定其实名称及作用范围。这个动作首先在指定的作用域中查找是否存在指定的JavaBean实例,如果不存在,则创建一个指定名称的JavaBean实例。动作的语法格式如下:,id属性用于指定JavaBean实例变量的名称。该值必须指定,且在指定作用域内必须惟一。该值将被和动作使用。,scope属性表示此JavaBean实例的作用范围。,class、type和beanName是类型规范,class、type和beanName属性,class属性用于指定JavaBean的类名。该属性意味着在创建JavaBean实例时,通过调用指定类的公共无参构造器生成对象实例。因此class属性指定的类不能是一个抽象类,且必须有公共无参构造器。type属性用于指定id属性的变量类型。该属性指JavaBean实例变量的数据类型,可以是JavaBean类本身,也可以是JavaBean类的父类或JavaBean类所实现的接口。如果没有指定该属性,则默认为类变量指定的类型。如果不匹配,就会抛出一个ClassCastException异常。beanName属性取代class属性以创建JavaBean实例,其值被当作参数传递到java.beans.Beans.instantiate()方法中用以创建对象实例。beanName属性即可以用于指定一个序列化JavaBean,也可以指定一个类。,示例1:只使用class属性,bean.jspbean_jsp.java,org.nls.Useruser=null;user=(org.nls.User)_jspx_page_context.getAttribute(user,javax.servlet.jsp.PageContext.PAGE_SCOPE);if(user=null)user=neworg.nls.User();_jspx_page_context.setAttribute(user,user,javax.servlet.jsp.PageContext.PAGE_SCOPE);,声明一个类型为org.nls.User的对象变量,未指定type属性时类型由class属性决定,该变量指向名为user(由id属性指定)的一个对象实例,该对象在默认范围内有效,如果user对象实例不存在,则使用org.nls.User类的公共无参构造器创建一个的实例,并由user变量引用。,bean.jspbean_jsp.java如果user对象实例不存在,则会抛出异常。,示例2:只使用type属性,org.nls.Useruser=null;user=(org.nls.User)_jspx_page_context.getAttribute(user,javax.servlet.jsp.PageContext.PAGE_SCOPE);if(user=null)thrownewjava.lang.InstantiationException(beanusernotfoundwithinscope);,示例3:使用type和class属性,org.nls.Useruser=null;user=(org.nls.User)_jspx_page_context.getAttribute(user,javax.servlet.jsp.PageContext.PAGE_SCOPE);if(user=null)user=neworg.nls.User();_jspx_page_context.setAttribute(user,user,javax.servlet.jsp.PageContext.PAGE_SCOPE);,org.nls.Useruser=null;user=(org.nls.User)_jspx_page_context.getAttribute(user,javax.servlet.jsp.PageContext.PAGE_SCOPE);if(user=null)user=neworg.nls.VipUser();_jspx_page_context.setAttribute(user,user,javax.servlet.jsp.PageContext.PAGE_SCOPE);,示例4:使用type和beanName属性,org.nls.Useruser=null;user=(org.nls.User)_jspx_page_context.getAttribute(user,javax.servlet.jsp.PageContext.PAGE_SCOPE);if(user=null)tryuser=(org.nls.User)java.beans.Beans.instantiate(this.getClass().getClassLoader(),org.nls.User);catch(java.lang.ClassNotFoundExceptionexc)thrownewInstantiationException(exc.getMessage();catch(java.lang.Exceptionexc)thrownewjavax.servlet.ServletException(Cannotcreatebeanofclass+org.nls.User,exc);_jspx_page_context.setAttribute(user,user,javax.servlet.jsp.PageContext.PAGE_SCOPE);,注意:不能同时指定class和beanName属性,JSP中的四种作用域,2)动作,此动作用于给指定的JavaBean对象的属性赋值。语法格式如下:name:指JavaBean实例对象的名称。对应动作中定义的id属性。property:指明要赋值的属性名称。JSP容器会调用与属性相匹配的setXxx()方法来设值。如果值为*,意味着可以对所有属性一次性赋值。value:指要赋于属性的新值。param:用于指定请求参数。【注意】:value和param不能同时使用。,姓名:密码:,index2.jsp,bean2.jsp,property对应JavaBean的属性名,value用于设置新值,param用于接收请求参数,可以通过通配符*将所有请求参数的值赋给对应的JavaBean属性。这要求请求参数的名称与JavaBean的属性名称一一对应。,示例一,姓名:密码:,index2.jsp,bean2.jsp,示例二,如果value和param都没有指定,JSP容器会自动寻找请求参数中与JavaBean属性相匹配的参数来设值。,3)动作,此动作用于获取指定JavaBean对象的属性值。语法格式如下:name:指明JavaBean实例对象的名称。对应动作中定义的id属性。property:指明要获取的实例对象的属性名称。,姓名:年龄:爱好:运动阅读音乐,name:age:hobby:,index3.jsp,bean3.jsp,4)JavaBean中非字符串属性,publicclassUserprivateStringname;privateintage;privateStringhobby;.,User.java,自动类型转换,请求参数均是以字符串形式存在的,如果JavaBean中的属性是非字符串类型,则必须在使用请求参数前进行类型转换。以下情况JSP容器会进行自动类型转换:以下情况不会进行自动类型转换,编译错误:可改写为:,/,/,处理索引属性,动作对于索引属性的处理很不理想。在获取索引属性时,的执行效果等价于执行out.print(property-type)方法。,hobby:hobby:hobby:,4.4.3JavaBean的部署,所谓部署就是把编译好的JavaBean类文件放在合适的位置上以便在JSP中可以访问这些类文件。JavaBean类文件的组织方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论