JavaBean和表单处理v.ppt

上传人:max****ui 文档编号:6358208 上传时间:2020-02-23 格式:PPT 页数:78 大小:2.44MB
返回 下载 相关 举报
JavaBean和表单处理v.ppt_第1页
第1页 / 共78页
JavaBean和表单处理v.ppt_第2页
第2页 / 共78页
JavaBean和表单处理v.ppt_第3页
第3页 / 共78页
点击查看更多>>
资源描述
1 第七章JavaBean与表单处理 2 JSP程序开发模式 单纯的JSP页面编程在单纯的JSP编程模式下 通过应用JSP中的脚本标志 可直接在JSP页面中实现各种功能 这种模式很容易实现 缺点 因为将大部分的Java代码与HTML代码混淆在一起 会给程序的维护和调试带来很多的困难 而且对于整个程序的结构更是无从谈起 单纯的JSP页面编程模式是无法应用到大型 中型甚至小型的JSPWeb应用程序开发中 3 JSP程序开发模式 JSP JavaBean编程该模式是JSP程序开发经典设计模式之一 适合小型或中型网站的开发 利用JavaBean技术 可以很容易地完成一些业务逻辑上的操作 例如数据库的连接 用户登录与注销等 JavaBean是一个遵循了一定规则的Java类 在程序的开发中 将要进行的业务逻辑封装到这个类中 在JSP页面中通过动作标签来调用这个类 从而执行这个业务逻辑 此时的JSP除了负责部分流程的控制外 大部分用来显示页面 而JavaBean则负责业务逻辑的处理 下面将通过一个流程图说明该模式对客户端的请求进行处理的过程 4 JSP JavaBean编程 客户端 带有JSP引擎的Web服务器 用户通过客户端浏览器请求服务器 服务器将最终的结果返回给客户端浏览器进行显示 JSP页面 JavaBean 业务逻辑 数据库 在JavaBean中连接及操作数据库 或实现其他业务逻辑 在JSP页面中调用JavaBean 服务器接收用户请求后调用JSP页 JavaBean将执行的结果返回JSP页面 服务器读取JSP页面中的内容 将页面中的静态与动态内容相结合 5 优点 纯净的JSP页面因为业务逻辑和数据库操作已经从JSP页面中剥离出来 JSP页面中只需嵌入少量的Java代码甚至不使用Java代码 可重用的组件设计良好的JavaBean可以重用 甚至可以作为产品销售 在团队协作的项目中 可重用的JavaBean将会大大减少开发人员的工作量 加快开发进度 方便进行调试复杂的操作都封装在一个或者数个JavaBean中 错误比较容易定位 易维护易扩展系统的升级或者更改往往集中在一组JavaBean中 而不用编辑所有的JSP页面 6 应用范围Model1模式的表现逻辑和控制逻辑全部逻辑耦合在页面中 这种处理方式对一些规模很小只有几个简单页面的项目比较适用 7 JSP程序开发模式 JSP Servlet JavaBean编程在JSP JavaBean设计模式的基础上加入Servlet来实现程序中的控制层 在这种模式中 由Servlet来执行业务逻辑并负责程序的流程控制 JavaBean组件实现业务逻辑 充当着模型的角色 JSP用于页面的显示 可以看出这种模式使得程序中的层次关系更明显 各组件的分工也非常明确 下面将通过一个流程图说明该模式对客户端的请求进行处理的过程 8 JSP程序开发模式 提出这种设计模式主要是因为应用程序中用来完成任务的代码 模型 也称为 业务逻辑 通常是程序中相对稳定的部分 并且会被重复使用 程序与用户进行交互的页面 视图 却是经常改变的 如果因需要更新页面而不得不对业务逻辑代码进行改动 或者要在不同的模块中应用到相同的功能而重复地编写业务逻辑代码 不仅降低了整体程序开发的进程 而且会使程序变得难以维护 因此 将业务逻辑代码与外观呈现分离 将会更容易地根据需求的改变来改进程序 9 JSP程序开发模式 MVC模式MVC Model View Controller 模型 视图 控制器 是一种程序设计概念 它同时适用于简单的和复杂的程序 使用该模式可将待开发的应用程序分解为3个独立的部分 模型 视图和控制器 10 JSP Servlet JavaBean编程对客户端的请求进行处理的过程 客户端 带有JSP引擎的Web服务器 用户通过客户端浏览器请求服务器 服务器将最终的结果返回给客户端浏览器进行显示 JSP页面 JavaBean 业务逻辑 数据库 在JavaBean中连接及操作数据库 或实现其他业务逻辑 服务器接收用户请求后调用Servlet Servlet根据用户请求调用JavaBean处理业务 服务器读取JSP页面中的内容 将页面中的静态与动态的内容相结合 请求 响应 Servlet 调用 转发 由Servlet转发请求到JSP页面 JavaBean将结果返回Servlet 在Servlet中将结果保存到请求对象中 11 设计模式为软件设计问题提供标准的解决方案 Model2是一种设计模式 MVC将交互式应用程序组织成三个独立的模块 应用程序模块 用于表示数据和业务逻辑 数据表示 控制器 用于发送请求和控制应用程序的流程 12 Model2体系结构 Model2体系结构的各种对象包括 Model JavaBean 封装应用程序状态处理业务逻辑通知视图的更新 View JSP 向控制器发送用户请求显示模型状态接收来自模型的更新 Controller Servlet 定义应用程序行为映射用户请求到模型选择相应的视图 状态查询 通知更新 请求业务处理 选择视图 13 Model模型 封装数据 代表了某应用程序的核心功能 负责处理用户的数据 实现业务逻辑 同时 模型还为视图的显示提供数据 并可被多个视图所共享 模型对象表示Web应用程序的数据元素 用户可与这些数据元素进行交互 14 View视图 显示数据 收集数据 和用户打交道 主要指与用户交互的界面 即应用程序的外观 它只负责将数据转交给控制器 同时还负责展示模型传递给用户的数据 当后台模型更新数据时 视图也应随之更新 Controller控制器 改变数据 改变模型的状态 负责接收用户的请求和数据 然后做出判断将请求和数据交到哪一个模型来处理 最后调用视图来显示模型返回的数据 视图对象提供模型组件以开发用户界面 控制器对象充当应用程序视图对象和模型对象之间的中间对象 15 在当今各类JSP网站开发标准中 有两种使用JSP的方式 他们分别被称为模式一和模式二 模式一是JSP JavaBean的结合模式二是JSP JavaBean Servlet的结合 这两种模式是当今大中型应用程序的基础 这两种模式中最重要的就是JavaBean的开发 JavaBean用来封装业务逻辑 16 7 3剖析JavaBean 什么是组件 独立的模块外界不了解其内部实现外界通过其提供的接口对组件进行访问可以重用目前有代表性的组件技术COM COM JavaBeans EJB等 17 JavaBean组件和企业级EJB EnterpriseJavaBean 组件EJB是J2EE的核心技术 它为开发服务器端应用程序组件提供了一个模型 利用这个模型来创建可移植性与分布式企业应用程序服务器或组件 EJB定义了一个用于开发基于组件的企业多重应用程序的标准 EJB是一个用来创建分布式 服务器端以及基于Java的企业应用程序组件的功能强大的组件模型 18 19 7 3 1什么是JavaBean JavaBean是Java的可重用组件技术 实质是一种符合某些命名和设计规范的Java类JavaBean通常封装成为具有特定功能或者处理某个业务 如连接数据库 访问数据库 应用 JSP页面内可以访问JavaBean的对象以及它的方法 在JSP的Web应用中集成JavaBean组件 由JavaBean中处理业务逻辑 然后在JSP中调用 而JSP页面着重网页界面的设计 可以实现业务逻辑和前台显示的部分分离 20 使用JavaBean的好处 可以使得JSP页面变得清晰 节省软件开发时间 可以直接使用已经测试和可信的已有组件 避免了重复开发 降低系统维护的难度JavaBean的分类可视的JavaBean 传统的JavaBean应用于可视化界面 如java图形界面中使用的按钮 文本框或列表框等等 非可视化的JavaBean 封装逻辑 封装数据 与JSP搭配使用 创建一个标准JavaBean的基本语法如下 1 定义JavaBean类JavaBean类定义的语法结构如下 publicclass类名称 类成员的定义 类方法的定义 类属性的定义 如何创建JavaBean 其中需要强调的是 类名称与保存的文件名称必须一致 否则就会出现编译错误 同时 类必须声明为公有类 即public 如 publicclassCarBean privateStringmaker 2 定义JavaBean类的构造函数JavaBean是Jave类 JavaBean就有自己的构造函数 并且构造函数的名称必须与JavaBean类的名称一致 构造函数的主要作用是用来初始化 而且构造函数无参数输入 其语法结构如下 publicJavaBean类名称 初始化 例如 publicCarBean 3 定义JavaBean属性JavaBean是Jave类 那么它不但有自己的构造函数 还有自己的属性 JavaBean属性的定义的语法结构如下 private数据类型属性名称 例如 privateStringmaker 4 设定JavaBean属性值的方法定义了JavaBean属性之后 还要对其属性值进行设定 其属性值设定的语法结构如下 publicvoidset设定方法名称 数据类型参数 this 变量 参数 例如 publicvoidsetMaker Stringmaker this maker Benz 值得注意的是 JavaBean属性值的设定方法名称一般以set三个字母开头 后面跟上属性设定方法名称 5 读取JavaBean属性值的方法上面讲述了如何设定JavaBean属性值 那么属性值设定好之后 如何读取呢 JavaBean属性值读取的语法结构如下 publicvoidget读取方法名称 returnthis 变量 参数 例如 publicvoidgetMaker returnthis maker JavaBean的属性简介 1 JavaBean的属性与普通Java类的属性的概念不一样 JavaBean的属性是以方法定义的形式出现的 2 用于对属性赋值的方法称为属性修改器或setter方法 用于读取属性值的方法称为属性访问器或getter方法 3 属性修改器必须以小写的set前缀开始 后跟属性名 且属性名的第一个字母要改为大写 例如 nickName属性的修改器名称为setNickName password属性的修改器名称为setPassword 4 属性访问器通常以小写的get前缀开始 后跟属性名 且属性名的第一个字母要改为大写 例如 nickName属性的访问器名称为getNickName password属性的访问器名称为getPassword 5 JavaBean的属性名是根据setter方法与getter方法的名称来生成的 setter方法或getter方法中除去前缀 set 和 get 后的部分即为属性名 但属性名的首字母一般要小写 29 7 3 2JavaBean的特征 通常一个标准的JavaBean有以下特征 编写规范 一定使用了package语句进行打包JavaBean是一个public类型的类有一个无参数的构造方法属性一般是私有的 即用private修饰 对属性值xxx的获取有相应的getXxx 方法 并且此方法是公有的 即用public修饰 若要获取的属性xxx为boolean类型则可以使用isXxx 方法对属性值xxx的设置有相应的setXxx 方法 并且此方法也是公有的 即用public修饰 需要实现java io Serializable接口 实现了Serializable接口的对象可以转换为字节序列 这些字节序列可以被完全存储以备以后重新生成原来的对象 30 UserBean javapackagejsp test publicclassUserBean privateStringuserName 用户名privateStringpwd 密码privateStringname 真实姓名privateStringgender 性别privateintage 年龄privateStringemail 电子邮件privateStringtel 固定电话privateStringmphone 手机publicintgetAge returnage publicvoidsetAge intage this age age publicStringgetEmail returnemail publicvoidsetEmail Stringemail this email email publicStringgetGender returngender publicvoidsetGender Stringgender this gender gender publicStringgetMphone returnmphone publicvoidsetMphone Stringmphone this mphone mphone publicStringgetName returnname publicvoidsetName Stringname this name name 31 publicStringgetPwd returnpwd publicvoidsetPwd Stringpwd this pwd pwd publicStringgetTel returntel publicvoidsetTel Stringtel this tel tel publicStringgetUserName returnuserName publicvoidsetUserName StringuserName this userName userName 32 Eclipse中编写JavaBean Eclipse新建WebProject在src文件夹上新建package 如前例中的jsp test在package上新建类 如前例中的UserBean 33 Eclipse中编写JavaBean 34 35 36 37 38 39 一个JavaBean编写完以后 需要将它编译成 class 文件 并将此 class 文件 连同其目录 放到本次应用的WEB INF classes目录之下 直接在Apache下使用时 注意 用Eclipse编写会自动地把 class放到相应的class目录下 使用JavaBean 40 在JSP中使用JavaBean 需要使用以下几个动作元素标签 在网页中创建一个Bean对象标签 用于为Bean对象中的属性赋值标签 用于获取Bean对象中属性的值 41 SampleBean javapackagebean publicclassSampleBean privateStringsample Hello World publicvoidsetSample Strings if s null sample s publicStringgetSample returnsample Test1 jsp属性sample的初始值 属性sample的新值 42 6 3 1调用JavaBean 该标签用来在JSP页面中创建一个JavaBean实例 语法如下 其中 id指定该JavaBean的实例变量的名称scope指定该Bean变量的有效范围request指在任何执行相同请求的JSP文件中使用Bean 直到页面执行完毕 session指从创建该Bean开始 在相同session下的JSP页面中可以使用该Bean application指从创建该Bean开始 在相同application下的JSP页面中可以使用该Bean 43 44 比较在同一个页面输出效果一样使用动作元素可以指定作用域 在脚本段的作用域只限定在当前JSP页面 对于多个页面共享Bean情况 如果使用脚本段 每个页面都要实例化一个新的对象 会增加系统开销 45 补充JavaBean 该标签用来在JSP页面中创建一个JavaBean实例 并指定它的名字及作用范围 语法如下 46 id属性 id属性 代表JavaBean对象的变量名可为同一Bean类指定不同的id值 例如 47 class属性 class属性 JavaBean的类名CountBean不属于包CountBean属于test包 48 class属性分两种情况 如果在scope指定的范围内 该JavaBean对象不存在 则创建这个JavaBean对象 相当于执行以下语句Countid1 newCount Countid2 newCount 若该JavaBean对象已经存在 则不创建新对象 而是直接获得已存在对象的引用 49 执行过程 50 访问JavaBean 标签用来获取Bean对象的属性值 并显示在页面上 其语法如下 name指出了要获取哪个bean的属性值 取值与useBean中id值相同 property指出要获取该bean的哪个属性值注意 在使用之前 必须有由所创建的Bean对象如果使用来检索的值是空值 那么将会产生NullPointerException例外 如果使用程序段或表达式来检索值 那么在浏览器上出现的是将是null 空值 51 例 还可以使用表达式调用其属性 例如在计算器实例中 下面两种表达式是等价的 52 执行过程 publicclassLanguageBean privateStringname publicStringgetName returnthis name mypackage LanguageBean Hello beans jsp 转换成字符串 53 通过Bean提供的setXXX 方法设置Bean的简单属性和索引属性 语法如下 其中propertyDetails可为如下之一property property propertyName property propertyName param paramName property propertyName value propertyValue 54 55 设置JavaBean的属性 设置Bean对象的属性的语法有多种 1 简单bean属性设置其中 name指出是在操作哪个bean property指出对该bean的哪个属性赋值 value用来指定给属性赋的值 例 56 Eg 一个描述学生的beans 在一个JSP页面中获得一个这样的beans 其有效范围是page 在JSP页面中使用动作标签设置 获取该beans的属性 57 Student java 创建beans的源文件 publicclassStudent Stringname null longnumber doubleheight weight publicStringgetName returnname publicvoidsetName StringnewName name newName publiclonggetNumber returnnumber publicvoidsetNumber longnewNumber number newNumber publicdoublegetHeight returnheight publicvoidsetHeight doublenewHeight height newHeight publicdoublegetWeight returnweight publicvoidsetWeight doublenewWeight weight newWeight 58 student jsp 名字是 学号是 身高是 米体重是 公斤 59 注意 如果将表达式的值设置为beans属性的值 表达式值的类型必须和beans的属性的类型一致 如果将字符串设置为beans的属性的值 这个字符串会自动被转化为beans的属性的类型 60 2 将单个属性值和输入参数关联用param代替value表示将一个form表单中传入参数的值赋给bean的某个属性 其中 name指出是在操作哪个bean property指出对该bean的哪个属性赋值 而param表示传入参数的名字 61 test2 html姓名 年龄 TestBean javapackagebean publicclassTestBean privateStringuserName privateintage publicintgetAge returnage publicvoidsetAge intage this age age publicStringgetUserName returnuserName publicvoidsetUserName StringuserName this userName userName Test4 jsp 62 3 输入参数和bean属性值相同 可以简化这种用法将form表单中传入参数的值赋给bean的某个属性 要求 form表单中参数的名称要与propertyName一致 63 test1 html姓名 年龄 TestBean javapackagebean publicclassTestBean privateStringuserName privateintage publicintgetAge returnage publicvoidsetAge intage this age age publicStringgetUserName returnuserName publicvoidsetUserName StringuserName this userName userName 注意 property的属性名 form中参数的名字 Bean中的属性名 方法名要对应 Test2 jsp 64 标签 4 将bean的所有属性与表单中参数关联在这种用法中 JSP容器会一个个检查传入的参数 如果某个传入参数的名字和bean中某个属性的名字相同 则将该参数的值赋给bean中的属性 使用这种方式可以一次为多个属性赋值 65 Test3 jsp test1 html姓名 年龄 TestBean javapackagebean publicclassTestBean privateStringuserName privateintage publicintgetAge returnage publicvoidsetAge intage this age age publicStringgetUserName returnuserName publicvoidsetUserName StringuserName this userName userName 66 Pleaseenteryourusername publicclassLanguageBean privateStringname publicvoidsetName Stringname this name name beans html beans jsp mypackage LanguageBean 执行过程 67 eg 首先建立一个名为具有计算访客人数功能的JavaBean类Counter并且在程序中定义一个名为setCounter的方法用来设置属性值Count 并且定义为取得属性的方法getCounter Counter javapackagebean publicclassCounter publicCounter privateintCount 0 publicvoidsetCounter intcount Count count publicintgetCounter return Count 68 运行效果 在page范围在request范围在session范围在Application范围 69 使用JavaBean处理表单数据 操纵HTML表单步骤1 写JSP原文件 创建一些HTML的表单并命名 2 在Java文件里写Bean 定义属性 GET或者SET方法来配合已经被你指定好名字的表单 3 回到JSP原文件中 增加标签来创建一个或者调用一个现成的Bean 4 增加标签设置HTML表单中需要SET方法的Bean的属性 5 增加标签设置HTML表单中需要GET方法的Bean的属性 6 如果需要处理更多的用户数据 用request对象 70 eg1 用户通过form表单提交数据 提交的数据被处理后 再在Jsp文件中显示处理usingGetParameter html让用户输入个人信息usingGetParameter jsp将其一一输出eg2 使用Jsp JavaBean形式处理表单 showInfo jsp让用户输入个人信息服务器取得这些信息之后 利用show java这个Javabean中的方法将其一一输出 71 7 5 3使用GET POST方法传递参数 第一种GET它将表单内容附加URL之后 中间用问号连接 然后传送至指定的程序做处理 http specifiedURL Name1 Value Name2 Value2第二种POST 这个方法是将表单内容作为一个数据体而不是URL的一部分传送给服务器的 所以URL中看不到表单的内容 72 在Form里面 可以使用post也可以使用get 它们都是method的合法取值 区别 这两者传递参数时所用的编码不一定是一样的 对于get方法 浏览器对数据的URLencode的编码方式是有浏览器设置来决定 而post方法 开发人员可以指定 get是从服务器上获取数据 post是向服务器传送数据 get是把参数数据队列加到提交表单的ACTION属性所指的URL中 值和表单内各个字段一一对应 在URL中可以看到 post是通过HTTPpost机制 将表单内各个字段与其内容放置在HTMLHEADER内一起传送到ACTION属性所指的URL地址 用户看不到这个过程 get传送的数据量较小 不能大于2KB post传送的数据量较大 一般被默认为不受限制 get安全性非常低 post安全性较高 73 根据HTTP协议规范 每个HTTP请求主要包含以下信息 74 请求头格式a 通用头 general header Cache Control 客户端希望服务端如何缓存自己的请求数据 如 Cache Control no cache Cache Control max age 0 Connection 客户端是否希望与服务端之间保持长连接 如 Connection close Connection keep alive Date 只有当请求方法为POST或PUT方法时客户端才可能会有些字段 Pragma 包含了客户端一些特殊请求信息 如 Pragma no cache 客户端希望代理或应用服务器不应缓存与该请求相关的结果数据 Via 一般用在代理网关向应用服务器发送的请求头中 表明该来自客户端的请求经过了网关代理 格式为 Via 请求协议版本网关标识 其它信息 如 Via 1 1webcache 250 80 squid b 请求头 request header Accept 表明客户同端可接受的请求回应的媒体类型范围列表 星号 用于按范围将类型分组 用 指示可接受全部类型 用 type 指示可接受type类型的所有子类型 如 Accept image gif image jpeg Accept Charset 客户端所能识别的字符集编码格式 格式 Accept Charset 字符集1 权重 字符集2 权重 如 Accept Charset iso 8859 5 unicode 1 1 q 0 8 Accept Language 客户端所能识别的语言 格式 Accept Language 语言1 权重 语言2 权重 如 Accept Language zh en q 0 7 Host 客户请求的主机域名或主机IP 格式 Host 域名或IP 端口号 如 Host 80 请求行中若有HTTP 1 1则必须有该请求头 User Agent 表明用户所使用的浏览器标识 主要用于统计的目的 Referer 指明该请求是从哪个关联连接而来 Accept Encoding 客户端所能识别的编码压缩格式 如 Accept Encoding gzip deflate If Modified Since 该字段与客户端缓存相关 客户端所访问的URL自该指定日期以来在服务端是否被修改过 如果修改过则服务端返回新的修改后的信息 如果未修改过则服务器返回304表明此请求所指URL未曾修改过 如 If Modified Since Fri 2Sep200619 37 36GMT If None Match 该字段与客户端缓存相关 客户端发送URL请求的同时发送该字段及标识 如果服务端的标识与客户端的标识一致 则返回304表明此URL未修改过 如果不一致则服务端返回完整的数据信息 如 If None Match 0f0a893aad8c61 253 0f0a893aad8c61 252 0f0a893aad8c61 251 Cookie 为扩展字段 存储于客户端 向同一域名的服务端发送属于该域的cookie 如 Cookie MailUserName whouse c 实体头 entity header 此类头存在时要求有数据体 Content Encoding 客户端所能识别的编码压缩格式 如 Content Encoding gzip deflate Content Length 客户端以POST方法上传数据时数据体部分的内容长度 如 Content Length 24 Content Type 客户端发送的数据体的内容类型 如 Content Type application x www form urlencoded 为以普通的POST方法发送的数据 Content Type multipart form data boundary 5169208281820 则表明数据体由多部分组成 分隔符为 5169208281820 75 POST方法 发出POST请求的Html页 UserName Password 76 POST方法 POST请求文本 POST MyWeb index jspHTTP 1 1Host 127 0 0 1User Agent ICEBrowser5 31Accept content type application x www form urlencodedContent length 30Connection Keep Aliveuser JBuilder password Borland 77 GET方法 等价的发出GET请求的Html页 UserName Password 78 GET方法GET MyWeb index jsp user JBuilder password BorlandHTTP 1 1Host 127 0 0 1User Agent ICEBrowser5 31Accept Connection Keep Alive 等价的GET请求文本
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!