JavaBean和表单处理课件_第1页
JavaBean和表单处理课件_第2页
JavaBean和表单处理课件_第3页
JavaBean和表单处理课件_第4页
JavaBean和表单处理课件_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

1第七章JavaBean与表单处理2JSP程序开发模式单纯的JSP页面编程在单纯的JSP编程模式下,通过应用JSP中的脚本标志,可直接在JSP页面中实现各种功能。这种模式很容易实现。缺点:因为将大部分的Java代码与HTML代码混淆在一起,会给程序的维护和调试带来很多的困难,而且对于整个程序的结构更是无从谈起。单纯的JSP页面编程模式是无法应用到大型、中型甚至小型的JSPWeb应用程序开发中。3JSP程序开发模式JSP+JavaBean编程该模式是JSP程序开发经典设计模式之一,适合小型或中型网站的开发。利用JavaBean技术,可以很容易地完成一些业务逻辑上的操作,例如数据库的连接、用户登录与注销等。JavaBean是一个遵循了一定规则的Java类,在程序的开发中,将要进行的业务逻辑封装到这个类中,在JSP页面中通过动作标签来调用这个类,从而执行这个业务逻辑。此时的JSP除了负责部分流程的控制外,大部分用来显示页面,而JavaBean则负责业务逻辑的处理。下面将通过一个流程图说明该模式对客户端的请求进行处理的过程。5优点:纯净的JSP页面因为业务逻辑和数据库操作已经从JSP页面中剥离出来,JSP页面中只需嵌入少量的Java代码甚至不使用Java代码。可重用的组件设计良好的JavaBean可以重用,甚至可以作为产品销售,在团队协作的项目中,可重用的JavaBean将会大大减少开发人员的工作量,加快开发进度。方便进行调试复杂的操作都封装在一个或者数个JavaBean中,错误比较容易定位。易维护易扩展系统的升级或者更改往往集中在一组JavaBean中,而不用编辑所有的JSP页面。6应用范围Model1模式的表现逻辑和控制逻辑全部逻辑耦合在页面中,这种处理方式对一些规模很小只有几个简单页面的项目比较适用。用Model1模式开发大型项目时,程序流向由一些互相能够感知的页面决定,当页面很多时要清楚地把握其流向将是很复杂的事情,当用户修改一页时可能会影响相关的很多页面,大有牵一发而动全局的感觉,使得程序的修改与维护变得异常困难;还有一个问题就是程序逻辑开发与页面设计纠缠在一起,既不便于分工合作也不利于代码的重用,这样的程序其健壮性和可伸缩性都不好。7JSP程序开发模式JSP+Servlet+JavaBean编程在JSP+JavaBean设计模式的基础上加入Servlet来实现程序中的控制层。在这种模式中,由Servlet来执行业务逻辑并负责程序的流程控制,JavaBean组件实现业务逻辑,充当着模型的角色,JSP用于页面的显示。可以看出这种模式使得程序中的层次关系更明显,各组件的分工也非常明确。下面将通过一个流程图说明该模式对客户端的请求进行处理的过程。9JSP程序开发模式MVC模式MVC(Model-View-Controller,模型—视图—控制器)是一种程序设计概念,它同时适用于简单的和复杂的程序。使用该模式可将待开发的应用程序分解为3个独立的部分:模型、视图和控制器。10JSP程序开发模式提出这种设计模式主要是因为应用程序中用来完成任务的代码——模型(也称为“业务逻辑”)通常是程序中相对稳定的部分,并且会被重复使用,程序与用户进行交互的页面——视图,却是经常改变的。如果因需要更新页面而不得不对业务逻辑代码进行改动,或者要在不同的模块中应用到相同的功能而重复地编写业务逻辑代码,不仅降低了整体程序开发的进程,而且会使程序变得难以维护。因此,将业务逻辑代码与外观呈现分离,将会更容易地根据需求的改变来改进程序。11Model(模型):指的是业务逻辑的代码,是应用程序中真正用来完成任务的部分。View(视图):实际上就是程序与用户进行交互的界面,用户可以看到它的存在。视图可以具备一定的功能并应遵守对其的约束,在视图中不应包含对数据处理的代码,即业务逻辑代码。Controller(控制器):主要控制用户请求并作出响应。它根据用户的请求选择模型或修改模型,并决定返回怎样的视图。137.3剖析JavaBean什么是组件?独立的模块外界不了解其内部实现外界通过其提供的接口对组件进行访问可以重用目前有代表性的组件技术COM、COM+、JavaBeans、EJB等14JavaBean组件和企业级EJB(EnterpriseJavaBean)组件EJB是J2EE的核心技术,它为开发服务器端应用程序组件提供了一个模型,利用这个模型来创建可移植性与分布式企业应用程序服务器或组件。EJB定义了一个用于开发基于组件的企业多重应用程序的标准。EJB是一个用来创建分布式、服务器端以及基于Java的企业应用程序组件的功能强大的组件模型。157.3.1什么是JavaBeanJavaBean是Java的可重用组件技术,实质是一种符合某些命名和设计规范的Java类JavaBean通常封装成为具有特定功能或者处理某个业务(如连接数据库,访问数据库)应用:JSP页面内可以访问JavaBean的对象以及它的方法。在JSP的Web应用中集成JavaBean组件,由JavaBean中处理业务逻辑,然后在JSP中调用,而JSP页面着重网页界面的设计,可以实现业务逻辑和前台显示的部分分离。1718使用JavaBean的好处:可以使得JSP页面变得清晰;节省软件开发时间(可以直接使用已经测试和可信的已有组件,避免了重复开发);降低系统维护的难度JavaBean的分类可视的JavaBean:传统的JavaBean应用于可视化界面(如java图形界面中使用的按钮、文本框或列表框等等)。非可视化的JavaBean:封装逻辑、封装数据,与JSP搭配使用。197.3.2JavaBean的特征通常一个标准的JavaBean有以下特征(编写规范):一定使用了package语句进行打包JavaBean是一个public类型的类有一个无参数的构造方法属性一般是私有的(即用private修饰)对属性值xxx的获取有相应的getXxx()方法,并且此方法是公有的(即用public修饰)若要获取的属性xxx为boolean类型则可以使用isXxx()方法对属性值xxx的设置有相应的setXxx()方法,并且此方法也是公有的(即用public修饰)需要实现java.io.Serializable接口。实现了Serializable接口的对象可以转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。21 publicStringgetPwd(){ returnpwd; } publicvoidsetPwd(Stringpwd){ this.pwd=pwd; } publicStringgetTel(){ returntel; } publicvoidsetTel(Stringtel){ this.tel=tel; } publicStringgetUserName(){ returnuserName; } publicvoidsetUserName(StringuserName){ this.userName=userName; } }22Eclipse中编写JavaBeanEclipse新建WebProject在src文件夹上新建package,如前例中的jsp.test在package上新建类,如前例中的UserBean23Eclipse中编写JavaBean252629一个JavaBean编写完以后,需要将它编译成“.class”文件,并将此“.class”文件(连同其目录)放到本次应用的WEB-INF\classes目录之下(直接在Apache下使用时)。注意:用Eclipse编写会自动地把.class放到相应的class目录下7.4在JSP中使用JavaBean30在JSP中使用JavaBean需要使用以下几个动作元素<jsp:useBean>标签:

在网页中创建一个Bean对象<jsp:setProperty>标签:

用于为Bean对象中的属性赋值<jsp:getProperty>标签:用于获取Bean对象中属性的值31SampleBean.javapackagebean;publicclassSampleBean{privateStringsample="Hello,World";publicvoidsetSample(Strings){if(s!=null)sample=s;}publicStringgetSample(){returnsample;}}Test1.jsp<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.SampleBean"/>属性sample的初始值:<jsp:getPropertyname="myBean"property="sample"/></p><jsp:setPropertyname="myBean"property="sample"value="Hello,JSP"/>属性sample的新值:<jsp:getPropertyname="myBean"property="sample"/></html>327.4.1调用JavaBean<jsp:useBean>该标签用来在JSP页面中创建一个JavaBean实例。语法如下:<jsp:useBeanid=“beanname”class=“package.class”[scope=“page|request|session|application”]/>其中:id指定该JavaBean的实例变量的名称scope指定该Bean变量的有效范围request指在任何执行相同请求的JSP文件中使用Bean,直到页面执行完毕,session指从创建该Bean开始,在相同session下的JSP页面中可以使用该Bean;application指从创建该Bean开始,在相同application下的JSP页面中可以使用该Bean33属性用法id命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例class指定Bean的完整包名scope指定Bean在哪种上下文内可用,可以取page,request,session和application四个值之一•

page(是默认值)表示该Bean只在当前页面内可用(保存在当前页面的PageContext内)•

request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)•

session表示该Bean对当前HttpSession内的所有页面都有效•

application表示该Bean对所有具有相同ServletContext的页面都有效scope很重要,是因为jsp:useBean只有在不存在具有相同id和scope的对象时才会实例化新的对象;如果已有id和scope都相同的对象则直接使用已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略type指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的beanName.class文件的名称、Bean包名或包含该Bean的串行化文件。仅当Bean不存在于指定的作用域时,才使用词属性。与Type合用。34比较<jsp:useBeanid="calculator"scope="request"class="ch07.SimpleCalculator"><%ch07.SimpleCalculatorcalculator=newch06.SimpleCalculator%>在同一个页面输出效果一样使用动作元素<jsp:useBean>可以指定作用域;在脚本段的作用域只限定在当前JSP页面。对于多个页面共享Bean情况,如果使用脚本段,每个页面都要实例化一个新的对象,会增加系统开销35访问JavaBean<jsp:getProperty>标签用来获取Bean对象的属性值,并显示在页面上,其语法如下:

<jsp:getPropertyname=“beanname” property=“propertyname”/>name指出了要获取哪个bean的属性值,取值与useBean中

id值相同;property指出要获取该bean的哪个属性值注意:在使用<jsp:getProperty>之前,必须有由<jsp:useBean>所创建的Bean对象

如果使用<jsp:getProperty>来检索的值是空值,那么将会产生NullPointerException例外;如果使用程序段或表达式来检索值,那么在浏览器上出现的是将是null(空值)36例:<jsp:getPropertyname="myBean"property="sample"/>还可以使用表达式调用其属性,例如在计算器实例中,下面两种表达式是等价的<jsp:getPropertyname=“calculator”property=“first”/><%calculator.getFirst()%>377.4.2标访问JavaBean的属性<jsp:setProperty>标签用来设置Bean对象的属性值。JSP语法格式如下:<jsp:setPropertyname="beanInstanceName"{property="*"|property="propertyName"[param="parameterName"]|property="propertyName"value="{string|<%=expression%>}"}/>38它有两种用法:第一,可以在jsp:useBean元素的外面(后面)使用jsp:setProperty。<jsp:useBeanid="myName".../>...<jsp:setPropertyname="myName"property="someProperty".../>不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。第二,把<jsp:setProperty>放入jsp:useBean元素的内部。<jsp:useBeanid="myName"...>...<jsp:setPropertyname="myName"property="someProperty".../></jsp:useBean><jsp:setProperty>只有在新建Bean实例时才会执行,如果是使用现有实例,则不执行<jsp:setProperty>。397.4.3设置JavaBean的属性<jsp:setProperty>设置Bean对象的属性的语法有多种:(1).简单bean属性设置

<jsp:setPropertyname=“beanName” property=“propertyName” value=“propertyValue”/>其中:name指出是在操作哪个bean,property指出对该bean的哪个属性赋值,value用来指定给属性赋的值。例:<jsp:setPropertyname="myBean"property="sample"value="Hello,JSP"/>40Eg.一个描述学生的beans,在一个JSP页面中获得一个这样的beans,其有效范围是page。在JSP页面中使用动作标签设置、获取该beans的属性。41Student.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;}}42student.jsp<%@pagecontentType="text/html;charset=GB2312"%><%@pageimport="Student"%><HTML><BODY><Fontsize=10>

<jsp:useBeanid="zhang"class="Student"scope="page"></jsp:useBean><jsp:setPropertyname="zhang"property="name"value="张小三"/><P>名字是:<jsp:getPropertyname="zhang"property="name"/><jsp:setPropertyname="zhang"property="number"value="1999001"/><P>学号是:<jsp:getPropertyname="zhang"property="number"/><%doubleheight=1.70;%><jsp:setPropertyname="zhang"property="height"value="<%=height+0.05%>"/><P>身高是:<jsp:getPropertyname="zhang"property="height"/>米<jsp:setPropertyname="zhang"property="weight"value="67.65"/><P>体重是:<jsp:getPropertyname="zhang"property="weight"/>公斤</FONT></BODY></HTML>43注意:如果将表达式的值设置为beans属性的值,表达式值的类型必须和beans的属性的类型一致。如果将字符串设置为beans的属性的值,这个字符串会自动被转化为beans的属性的类型。44(2).将单个属性值和输入参数关联<jsp:setPropertyname=“beanName”property=“propertyName”param=“paramName”/>用param代替value表示将一个form表单中传入参数的值赋给bean的某个属性。其中:name指出是在操作哪个bean,property指出对该bean的哪个属性赋值,而param表示传入参数的名字。45test2.html<html><formaction="test4.jsp">姓名:<inputtype="text"name="user">年龄:<inputtype="text"name="age"><inputtype="submit"></form></html>TestBean.javapackagebean;publicclassTestBean{privateStringuserName;privateintage;publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}}Test4.jsp<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.TestBean"/><jsp:setPropertyname="myBean"property="userName"param=“user”/><jsp:setPropertyname="myBean"property="age"/><jsp:getPropertyname="myBean"property="userName"/><jsp:getPropertyname="myBean"property="age"/></html>46(3)输入参数和bean属性值相同,可以简化<jsp:setPropertyname=“beanName” property=“propertyName”/>

这种用法将form表单中传入参数的值赋给bean的某个属性。

要求:form表单中参数的名称要与propertyName一致47test1.html<html><formaction="test2.jsp">姓名:<inputtype="text"name="userName">年龄:<inputtype="text"name="age"><inputtype="submit"></form></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<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.TestBean"/><jsp:setPropertyname="myBean"property="userName"/><jsp:setPropertyname="myBean"property="age"/><jsp:getPropertyname="myBean"property="userName"/><jsp:getPropertyname="myBean"property="age"/></html>48<jsp:setProperty>标签(4).将bean的所有属性与表单中参数关联<jsp:setPropertyname=“beanName” property=“*”/>

在这种用法中,JSP容器会一个个检查传入的参数,如果某个传入参数的名字和bean中某个属性的名字相同,则将该参数的值赋给bean中的属性。使用这种方式可以一次为多个属性赋值49Test3.jsp<%@pagepageEncoding="GB2312"%><%@pagecontentType="text/html;charset=GB2312"%><html><jsp:useBeanid="myBean"scope="request"class="bean.TestBean"/><jsp:setPropertyname="myBean"property=“*"/><jsp:getPropertyname="myBean"property="userName"/><jsp:getPropertyname="myBean"property="age"/></html>test1.html<html><formaction="test3.jsp">姓名:<inputtype="text"name="userName">年龄:<inputtype="text"name="age"><inputtype="submit"></form></html>TestBean.javapackagebean;publicclassTestBean{privateStringuserName;privateintage;

publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}}50<formmethod="post"action="beans.jsp"><p>Pleaseenteryourusername:

<inputtype="text"name="name">

<jsp:useBeanid="languageBean"scope="page"class="mypackage.LanguageBean">

<jsp:setPropertyname="languageBean"property="*"/></jsp:useBean>

·················publicclassLanguageBean{

privateString

name;

publicvoid

setName(Stringname){=name;}

·····················beans.htmlbeans.jspmypackage.LanguageBean<jsp:setProperty>执行过程51示例通过一个用户注册的例子来具体介绍这3个动作元素的使用方法,TestBean的Java类用户登录文件register.htmlregister.jsp显示注册成功的用户的提交信息52register2.html改表单参数userName为xingming(即和JavaBean的属性名不一致),修改后的代码为<td>姓名:<inputname="xingming"type="text"></td>register2.jsp:改<jsp:setPropertyname="user"property="userName"param="xingming"/>为<jsp:setPropertyname="user"property="userName"value="xingming"/>重新执行程序,输入数据并提交练习1、求立方体的面积和体积问题分析:本程序由jsp页面和javaBean组成,通过javaBean的方法可以设置立方体的长、宽、高,并计算面积和体积。Jsp页面显示出面积和体积的值。程序结构:box.jspBox.java位于test包中54scope属性scope属性-表明JavaBean对象存在的范围,可为如下几个值:page(默认)requestsessionApplication以上作用范围使越来越大。55下面看看具体的scope四个值的含义:

Page:保存在pageContext对象中,有page范围的JavaBean实例只能在当前创建这个JavaBean的JSP文件中进行操作,这个实例只有在请求返回给客户端后或者转移到另外的JSP页面后才会释放掉。page范围的JavaBean常用于进行一次性操作的JavaBean,这样的Bean用的最多,比如大部分表单提交,Bean的一些计算处理等都可以使用page范围的JavaBean

56Request有request范围的JavaBean实例可以在处理请求所有JSP页面中都存在,这个对象只有在请求全部处理完毕后才会被释放掉,request范围的JavaBean常用于共享同一次请求的JSP页面中,比如判断用户登录功能,如果用户名密码合法就可以forward到一个合法页面中,否则就forward到一个出错页面,当然转移后的页面仍然能够得到用户的输入。

57SessionJavaBean对象是保存在session范围的JavaBean实例的生存周期是整个session,只有当session过期后才能释放掉,这样常用于共享同一session的JSP页面,比如购物车一般就是放在session中的或者登陆后的用户信息等也可以在session中,注意<%@page标签中不要设置session=false,否则在这个JSP页面中session将不会起作用,幸好JSP默认session=true,所以可以不必管它了。58application-JavaBean对象保存在application对象中,有application范围的JavaBean对象的生存周期是整个application。这就意味着这样的JavaBean的生存周期是整个应用程序,当webServer停掉才会消失掉。这样的常用于共享同一application的JSP程序中,比如程序中一些经常用到配置东西如数据库连接URL,全局的计数器或者是聊天室中人员信息等。59page作用域客户每次请求访问JSP页面时,都会创建一个新的JavaBean对象。JavaBean对象的有效范围仅是客户请求访问的当前页面。JavaBean对象在下列情况下会结束生命期:客户请求访问的当前页面执行完毕并向客户端发回响应。客户请求访问的当前页面通过<jsp:forward>标记将请求转发到另一个文件。60request作用域客户每次请求访问JSP页面时,都会创建一个新的JavaBean对象。JavaBean对象的有效范围是:客户请求访问的当前JSP网页和当前JSP网页共享同一个客户请求的页面,即当前JSP网页中<%@include>指令以及<jsp:forward>标记包含的其它JSP文件当所有共享同一个客户请求的JSP页面执行完毕并向客户端发回响应时,JavaBean对象结束生命期。

61request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。举个简单的例子:

jsp1.jsp

<jsp:useBeanid="beanID"class="xxx.xxx.BeanClass"scope="request"/>

<jsp:includepage="jsp2.jsp"/>

jsp2.jsp

<jsp:getPropertyname="beanID"property="sample"/>

62运行jsp1.jsp可以正常显示数据,因为作用范围是request,相当于调用了request.setAttribute()方法,

jsp2页通过request.getAttribute来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin.

一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别

<jsp:include>和<%@include%>.如果上面的<jsp:includepage="jsp2.jsp"/>改为<%@includefile="jsp2.jsp"%>,即使scope为page也是正确的,<%@include%>是编译时包含,<jsp:include>是运行时包含.63session作用域只有当不同客户请求访问JSP页面时,才会创建一个新的JavaBean对象。JavaBean对象的有效范围是同一个Session中的所有JSP文件。JavaBean对象被创建后,存在于整个Session的生命周期内。

64application作用域在整个Web应用中只会创建一个JavaBean对象。JavaBean对象的有效范围是Web应用中的所有JSP文件。JavaBean对象被创建后,存在于整个Web应用的生命周期内。

65eg.首先建立一个名为具有计算访客人数功能的JavaBean类Counter并且在程序中定义一个名为setCounter的方法用来设置属性值Count,并且定义为取得属性的方法getCounter。Counter.javapackagebean;publicclassCounter{publicCounter(){}privateintCount=0;publicvoidsetCounter(intcount){Count=count;}publicintgetCounter(){return++Count;}}66运行效果在page范围在request范围在session范围在Application范围677.5使用JavaBean处理表单数据操纵HTML表单步骤1、写JSP原文件,创建一些HTML的表单并命名。2、在Java文件里写Bean,定义属性,GET或者SET方法来配合已经被你指定好名字的表单。3、回到JSP原文件中,增加<jsp:useBean>标签来创建一个或者调用一个现成的Bean。4、增加<jsp:setProperty>标签设置HTML表单中需要SET方法的Bean的属性。5、增加<jsp:getProperty>标签设置HTML表单中需要GET方法的Bean的属性。6、如果需要处理更多的用户数据,用request对象。68eg1.用户通过form表单提交数据,提交的数据被处理后,再在Jsp文件中显示处理usingGetParameter.html让用户输入个人信息usingGetParameter.jsp将其一一输出eg2.使用Jsp+JavaBean形式处理表单。showInfo.jsp让用户输入个人信息服务器取得这些信息之后,利用show.java这个Javabean中的方法将其一一输出69补充JavaBean

<jsp:useBean>该标签用来在JSP页面中创建一个JavaBean实例,并指定它的名字及作用范围。语法如下:<jsp:useBeanid=“id"class=“className”scope=“scope”/><jsp:useBeanid=“id"type=“typeName”

scope=“scope”>

70id属性id属性-代表JavaBean对象的变量名可为同一Bean类指定不同的id值,例如:<jsp:useBeanid=“id1"class=“Count”/><jsp:useBeanid=“id2"class=“Count”/>71class属性class属性-JavaBean的类名CountBean不属于包<jsp:useBeanid="count"class="Count"/>CountBean属于test包<jsp:useBeanid="count"class="test.Count"/>72class属性分两种情况:如果在scope指定的范围内,该JavaBean对象不存在,则创建这个JavaBean对象,相当于执行以下语句 Countid1=newCount(); Countid2=newCount();若该JavaBean对象已经存在,则不创建新对象,而是直接获得已存在对象的引用。73<jsp:useBean>执行过程在scope中找到bean对象?收到请求有无type?id引用class对象class可被实例化?noyesyes异常no类型转换转换成功?异常yesnono处理<jsp:useBean>元素内容···················74<jsp:setProperty>通过Bean提供的setXXX()方法设置Bean的简单属性和索引属性,语法如下:<jsp:setPropertyname=“beanName”propertyDetails/>其中propertyDetails可为如下之一property=“*”property=“propertyName”property=“propertyName”param=“paramName"property=“propertyName"value="propertyValue"75<jsp:setProperty>标记property=“*”设置Bean的所有属性,要求Bean属性的名字和类型必须与request对象中参数相匹配由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型若没有Bean属性对应的request参数值或参数值为空,则相应的Bean属性不会设置任何值76<jsp:setProperty>标记property=“propertyName”设置Bean指定的属性,要求Bean属性的名字和类型必须与request对象中参数相匹配由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型若没有Bean属性对应的request参数值或参数值为空,则相应的Bean属性不会设置任何值77<jsp:setProperty>标记property=“propertyName”param=“paramName"当Bean属性的名字和request参数的名字不同时使用该方法进行设置由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型若request参数值为空,则相应的Bean属性不会设置任何值78<jsp:setProperty>标记property=“propertyName"value="propertyValue"使用指定值而不是request参数来设置Bean属性value可为字符串或表达式。若是字符串,会自动转换成Bean属性对应的类型;若是表达式,则必须和Bean属性的类型一致若value为空,则相应的Bean属性不会设置任何值79<formmethod="post"action="beans.jsp"><p>Pleaseenteryourusername:

<inputtype="text"name="name">

<jsp:useBeanid="languageBean"scope="page"class="mypackage.LanguageBean">

<jsp:setPropertyname="languageBean"property="*"/></jsp:useBean>

·················publicclassLanguageBean{

privateString

name;

publicvoid

setName(Stringname){=name;}

·····················beans.htmlbeans.jspmypackage.LanguageBean<jsp:setProperty>执行过程80<jsp:setPropertyname="languageBean"property=“name“value=“aa”/><%languageBean.setName(“aa”);%>81<jsp:getProperty>标记访问Bean属性的值,并将此值转换成字符串,插入到输出结果中。语法如下:<jsp:getPropertyname=“beanName”property=“propertyName"/>82<jsp:getProperty>执行过程·················publicclassLanguageBean{privateStringname;························publicStringgetName(){return;}

·····················mypackage.LanguageBean<p>Hello,

<jsp:getPropertyname="languageBean"property="name"/>.</p>

beans.jsp转换成字符串Jsp中访问JavaBean语法使用page指令导入JavaBean类:

%@pageimport="包名.

类名"%使用<jsp:useBean>标签声明JavaBean对象:

<jsp:useBeanid="实例名"class="包名.

类名"scope="作用范围"/>

注意:要给出完整的(包名.类名),否则报ClassNotFoundException

例:<jsp:useBeanid="bean"class="com.CountBean"scope="session"/>

上面的代码相当于:

CountBeanbean=newCountBean();

session.setAttribute("bean",bean);

注意:如果在scope指定范围内,该JavaBean已存在,则<jsp:useBean>不会生成新的JavaBean对象,而是直接获得已经存在的JavaBean对象的引用.83847.5.3使用GET/POST方法传递参数第一种GET它将表单内容附加URL之后,中间用问号连接,然后传送至指定的程序做处理。第二种POST,这个方法是将表单内容作为一个数据体而不是URL的一部分传送给服务器的。所以URL中看不到表单的内容。3、猜价格游戏问题分析:本程序由jsp页面和javaBean组成,通过javaBean的构造函数,主要用于产生随机数并控制在1到1000之间。成员函数setGuess,设置和调用成员属性,完成游戏功能。判断所输入的数字与实际价格是否相同,或输入数字是否符合要求。Jsp页面包括一个文本框用来输入价格,然后判断是否猜对价格,显示相应的提示信息。程序结构:testGuest.jspGuessGame.java位于test包中2.简单计算器calculate.jsp执行输入3/0之后的执行结果如图4、用户登录LogBean.java位于test包中,方法判断输入是否合法login.jsplogcm.jsp提交sucess.jsprelog.jsp成功失败选作:javaBeanShowCalendar.java设定方法取得相应如年月日周等信息。92在Form里面,可以使用post也可以使用get。它们都是method的合法取值。区别:这两者传递参数时所用的编码不一定是一样的。对于get方法,浏览器对数据的URLencode的编码方式是有浏览器设置来决定,而post方法,开发人员可以指定。get是从服务器上获取数据,post是向服务器传送数据。get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTMLHEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。get安全性非常低,post安全性较高。

93根据HTTP协议规范,每个HTTP请求主要包含以下信息94请求头格式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.1

webcache_250_199.:80(squid)"

b)请求头(request-header):

Accept:表明客户同端可接受的请求回应的媒体类型范围列表。星号“*”用于按范围将类型

温馨提示

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

评论

0/150

提交评论