服务器端开发技术JSP及JavaBean.ppt
第六章服务器端开发技术JSP及JavaBean,2023/11/14,服务器端开发技术JSP及JavaBean,2,第六章 服务器端开发技术JSP及JavaBean,第一节.JSP第二节.JavaBean第三节.JSP、JavaBean及Servlet组合开发第四节.开发框架、模式介绍,2023/11/14,服务器端开发技术JSP及JavaBean,3,第一节 JSP,6.1.1 JSP概述 JSP是SUN公司推出的一种新型的Web开发语言,和其他开发语言相比,JSP有以下显著的优点:1、运行效率较高且功能强 JSP页面在第一次被访问时,JSP容器会将其转换成一个等价的Servlet类,并且放置在工作目录中,以后所有对该JSP页面的访问都会由该Servlet类来处理,不再需要对JSP的解析。,2023/11/14,服务器端开发技术JSP及JavaBean,4,2、动态内容和静态内容的分离 JSP页面通常还会包括其他的一些由JSP规范定义的称为元素的部分,用于表达逻辑和显示动态内容。这些元素和纯HTML代码自由的融合在一起,但是又能在外观上截然分开。这种做法使得JSP页面的结构相对较为清晰,能同时为开发人员和网页设计人员理解。3、组件重用 软件设计时的重用性是非常重要的,JSP特别考虑到已有组件的重用,在JSP中的组件重用主要是通过JavaBean组件、Enterprise JavaBean组件和定制化标签来实现的。这些组件可以由第三方开发,并且可以和开发工具结合起来实现快速开发。,2023/11/14,服务器端开发技术JSP及JavaBean,5,6.1.2 JSP元素开发基础 1.JSP元素的基本概念 元素就是由JSP规范定义的,JSP容器能够理解并处理的部分,除了元素之外所有其他的内容,即JSP容器不能理解的则统称为模板。元素有不同的类型,类型的定义描述了元素语法和语义。例如,如果元素拥有属性,类型定义就需要描述属性的名字、属性值的类型和属性的意义等等。,2023/11/14,服务器端开发技术JSP及JavaBean,6,2.JSP元素的类型 JSP规范定义了三大类元素:脚本元素、指令和动作。使用脚本元素完成网页的各种功能,脚本元素最终会转换为Servlet的代码,指令可以控制Servlet的整体结构,而动作支持重用已有组件。,2023/11/14,服务器端开发技术JSP及JavaBean,7,(1)JSP脚本 JSP脚本提供了JSP动作和模板内容之间的粘合剂。JSP脚本实际上几乎可以使用Java语言提供的全部功能和开发包。因此能够给开发者提供非常灵活的功能来控制页面的显示和逻辑。JSP脚本也分为三类:声明,代码片断和表达式。声明的语法是,代码片断的语法是,表达式的语法式。后面可以看到,这些不同类型的JSP脚本在JSP页面中起不同的作用。,2023/11/14,服务器端开发技术JSP及JavaBean,8,(2)JSP指令 JSP指令为JSP容器解释并执行JSP页面提供需要的信息。指令的作用是和每个单独的HTTP请求无关的。比如我们可以使用指令来引入一些JAVA包,进而使用其中定义的类等。每个HTTP请求都可能会用到这些类。指令的语法是。,2023/11/14,服务器端开发技术JSP及JavaBean,9,(3)JSP动作 JSP动作支持在JSP脚本中动态地插入一个文件、重用JavaBeans组件、前进到另一个页面,或为Java 插件生成一个HTML。JSP动作通常遵循XML中元素的语法,一般来说都有一个包含有元素名称的起始标志,可能还包含有属性设置、一些可选项和一个结束标志。有的元素也仅仅有一个包含属性设置的标志,例如:body,2023/11/14,服务器端开发技术JSP及JavaBean,10,(4)JSP注释 如果想在一个JSP文件中加入注释说明一些逻辑等信息,可以使用如下格式:JSP的注释部分和HTML的注释相似,当在执行的时候JSP引擎将去掉对注释的解释。这就意味着JSP注释并不返回到用户的浏览器中。不象HTML注释被定义在标签之间,JSP注释被定义在之间。,2023/11/14,服务器端开发技术JSP及JavaBean,11,3.实例分析 Welcome Today is Day:Year:,2023/11/14,服务器端开发技术JSP及JavaBean,12,(1)当网页被编译成一个servlet的时候,指令将被JSP引擎处理。在上面的例子中,有如下两个指令:分别为;定义了页面所使用的语言(Java)和所引入的Java包;(2)指定一个将要插入页面底部的HTML文件内容。后面的章节将详细介绍JSP 指令、JSP 动作、JSP 脚本和一些预定义变量的语法和用法。,2023/11/14,服务器端开发技术JSP及JavaBean,13,6.1.3 JSP 脚本 在J S P中,主要的程序部分就是脚本元素,其中包括三个部分:声明(Declaration)、表达式(Expression)和代码(Scriptlet)。从功能上讲,声明用于声明一个或多个变量,表达式将是一个完整的语言表达式,而代码部分将是一些程序片断。三个脚本元素的基本语法都是以一个“”结尾的。,2023/11/14,服务器端开发技术JSP及JavaBean,14,1.声明 J S P中的声明用于声明一个或多个变量和方法,并不输出任何的文本到o u t输出流去。在声明元素中声明的变量和方法将在J S P页面初始化时加以初始化。声明的语法为:实际上,声明变量和方法的语句完全可以放在后面的脚本代码中。放在中的声明语句在JSP编译为Servlet的时候将作为类的属性而存在,而放在脚本代码中的声明将在类的方法内部被声明。,2023/11/14,服务器端开发技术JSP及JavaBean,15,2.表达式 表达式元素表示的是一个在脚本语言中被定义的表达式,J S P中的表达式可以被看作一种简单的输出形式,在运行后被自动转化为字符串,然后插入到这个表达式在JSP文件的位置处而被显示。表达式语法为:举例如下:,2023/11/14,服务器端开发技术JSP及JavaBean,16,3.脚本代码 JSP脚本代码包含一个有效的程序段,脚本代码也被称做scriptlet。它能够包含多个JSP语句、方法、变量和表达式。可以使用脚本完成下列工作:声明将要用到的变量或方法;编写JSP表达式;使用任何隐含的对象和任何用jsp:useBean声明过的对象;编写JSP语句,一般语句要遵从Java 语法规定。任何文本、HTML标记、JSP元素都必须在脚本之外。脚本的语法为:,2023/11/14,服务器端开发技术JSP及JavaBean,17,6.1.4 JSP预定义变量 JSP提供了8种预定义的变量.它们是request,response,out,session,application,config,pageContext和page。1.out out对象是javax.servlet.jsp.JspWriter类的一个子类的对象,它的作用是把信息回送到客户端的浏览器中。在out对象中,最常用的方法就是print()和println()。在使用print()或println()方法时,由于客户端是浏览器,因此向客户端输出时,可以使用HTML中的一些标记,例如:“out.println(”Hello,JSP“);”其他一些常用的方法是:out.write功能和out.print相同,newLine()的功能是输出一个换行符,out.flush()的功能是输出缓冲的内容。out.close()的功能是关闭输出流。out对象的生命周期是当前页面。因此对于每一个JSP页面,都有一个out对象,2023/11/14,服务器端开发技术JSP及JavaBean,18,下例简单地使用out对象把系统时间输入到浏览器上。out对象使用实例);out.print(out输出成功);%,2023/11/14,服务器端开发技术JSP及JavaBean,19,2.request request类似于Servlet中的HttpServletRequest类,通过它得到request的参数(通过getParameter方法)、request 的类型(GET,POST,HEAD,等等),以及引入的HTTP头(cookies,Referer,等等)。,2023/11/14,服务器端开发技术JSP及JavaBean,20,(1)setAttribute与getAttribute方法实例 下面的mainreq.jsp包含了import.jsp文件。mainreq.jsp 你刚才输入的内容是:import.jsp request对象使用实例,2023/11/14,服务器端开发技术JSP及JavaBean,21,(2)getParameter方法实例 如下两个JSP文件演示了如何使用getParameter方法。getParameterMain1.jsp的主要功能是显示Form,通过Form提交参数student、city和enjoy,点击提交后调用submit.jsp。而submit.jsp文件使用getParameter方法。通过它指定参数名字,读取特定的参数,并在浏览器屏幕上显示。,2023/11/14,服务器端开发技术JSP及JavaBean,22,getParameterMain1.jsp getParameter()方法使用实例,submit.jsp 你刚才输入的内容是:当点击按钮提交后,显示下边内容,2023/11/14,服务器端开发技术JSP及JavaBean,23,(3)getParameterName和getRemoteAddr方法实例 有时候为了获取不知道参数的名字,需要使用getParameterName获得所有参数的名字,然后再使用获得的名字去取得参数的值。下面的两个JSP文件演示了如何使用getParameterName方法。,2023/11/14,服务器端开发技术JSP及JavaBean,24,getParameterNameMain1.jsp getParameterName()方法使用实例,submit1.jsp 刚才输入的参数名及值如下:);%你的IP地址是:,2023/11/14,服务器端开发技术JSP及JavaBean,25,Enumeration是java.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法。在Enumeration中提供了方法hasMoreElement()来判断集合中是束还有其它元素;方法nextElement()来获取下一个元素。利用这两个方法可以依次获得集合中元素。,2023/11/14,服务器端开发技术JSP及JavaBean,26,3.response response对象可以用于在JSP给浏览器响应的时候设置与响应相关的参数,比如使用response对象的setHeader方法可以设置各种响应头属性,其中refresh属性可以设施页面自动刷新。下例(responsesetHeader.jsp)每隔2秒自动刷新浏览器,并显示当前系统时间。responsesetHeader.jsp的代码如下:setHeader刷新页面实例,2023/11/14,服务器端开发技术JSP及JavaBean,27,4.session 在Servlet一章中我们知道当用户访问网站,系统将为他生成一个独一无二的Session对象,用以记录该用户的个人信息,一旦该用户退出网站,那么该Session对象将会注销。Session对象可以绑定若干个人信息或者Java对象,不同Session对象的同名变量是不会相互干扰的。在JSP中我们可以直接使用该对象。,2023/11/14,服务器端开发技术JSP及JavaBean,28,我们只通过例子来看如何使用该对象保存属性和值对,使得同一个用户的一次会话的不同页面之间可以共享这些属性和值。该例涉及3个页面,分别是主页面:SessionMain.jsp转向页面1:SessionSub1.jsp转向页面2:SessionSub2.jsp具体执行过程及解释如下:执行SessionMain.jspSessionMain.jsp会把两个属性和值(username和password)保存到session中。执行SessionSub1.jsp点击链接后从SessionMain.jsp转向SessionSub1.jsp页面,该页面执行时会读出SessionMain.jsp保存的属性的值(username和password),并显示在屏幕上。该页面读取并在浏览器上显示了一些会话相关的数据,最后删除属性username。执行SessionSub2.jsp点击SessionSub1.jsp页面包含的链接(指向第三页)后转向SessionSub2.jsp页面,SessionSub2.jsp页面会尝试从session中读取属性username和password,结果是由于SessionSub1.jsp页面删除了属性username,所以username读出null,而只能读出password属性,在浏览器会显示null及口令1234。,2023/11/14,服务器端开发技术JSP及JavaBean,29,SessionMain.jsp Session主页面 指向第二页SessionSub1.jsp,SessionSub1.jsp Session转向页面1);for(int i=0;i);%指向第三页SessionSub2.jsp,2023/11/14,服务器端开发技术JSP及JavaBean,30,SessionSub2.jsp Session转向页面2,2023/11/14,服务器端开发技术JSP及JavaBean,31,5.application Application对象由服务器来创建和加以清除,在JSP服务器运行时刻,仅有一个Application为众多用户请求共享。用户不能创建和清除Application对象,而只能获得这个Appliation对象去使用它。Application对象的setAttribute(),getAttribute()和removeAttribute()方法可以将相关的属性和值保存到该对象和从该对象中取出。下例(appAtt.jsp)展示了如何使用这些方法。该例把用户名和口令这两个变量作为属性,先使用setAttribute方法将它们保存到Applicationd对象中,然后又使用getAttribute方法从中取出并显示将其到页面上。在这之后,使用removeAttribute方法删除属性password,然后再去获得password属性的值,由于已经删除,所有结果都只返回null。,2023/11/14,服务器端开发技术JSP及JavaBean,32,appAtt.jsp:Application对象方法实例);out.println(application.getAttribute(password)+);application.removeAttribute(password);out.println(application.getAttribute(password)+);%,2023/11/14,服务器端开发技术JSP及JavaBean,33,另一个方法getAttributeNames()将当前Application对象中保存的所有的属性的名字都取出来。这个方法也很有用,下面给出一个例子(getAttName.jsp)Application对象方法实例);%,2023/11/14,服务器端开发技术JSP及JavaBean,34,6.1.5 JSP 指令 指令分为三种page,include和taglib,其样式如下:1.page指令 page指令描述了和页面相关的指示信息,定义了JSP文件中的全局属性。在一个JSP页面中,page指令可以出现多次,但是每一种属性却只能出现一次,发生重复的属性设置时,后面的设置将覆盖掉先前的设置。,2023/11/14,服务器端开发技术JSP及JavaBean,35,下面是常用的page指令例子:(引用Java语言的类库)注意:page 指令作用于整个JSP页面,同样包括静态的包含文件。但是page 指令不能作用于动态的包含文件,比如jsp:include。page指令作用范围是整个JSP页面,无论放在JSP的文件的哪个地方,一般都是放在JSP文件的顶部。,2023/11/14,服务器端开发技术JSP及JavaBean,36,2.Taglib指令 Taglib指令描述了扩展的标签库信息。JSP容器能够理解并处理的元素除了JSP规范定义的标准元素之外,还可以通过标签扩展接口来进行扩展。对于每个扩展的元素(通常称其为定制标签),需要通过Taglib指令来把其定义信息告知JSP容器。Taglib指令的语法是:,2023/11/14,服务器端开发技术JSP及JavaBean,37,3.Include指令 编译时“被包含文件”的内容将插入当前位置,同当前文件的其它内容一起编译。Ex6_8.jsp ex6-8answer.jsp,2023/11/14,服务器端开发技术JSP及JavaBean,38,6.1.6 JSP 动作 JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面和为Java插件生成HTML代码。1.JSP标准动作及其属性 JSP标准动作包括:jsp:include:在页面被请求的时候引入一个文件。jsp:useBean:寻找或者实例化一个JavaBean。jsp:setProperty:设置JavaBean的属性。jsp:getProperty:输出某个JavaBean的属性。jsp:forward:把请求转到一个新的页面。jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。,2023/11/14,服务器端开发技术JSP及JavaBean,39,一般这些动作都具有一些描述自己的属性,其中i d属性和scope属性是每一个JSP动作都具有的属性。i d表示一个动作的名称,而scope则表示一个动作的作用域。scope作用域的取值见 下表。,2023/11/14,服务器端开发技术JSP及JavaBean,40,2.动作 可能是JSP中最重要的一个动作,通过使用这个动作,JSP可以动态地使用JavaBean组件来扩充JSP的功能,由于JavaBean在开发上及在使用上的简单明了,使得JSP的开发过程和以往其他动态网页开发工具有了本质上的区别。尽管ASP等动态网页技术也可以使用组件技术,但是由于ActiveX控件编写上的复杂和使用上的不方便,实际的开发工作中组件技术使用得并不多。,2023/11/14,服务器端开发技术JSP及JavaBean,41,的语法如下:typeSpec:=class=className|class=className type=typeName|type=typeName class=className|beanName=beanName type=typeName|type=typeName beanName=beanName|type=typeName如果在中需要加入其他的元素,那么使用下面的语法:body下面给出几个例子:/JSP:useBean,2023/11/14,服务器端开发技术JSP及JavaBean,42,3.动作 动作用于向一个JavaBean的属性赋值,需要注意的是,在这个动作中将会使用到的name属性的值将是一个前面已经使用动作引入的JavaBean的名字。的语法如下:prop_expr:=property=*|property=propertyName|property=propertyName param=parameterName|property=propertyName value=propertyValuepropertyValue:=string下面就动作举几个例子:将ServletRequest对象request中的参数全部输入到名为request的JavaBean中:将ServletRequest对象user中的参数username输入到名为user的JavaBean中:,2023/11/14,服务器端开发技术JSP及JavaBean,43,4.动作 动作用于从一个JavaBean中得到某个属性的值,无论原先这个属性是什么类型的,都将被转换为一个String类型的值。jsp:getProperty有两个必需的属性:name(表示Bean的名字)和property(表示要提取哪个属性的值)。其语法如下:例如:,2023/11/14,服务器端开发技术JSP及JavaBean,44,5.动作 用于引入一个静态或动态的页面到一个JSP文件中。动作可以包含一个或几个子动作用于向要引入的页面传递参数。其语法如下:或,2023/11/14,服务器端开发技术JSP及JavaBean,45,Include操作 可以传递参数到被包含的文件中,参数传递可省略用于在当前的JSP页面中加入静态和动态的资源。功能和include指令相同。(注意:jsp:include是在页面被请求时将文件包含进来,而include指令是在页面被编译时就将文件包含进来。)Ex6_9.jsp,2023/11/14,服务器端开发技术JSP及JavaBean,46,forward操作 可以传递参数到转发到的文件中,参数可以省略操作指令用于把当前的JSP页面转发到另一个页面上。使用该功能时,浏览器的地址栏中地址不会发生任何变化。Ex6_11.jsp,2023/11/14,服务器端开发技术JSP及JavaBean,47,7.动作 实际上提供了名称与值的一种一一对应关系,在、和中常常作为子动作使用。其语法为:8.动作 jsp:plugin动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。,2023/11/14,服务器端开发技术JSP及JavaBean,48,plugin操作 Ex6_12.jsp,2023/11/14,服务器端开发技术JSP及JavaBean,49,6.1.7 JSP连接数据库 在实际开发应用的时候,经常需要访问数据库。通过JSP可以直接访问数据库,对于大型应用,这不是特别好的方法。但是对于有些应用,直接在JSP中访问数据库将使开发非常简单。访问数据库的时候,一定将JDBC的驱动程序放到服务器的类路径里。下面给出使用JSP访问MySQL数据库的例子,这个例子要求在数据库里建一个表student,有两个字段比如为name,city,可以用create table student(name varchar(20),city varchar(20)语句建立表,然后向这个表写入一条测试纪录。注意先将MySQL数据库的JDBC驱动程序(比如mysql-connector-java-3.0.9-stable-bin.jar)放到resin安装目录下的lib目录下,然后就可以编写JSP访问数据库了。,2023/11/14,服务器端开发技术JSP及JavaBean,50,访问数据库里面的数据表的程序代码如下:(文件名为mysql.jsp)。);while(rs.next()out.print(rs.getString(1)+);out.print(|);out.print(rs.getString(2);out.print();out.print();out.print(共+numColumns+条记录);rs.close();statement.close();connection.close();%,2023/11/14,服务器端开发技术JSP及JavaBean,51,第六章.服务器端开发技术JSP及JavaBean,第一节.JSP第二节.JavaBean第三节.JSP、JavaBean及Servlet组合开发第四节.开发框架、模式介绍,2023/11/14,服务器端开发技术JSP及JavaBean,52,第二节 JavaBean,1.JavaBean概述(1)JavaBean的作用 在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从JSP诞生后,JavaBean更多的应用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。下面主要讨论的是非可视化的JavaBean。非可视化的JavaBean,顾名思义就是没有GUI界面的JavaBean。在JSP程序中常用来封装事务逻辑、数据库操作等等,可以很好地实现业务逻辑和前台程序(如JSP文件)的分离,使得系统具有更好的健壮性和灵活性。,2023/11/14,服务器端开发技术JSP及JavaBean,53,(2)JavaBean应遵守的规定 本质上JavaBean是一个Java类,只不过JavaBean在书写的时候要遵守一些约定(JavaBean规范)。下面是JavaBean必须遵守的:一个javaBean类必须是一个公共类 一个javaBean类必须有一个空的构造函数 一个javaBean类不应有公共实例变量 持有值应该通过一组存取方法(getXxx和setXxx)来访问,2023/11/14,服务器端开发技术JSP及JavaBean,54,2.税率设置和读取的JavaBean示例(1)TaxRate.java 该示例创建了一个名为 TaxRate 的 Bean。它有两个属性,即 Product(产品)和 Rate(税率)。两个 set 方法分别用来设置这两个属性,两个 get 方法则用于提取这两个属性。在实际应用中,这种 Bean 一般应当从数据库提取税率值,此处我们简化了这个过程,允许任意设定税率。下面是这个 Bean 的代码(TaxRate.java)清单:public class TaxRate String Product;double Rate;public TaxRate()this.Product=car;this.Rate=15;public void setProduct(String ProductName)this.Product=ProductName;public String getProduct()return(this.Product);public void setRate(double rateValue)this.Rate=rateValue;public double getRate()return(this.Rate);,2023/11/14,服务器端开发技术JSP及JavaBean,55,(2)JSP 示例页面 在 JSP 页面中应用上述 Bean 要用到 标记。依赖于具体使用的 JSP 引擎的不同,在何处配置以及如何配置 Bean 的方法也可能略有不同。下面是一个应用上述 Bean 的示例页面:提取 Bean 属性值使用方法 1:产品:税率:提取 Bean 属性值使用方法 2:产品:税率:上例使用 标记内的属性id 定义了整个 JSP 页面内该 Bean 的标识taxbean,scope 属性定义了该 Bean 的生存时间,class 属性说明了实现该Bean的类文件全名)。这个 JSP 页面用两种方法提取taxbean的属性值,使用set 和 get 方法设置和提取属性值;使用 标记。中的 name 属性的值即为 中定义的 Bean 的 id属性值taxbean,它的 property 属性指定的是目标属性的名字(比如Product或者Rate)。,2023/11/14,服务器端开发技术JSP及JavaBean,56,JSP页面中使用JavaBean的方法有两种:1、通过useBean,setProperty或getProperty指令设置和使用 2、使用page指令的 import属性引入JavaBean类,在JSP代码中声明JavaBean对象来使用。HelloWord.java HelloWord.jsp HelloWord1.jsp,2023/11/14,服务器端开发技术JSP及JavaBean,57,3.注册个人信息的JavaBean示例 这个例子中包含1个HTML页面(register.html),1个JSP页面,2个JavaBean,通过HTML页面输入用户注册信息,提交到JSP页面,JSP页面里面使用了2个JavaBean,1个用于获取HTML页面提交的信息,另外一个JavaBean将注册信息提交到数据库。该例子使用Mysql数据库,要求在数据库里建一个表Person,可以用create table person(name varchar(20),sex varchar(8),birthday varchar(10),email varchar(30)语句建立表。访问数据库的时候,一定将JDBC的驱动程序放到服务器的类路径里。每执行一次新用户注册,数据表表Person就会多一条新记录。该例子包括四个文件:register.html负责显示个人信息编辑页面register.jsp 注册提交的处理页面UserRegister.java 负责储存个人信息到数据库Person.java做为JavaBean接收register.html输入的个人 信息,并传递给UserRegister JavaBean处理.,2023/11/14,服务器端开发技术JSP及JavaBean,58,register.htm:名字性别男 女出生日期电子邮箱,register.jsp:,2023/11/14,服务器端开发技术JSP及JavaBean,59,Person.java:public class Person private String name;private String sex;private String birthday;private String email;public Person()public void setName(String name)this.name=name;public void setSex(String sex)this.sex=sex;public void setBirthday(String birthday)this.birthday=birthday;public void setEmail(String email)this.email=email;public String getName()return name;public String getSex()return sex;public String getBirthday()return birthday;public String getEmail()return this.email;,UserRegister.java:import java.sql.*;public class UserRegister private Person person;private Connection con;public UserRegister()throws Exception String driverName=com.mysql.jdbc.Driver;String userName=root;String userPasswd=;/密码 String dbName=test;/数据库名 String tableName=student;/表名/连接字符串如下 String url=jdbc:mysql:/localhost:3306/+dbName+?user=+userName+,2023/11/14,服务器端开发技术JSP及JavaBean,60,第六章.服务器端开发技术-JSP及JavaBean,第一节.JSP第二节.JavaBean第三节.JSP、JavaBean及Servlet组合开发第四节.开发框架、模式介绍,2023/11/14,服务器端开发技术JSP及JavaBean,61,第三节 JSP、JavaBean及Servlet组合开发,1.JSP+JDBC模式 在JSP中可以直接使用JDBC去访问数据库,取得数据后可以进行处理进而完成业务逻辑。在这种情况下,浏览器直接访问一个JSP页面,这个JSP页面处理请求(可能通过JDBC访问数据库)并生成动态内容,然后和模板数据一起生成一个标准HTML文本并发回给浏览器显示。,2023/11/14,服务器端开发技术JSP及JavaBean,62,2.Servlet+JSP+JavaBean模式 Servlet、JSP结合JavaBean的开发模式也是常用的开发模式,使用这种模式,我们就能够实现业务逻辑和页面显示的分离,并创建复用程度更高的组件。这样模式的工作原理如下图所示:,2023/11/14,服务器端开发技术JSP及JavaBean,63,3.综合开发示例(1)注册个人信息实例概述 这个例子先访问一个注册HTML页面,点击提交按钮后调用一个Servlet,Servlet可以进行注册用户逻辑处理(比如保存到数据库,数据库操作代码省略),将处理结果放置在一个JavaBean中,然后请求转发给JSP,JSP根据JavaBean的内容生成HTML文本,发送给浏览器显示。这个例子实现一个常见的注册个人信息的功能。它包括四个文件:register.html负责显示个人信息编辑页面registerConfirm.jsp 负责显示个人信息确认页面Person.Java做为JavaBean在Servlet和JSP之间传递信息RegisterServlet.Java负责储存个人信息并转发请求,2023/11/14,服务器端开发技术JSP及JavaBean,64,register.html:名字性别男 女出生日期电子邮箱,RegisterServlet.Java:import Javax.Servlet.http.*;public class RegisterServlet extends HttpServlet public void doPost(HttpServletRequest request,HttpServletResponse response)try String name=request.getParameter(name);String sex=request.getParameter(sex);String birthday=request.getParameter(birthday);String email=request.getParameter(email);/组建一个Person JavaBean Person person=new Person();person.setName(name);person.setSex(sex);person.setBirthday(birthday);person.setEmail(email);/调用savePerson()方法将Person存储到数据库中 savePerson(person);/回显注册信息到页面上 request.setAttribute(person,person);/转发请求到确认页面 getServletConfig().getServletContext().getRequestDispatcher(/registerConfirm.jsp).forward(request,resp