《电子商务的应用开发技术》-第6章_第1页
《电子商务的应用开发技术》-第6章_第2页
《电子商务的应用开发技术》-第6章_第3页
《电子商务的应用开发技术》-第6章_第4页
《电子商务的应用开发技术》-第6章_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章.服务器端开发技术JSP及JavaBean对外经济贸易大学信息学院第六章.服务器端开发技术JSP及JavaBean第一节.JSP第二节.JavaBean第三节.JSP、JavaBean及Servlet组合开发第四节.开发框架、模式介绍第一节 JSP1. JSP概述 JSP是SUN公司推出的一种新型的Web开发语言,和其他开发语言相 比,JSP有以下显著的优点:运行效率较高且功能强 JSP页面在第一次被访问时,JSP容器会将其转换成一个等价的Servlet类,并且放置在工作目录中,以后所有对该JSP页面的访问都会由该Servlet类来处理,不再需要对JSP的解析。因此,在某种意义上可以说,

2、在“运行时”JSP在效率上和功能上都等同于一个Servlet,这也使得JSP具有Servlet所提供的效率和功能等所有好处。动态内容和静态内容的分离 典型的JSP文件的内容看上去就像一个HTML页面,事实上甚至可以把一个HTML格式的文件简单的改名为后缀为JSP的文件(JSP文件的扩展名为JSP),就可以直接在JSP容器中运行了。所不同的是,JSP页面通常还会包括其他的一些由JSP规范定义的称为元素的部分,用于表达逻辑和显示动态内容。这些元素和纯HTML代码自由的融合在一起,但是又能在外观上截然分开。这种做法使得JSP页面的结构相对较为清晰,能同时为开发人员和网页设计人员理解。 组件重用 软件

3、设计时的重用性是非常重要的,JSP特别考虑到已有组件的重用,在JSP中的组件重用主要是通过JavaBean组件、Enterprise JavaBean组件和定制化标签来实现的。这些组件可以由第三方开发,并且可以和开发工具结合起来实现快速开发。2. JSP元素开发基础 (1) JSP元素的基本概念 元素就是由JSP规范定义的,JSP容器能够理解并处理的部分,除了元素之外所有其他的内容,即JSP容器不能理解的则统称为模板。元素有不同的类型,类型的定义描述了元素语法和语义。例如,如果元素拥有属性,类型定义就需要描述属性的名字、属性值的类型和属性的意义等等。(2) JSP元素的类型 JSP规范定义了三

4、大类元素:脚本元素、指令和动作。使用脚本元素完成网页的各种功能,脚本元素最终会转换为Servlet的代码,指令可以控制Servlet的整体结构,而动作支持重用已有组件。为了简化书写和快速开发,JSP也定义了一些预定义的变量以方便使用,如request变量使得开发者可以得到客户端(一般是浏览器)请求传递过来的参数等。 JSP脚本 JSP脚本提供了JSP动作和模板内容之间的粘合剂。JSP脚本实际上几乎可以使用Java语言提供的全部功能和开发包。因此能够给开发者提供非常灵活的功能来控制页面的显示和逻辑。JSP脚本也分为三类:声明,代码片断和表达式。声明的语法是,代码片断的语法是,表达式的语法式。后面

5、可以看到,这些不同类型的JSP脚本在JSP页面中起不同的作用。JSP指令 JSP指令为JSP容器解释并执行JSP页面提供需要的信息。指令的作用是和每个单独的HTTP请求无关的。比如我们可以使用指令来引入一些JAVA包,进而使用其中定义的类等。每个HTTP请求都可能会用到这些类。指令的语法是。JSP动作 JSP动作支持在JSP脚本中动态地插入一个文件、重用JavaBeans组件、前进到另一个页面,或为Java 插件生成一个HTML。JSP动作通常遵循XML中元素的语法,一般来说都有一个包含有元素名称的起始标志,可能还包含有属性设置、一些可选项和一个结束标志。有的元素也仅仅有一个包含属性设置的标志

6、,例如: body JSP注释 如果想在一个JSP文件中加入注释说明一些逻辑等信息,可以使用如下格式: JSP的注释部分和HTML的注释相似,当在执行的时候JSP引擎将去掉对注释的解释。这就意味着JSP注释并不返回到用户的浏览器中。不象HTML注释被定义在标签之间,JSP注释被定义在之间。 (3)实例分析 下面给出一个JSP(Welcome.jsp)网页的简单例子,该例使用了前面介绍的一些元素。在这个JSP网页中包含了静态HTML内容和从JavaBean生成的动态数据。当用户访问这个网页的时候,它可以显示当前的日期,并根据当前的时间增加相应的问候语(例如“早上好”和“下午好”)。这里只关注和示

7、意了JSP的结构和包含的各种元素,具体含义和语法暂时不用关注。该例子不能正常运转,因为里面用到了一个JavaBean,但是没有提供JavaBean的类。 Welcome Today is Day: Year: 早上好 下午好 在上面的例子中,HTML中嵌入了JSP脚本。其中jsp:useBean 动作初始化了一个JavaBean,JavaBean将在网页的后面部分被用到: 当网页被编译成一个servlet的时候,指令将被JSP引擎处理。在上面的例子中,有如下两个指令:分别为; 定义了页面所使用的语言(Java)和所引入的Java包 指定一个将要插入页面底部的HTML文件内容“int”声明并给出

8、了一个当前时间的相应值 (AM 或 PM): 另外,在上面的例子中,表达式将调用JavaBean组件并在页面中插入结果数据: Scriptlet将作为一个Java代码块植入JSP页面中。Scriptlet代码被一一插入由页面所产生的servlet中,它被定义在之间。上面例子中的scriptlet可以根据当前用户产生相应的时间和问候语: 早上好 下午好 最后: 是注释。后面的章节将详细介绍JSP 指令、JSP 动作、JSP 脚本和一些预定义变量的语法和用法。 3.JSP 脚本 在J S P中,主要的程序部分就是脚本元素,其中包括三个部分:声明(Declaration)、表达式(Expressio

9、n)和代码(Scriptlet)。从功能上讲,声明用于声明一个或多个变量,表达式将是一个完整的语言表达式,而代码部分将是一些程序片断。三个脚本元素的基本语法都是以一个“ ”结尾的。下面分别给出三种脚本的简单示例。 声明 J S P中的声明用于声明一个或多个变量和方法,并不输出任何的文本到o u t输出流去。在声明元素中声明的变量和方法将在J S P页面初始化时加以初始化。声明的语法为:举例如下: %! public String f(int i) if (i实际上,声明变量和方法的语句完全可以放在后面的脚本代码中,两者有什么不一样呢?放在中的声明语句在JSP编译为Servlet的时候将作为类的

10、属性而存在,而放在脚本代码中的声明将在类的方法内部被声明。 表达式 表达式元素表示的是一个在脚本语言中被定义的表达式,J S P中的表达式可以被看作一种简单的输出形式,在运行后被自动转化为字符串,然后插入到这个表达式在JSP文件的位置处而被显示。表达式语法为:举例如下: 脚本代码 JSP脚本代码包含一个有效的程序段, 脚本代码也被称做scriptlet。它能够包含多个JSP语句、方法、变量和表达式。可以使用脚本完成下列工作: 声明将要用到的变量或方法 编写JSP表达式 使用任何隐含的对象和任何用jsp:useBean声明过的对象 编写JSP语句,一般语句要遵从Java 语法规定任何文本、HTM

11、L标记、JSP元素都必须在脚本之外。 当JSP收到客户的请求时,脚本就会被执行,如果脚本有显示的内容,这些显示的内容就被存在out对象(参见JSP预定义变量章节)中,进而输出给用户。脚本的语法为: 4. JSP预定义变量 JSP提供了8种预定义的变量.它们是request,response,out,session,application, config,pageContext和page.这里主要介绍前5个,因为相对来说它们更重要些。 (1) out out对象主要用来向浏览器(客户端)输出各种格式的数据,并且管理应用服务器上的输出缓冲区,out.println(DataType)和out.pr

12、int(DataType)是两个主要的输出方法,它们的区别在于println输出后换行,print输出后不换行。下例简单地使用out对象把系统时间输入到浏览器上。 out对象使用实例 % out.println(new Date().toLocaleString(); out.print(); out.print(out输出成功); % (2) request request类似于Servlet中的HttpServletRequest类,通过它得到request的参数(通过getParameter方法)、request 的类型(GET,POST,HEAD,等等),以及引入的HTTP头(cook

13、ies,Referer,等等)。 它们的主要方法如下:setAttribute/getAttribute根据名字设置/获得属性getParameter根据名字得到参数的值getParameterName 获取所有参数的名字列表getRemoteAddr 得到客户端(浏览器)的IP地址getAttributeName 获取所有属性的名字列表 setAttribute与getAttribute方法实例 下面的mainreq.jsp包含了import.jsp文件,先执行import.jsp,在 import.jsp中设置了属性friend的值为Tom,在这之后mainreq.jsp的被执行,浏览器上

14、显示出friend的值为设置的Tom。mainreq.jsp 你刚才输入的内容是: import.jsp request对象使用实例 getParameter方法实例 如下两个JSP文件演示了如何使用getParameter方法。getParameterMain1.jsp的主要功能是显示Form,通过Form提交参数student、city和enjoy,点击提交后调用submit.jsp。而submit.jsp文件使用getParameter方法。通过它指定参数名字,读取特定的参数,并在浏览器屏幕上显示。 getParameterMain1.jsp getParameter()方法使用实例 s

15、ubmit.jsp 你刚才输入的内容是: 当点击按钮提交后,显示下边内容 getParameterName和getRemoteAddr方法实例 有时候为了获取不知道参数的名字,需要使用getParameterName获得所有参数的名字,然后再使用获得的名字去取得参数的值。下面的两个JSP文件演示了如何使用getParameterName方法。 getParameterNameMain1.jsp主要功能是显示Form,通过Form提交参数student、city和enjoy,点击提交后调用submit1.jsp。而submit1.jsp文件使用getParameterName方法获取所有参数的名

16、字(多个参数名字都放到Enumeration类型的对象中),通过遍历Enumeration类型的对象拿到每个名字,并利用名字作为参数调用getParameter方法取得该参数的值,进而在浏览器屏幕上显示该参数。显示所有参数后,同时调用getRemoteAddr方法显示客户端的IP地址。 getParameterNameMain1.jsp getParameterName()方法使用实例 submit1.jsp 刚才输入的参数名及值如下:%Enumeration e=request.getParameterNames(); while(e.hasMoreElements() String par

17、ameterName=(String)e.nextElement(); String parameterValue=(String)request.getParameter(parameterName); out.print(参数名称:+parameterName+ ); out.print(参数内容:+parameterValue+);%你的IP地址是: (3) response response对象可以用于在JSP给浏览器响应的时候设置与响应相关的参数,比如使用response对象的setHeader方法可以设置各种响应头属性,其中refresh属性可以设施页面自动刷新。下例(respon

18、sesetHeader.jsp)每隔2秒自动刷新浏览器,并显示当前系统时间。 responsesetHeader.jsp的代码如下: setHeader刷新页面实例 (4) session 在Servlet一章中我们知道当用户访问网站,系统将为他生成一个独一无二的Session对象,用以记录该用户的个人信息 ,一旦该用户退出网站,那么该Session对象将会注销。Session对象可以绑定若干个人信息或者Java对象,不同Session对象的同名变量是不会相互干扰的。在JSP中我们可以直接使用该对象。 该对象常用的方法包含getValue(String name)、putValue(Strin

19、g name)、removeValue(String name)、getValueNames() 、getCreationTime()、getId()、getLastAccessedTime()、getMaxInactiveInterval()、 setMaxInactiveInterval()等。相关的方法和含义基本与Servlet中讲述过的HttpSession类似,这里略去细节。 我们只通过例子来看如何使用该对象保存属性和值对,使得同一个用户的一次会话的不同页面之间可以共享这些属性和值。该例涉及3个页面,分别是主页面: SessionMain.jsp转向页面1:SessionSub1.j

20、sp转向页面2:SessionSub2.jsp具体执行过程及解释如下: 执行SessionMain.jspSessionMain.jsp会把两个属性和值(username和password)保存到session中。 执行SessionSub1.jsp点击链接后从SessionMain.jsp转向SessionSub1.jsp页面,该页面执行时会读出SessionMain.jsp保存的属性的值(username和password),并显示在屏幕上。该页面读取并在浏览器上显示了一些会话相关的数据,最后删除属性username。 执行SessionSub2.jsp点击SessionSub1.jsp页

21、面包含的链接(指向第三页)后转向SessionSub2.jsp页面,SessionSub2.jsp页面会尝试从session中读取属性username和password,结果是由于SessionSub1.jsp页面删除了属性username,所以username读出null,而只能读出password属性,在浏览器会显示null及口令1234。 SessionMain.jsp Session主页面 指向第二页SessionSub1.jsp SessionSub1.jsp Session转向页面1 BR % String name=session.getValueNames(); out.pri

22、ntln(+); for(int i=0;iname.length;i+) out.println(session.getValue(namei)+); % 指向第三页SessionSub2.jsp SessionSub2.jsp Session转向页面2 (5) application Application对象由服务器来创建和加以清除,在JSP服务器运行时刻,仅有一个Application为众多用户请求共享。用户不能创建和清除Application对象,而只能获得这个Appliation对象去使用它。 Application对象的setAttribute(),getAttribute()和

23、removeAttribute()方法可以将相关的属性和值保存到该对象和从该对象中取出。 下例(appAtt.jsp)展示了如何使用这些方法。该例把用户名和口令这两个变量作为属性,先使用setAttribute方法将它们保存到Applicationd对象中,然后又使用getAttribute方法从中取出并显示将其到页面上。在这之后,使用removeAttribute方法删除属性password,然后再去获得password属性的值,由于已经删除,所有结果都只返回null。 appAtt.jsp: Application对象方法实例 % String username=rossini; Stri

24、ng password=126263; application.setAttribute(username,username); application.setAttribute(password,password); out.println(application.getAttribute(username)+); out.println(application.getAttribute(password)+); application.removeAttribute(password); out.println(application.getAttribute(password)+); %

25、 另一个方法getAttributeNames()将当前Application对象中保存的所有的属性的名字都取出来。这个方法也很有用,下面给出一个例子(getAttName.jsp) Application对象方法实例 % String username=rossini; String password=126263; application.setAttribute(username,username); application.setAttribute(password,password); Enumeration enum=application.getAttributeNames();

26、 while(enum.hasMoreElements() String attrName=(String)enum.nextElement(); out.println(attrName+application.getAttribute(attrName)+); % 5. JSP 指令 指令分为三种page, include和taglib,其样式如下: (1) page指令 page指令描述了和页面相关的指示信息,定义了JSP文件中的全局属性。在一个JSP页面中, page指令可以出现多次,但是每一种属性却只能出现一次,发生重复的属性设置时,后面的设置将覆盖掉先前的设置。 page指令的基本

27、语法格式如下: 下面是常用的page指令例子: (引用Java语言的类库) 注意:page 指令作用于整个JSP页面,同样包括静态的包含文件。但是page 指令不能作用于动态的包含文件,比如jsp:include。page指令作用范围是整个JSP页面,无论放在JSP的文件的哪个地方,一般都是放在JSP文件的顶部。 (2) Taglib指令 Taglib指令描述了扩展的标签库信息。JSP容器能够理解并处理的元素除了JSP规范定义的标准元素之外,还可以通过标签扩展接口来进行扩展。对于每个扩展的元素(通常称其为定制标签),需要通过Taglib指令来把其定义信息告知JSP容器。Taglib指令的语法是

28、: 其中: URI描述这个标签库位置的U R L,可以是相对路径或绝对路径。t a g P r e f i x 定义了一个指示使用此标签库的前缀,例如将t a g P r e f i x设为m y P r e f i x时,可以使用下面的语句来使用此标签库中的m y Ta g标签: (3) Include指令 Include指令的作用是包含另一个文件, 其语法相当简单: 其中relativeURLspec是要包含的文件的相对路径。 6. JSP 动作 JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外

29、的页面和为Java插件生成HTML代码。 (1) JSP标准动作及其属性 JSP标准动作包括: jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。 一般这些动作都具有一些描述自己的属性,其中i d属性和scope属性是每一个JSP动作都具有的属性。i d表示一个动作的

30、名称,而scope则表示一个动作的作用域。scope作用域的取值见 下表。 (2) 动作 可能是JSP中最重要的一个动作,通过使用这个动作,JSP可以动态地使用JavaBean组件来扩充JSP的功能,由于JavaBean在开发上及在使用上的简单明了,使得JSP的开发过程和以往其他动态网页开发工具有了本质上的区别。尽管ASP等动态网页技术也可以使用组件技术,但是由于ActiveX控件编写上的复杂和使用上的不方便,实际的开发工作中组件技术使用得并不多。 的语法如下:typeSpec := class= className |class= className type= typeName |type

31、= typeName class= className |beanName= beanName type= typeName |type= typeName beanName= beanName |type= typeName如果在中需要加入其他的元素,那么使用下面的语法:body下面给出几个例子:/JSP:useBean (3) 动作 动作用于向一个JavaBean的属性赋值,需要注意的是,在这个动作中将会使用到的name属性的值将是一个前面已经使用动作引入的JavaBean的名字。的语法如下:prop_expr := property=* |property= propertyName|p

32、roperty= propertyName param= parameterName|property= propertyName value= propertyValuepropertyValue := string下面就动作举几个例子:将ServletRequest对象request中的参数全部输入到名为request的JavaBean中:将ServletRequest对象user中的参数username输入到名为user的JavaBean中: (4) 动作 动作用于从一个JavaBean中得到某个属性的值,无论原先这个属性是什么类型的,都将被转换为一个String类型的值。jsp:get

33、Property有两个必需的属性:name(表示Bean的名字)和property(表示要提取哪个属性的值)。其语法如下:例如: (6) 动作 用于引入一个静态或动态的页面到一个JSP文件中。动作可以包含一个或几个子动作用于向要引入的页面传递参数。 其语法如下:或 (6) 动作 用于引导客户端的请求到另一个页面或者是另一个Servlet去。动作可以包含一个或几个子动作,用于向要引导进入的页面传递参数。下面是的语法:或 * 举例如下:JSP:forward page= /(7) 动作 实际上提供了名称与值的一种一一对应关系,在、和中常常作为子动作使用。其语法为: (8) 动作 jsp:plugi

34、n动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。 7. JSP连接数据库 在实际开发应用的时候,经常需要访问数据库。通过JSP可以直接访问数据库,对于大型应用,这不是特别好的方法。但是对于有些应用,直接在JSP中访问数据库将使开发非常简单。 访问数据库的时候,一定将JDBC的驱动程序放到服务器的类路径里。下面给出使用JSP访问MySQL数据库的例子,这个例子要求在数据库里建一个表student,有两个字段比如为name,city,可以用create table student(name varchar(20), city var

35、char(20) 语句建立表,然后向这个表写入一条测试纪录。注意先将MySQL数据库的JDBC驱动程序(比如mysql-connector-java-3.0.9 -stable-bin.jar)放到resin安装目录下的lib目录下,然后就可以编写JSP访问数据库了。 访问数据库里面的数据表的程序代码如下:(文件名为mysql.jsp)。% /驱动程序名 String driverName=com.mysql.jdbc.Driver; /数据库用户名 String userName=root; /密码 String userPasswd=; /数据库名 String dbName=test;

36、/表名 String tableName=student; /连接字符串String url=jdbc:mysql:/localhost:3306/+dbName+?user= +userName+&password=+userPasswd; Class.forName(driverName).newInstance(); Connection connection=DriverManager.getConnection(url); Statement statement = connection.createStatement(); String sql=SELECT name,city F

37、ROM +tableName; ResultSet rs = statement.executeQuery(sql); /获得数据结果集合 ResultSetMetaData rmeta = rs.getMetaData(); /确定数据集的列数,亦字段数 int numColumns=rmeta.getColumnCount(); / 输出每一个数据值 out.print(名字); out.print(|); out.print(城市); out.print(); while(rs.next() out.print(rs.getString(1)+ ); out.print(|);out.p

38、rint(rs.getString(2);out.print(); out.print(); out.print(共+numColumns+条记录); rs.close(); statement.close(); connection.close(); % 第六章.服务器端开发技术JSP及JavaBean第一节.JSP第二节.JavaBean第三节.JSP、JavaBean及Servlet组合开发第四节.开发框架、模式介绍第二节 JavaBean 1. JavaBean概述 (1) JavaBean的作用 在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBea

39、n的组合可以快速的生成新的应用程序。对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。 JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从JSP诞生后,JavaBean更多的应用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。下面主要讨论的是非可视化的JavaBean。非可视化的JavaBean,顾名思义就是没有GUI界面的JavaBean。在JSP程序中常用来封装事务逻辑、数据库操作等等,可以很好地实现业务逻辑和前台程序(如JSP文件)的分离,使得系统具有更好的健壮性和灵活性。 (2) JavaB

40、ean应遵守的规定 本质上JavaBean是一个Java类,只不过JavaBean在书写的时候要遵守一些约定(JavaBean规范)。下面是JavaBean必须遵守的:一个javaBean类必须是一个公共类 一个javaBean类必须有一个空的构造函数 一个javaBean类不应有公共实例变量 持有值应该通过一组存取方法(getXxx和setXxx)来访问 2.税率设置和读取的JavaBean示例 (1) TaxRate.java 该示例创建了一个名为 TaxRate 的 Bean 。它有两个属性,即 Product(产品)和 Rate (税率)。两个 set 方法分别用来设置这两个属性,两个

41、 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(

42、) return (this.Product); public void setRate (double rateValue) this.Rate = rateValue; public double getRate () return (this.Rate); (2) JSP 示例页面 在 JSP 页面中应用上述 Bean 要用到 标记。依赖于具体使用的 JSP 引擎的不同,在何处配置以及如何配置 Bean 的方法也可能略有不同。下面是一个应用上述 Bean 的示例页面: 提取 Bean 属性值使用方法 1 : 产品 : 税率 : 提取 Bean 属性值使用方法 2 : 产品 : 税率 :

43、上例使用 标记内的属性id 定义了整个 JSP 页面内该 Bean 的标识taxbean, scope 属性定义了该 Bean 的生存时间, class 属性说明了实现该Bean的类文件全名)。这个 JSP 页面用两种方法提取taxbean的属性值,使用set 和 get 方法设置和提取属性值;使用 标记。 中的 name 属性的值即为 中定义的 Bean 的 id属性值taxbean,它的 property 属性指定的是目标属性的名字(比如Product或者Rate)。 3.注册个人信息的JavaBean示例 这个例子中包含1个HTML页面(register.html),1个JSP页面,2个

44、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就会多一条新记录。该例子包括四

45、个文件:register.html负责显示个人信息编辑页面register.jsp 注册提交的处理页面UserRegister.java 负责储存个人信息到数据库Person.java做为JavaBean接收register.html输入的个人 信息,并传递给UserRegister JavaBean处理. register.htm :名字性别男 女出生日期电子邮箱register.jsp :Person.java :public class Person private String name; private String sex; private String birthday; pri

46、vate String email; public Person() public void setName(String 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( )

47、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 us

48、erName=root; String userPasswd=; /密码 String dbName=test; /数据库名 String tableName=student; /表名 /连接字符串如下 String url=jdbc:mysql:/localhost:3306/+dbName+?user= +userName+&password=+userPasswd; Class.forName(driverName).newInstance(); con =DriverManager.getConnection(url);public void setPerson(Person pers

49、on)this.person=person;public void regist() throws ExceptionString reg=insert into person values(?,?,?,?);PreparedStatement stmt=con.prepareStatement( reg);stmt.setString(1,person.getName() );stmt.setString(2,person.getSex() );stmt.setString(3,person.getBirthday() );stmt.setString(4,person.getEmail()

50、 );stmt.executeUpdate();第六章.服务器端开发技术JSP及JavaBean第一节.JSP第二节.JavaBean第三节.JSP、JavaBean及Servlet组合开发第四节.开发框架、模式介绍第三节 JSP、JavaBean及Servlet组合开发 1. JSP +JDBC模式 在JSP中可以直接使用JDBC去访问数据库,取得数据后可以进行处理进而完成业务逻辑。在这种情况下,浏览器直接访问一个JSP页面,这个JSP页面处理请求(可能通过JDBC访问数据库)并生成动态内容,然后和模板数据一起生成一个标准HTML文本并发回给浏览器显示。 2. Servlet+JSP+Jav

51、aBean模式 Servlet、JSP结合JavaBean的开发模式也是常用的开发模式,使用这种模式,我们就能够实现业务逻辑和页面显示的分离,并创建复用程度更高的组件。这样模式的工作原理如下图所示: 3.综合开发示例 (1)注册个人信息实例概述 这个例子先访问一个注册HTML页面,点击提交按钮后调用一个Servlet,Servlet可以进行注册用户逻辑处理(比如保存到数据库,数据库操作代码省略),将处理结果放置在一个JavaBean中,然后请求转发给JSP,JSP根据JavaBean的内容生成HTML文本,发送给浏览器显示。 这个例子实现一个常见的注册个人信息的功能。它包括四个文件:regis

52、ter.html负责显示个人信息编辑页面registerConfirm.jsp 负责显示个人信息确认页面Person.Java做为JavaBean在Servlet和JSP之间传递信息RegisterServlet.Java负责储存个人信息并转发请求 register.html :名字性别男 女出生日期电子邮箱RegisterServlet.Java :import Javax.Servlet.http.*;public class RegisterServlet extends HttpServlet public void doPost (HttpServletRequest request

53、, 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(

54、sex); person.setBirthday(birthday); person.setEmail(email); / 调用savePerson()方法将Person存储到数据库中 savePerson(person); / 回显注册信息到页面上 request.setAttribute (person, person); / 转发请求到确认页面 getServletConfig().getServletContext().getRequestDispatcher (/registerConfirm.jsp).forward(request, response); catch (Excep

55、tion ex) ex.printStackTrace ();public void savePerson(Person person) / 未实现,参考以前JDBC实现registerConfirm.jsp :注册成功! 您的注册信息是名字性别出生日期电子邮箱第六章.服务器端开发技术JSP及JavaBean第一节.JSP第二节.JavaBean第三节.JSP、JavaBean及Servlet组合开发第四节.开发框架、模式介绍第四节 开发框架、模式介绍1. EJB概述 (1) EJB的特点 EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。采用EJB

56、可以使开发商业应用系统变得容易,应用系统可以在一个支持EJB的环境中开发,开发完之后部署在其他的环境中,随着需求的改变,应用系统可以不加修改地迁移到其他功能更强、更复杂的服务器上。 EJB简化了多层体系结构应用系统的开发过程。在分布式应用系统的开发中,采用多层体系结构的方法有很多优点,如增加了应用系统的可伸缩性的、可靠性、灵活性等。因为服务器端构件可以根据应用需求迅速地加以修改,且构件在网络中的位置和应用无关,因此系统管理员可以很容易地重新配置系统的负载。多层体系结构非常适合于大数据量的商业事务系统,特别是在基于Web的应用中,需要多层体系结构支持瘦客户机及浏览器的快速Applet下载。目前,

57、越来越多的系统开始采用多层体系结构的方法。 (2)常用开发模式 在一个较为复杂的多层体系结构中,EJB可以和JSP、Servlet一起使用。常用开发模式可以用下图来表示: 在这个开发模式中,Servlet调用EJB的接口,EJB来执行和数据库的交互及其他操作,并把操作结果返回给Servlet,Servlet再将请求转发给JSP。这样做的结果就是进一步分离了系统各个部分的职责,Servlet负责控制流程,EJB负责数据访问和业务逻辑处理,JSP负责显示。实际上,这也是目前流行的MVC(Model、View、Controller)模式的一种体现。对MVC有兴趣的读者可以查阅其他资料进一步对其研究。

58、 在EJB出现之后,J2EE领域各种技术快速涌现。尤其是建立在J2EE基础技术之上的高层开发模式和开发框架进展较快。在开发模式方面,MVC模式已经属于公认的J2EE应用的标准模式。各种开发框架都无一例外的可以归纳为MVC的全部或部分实现,其中影响较大的是着重于控制层的Struts,着重于整合各层不同技术的Spring,和各种持久层框架如Hibernate等。 2. Struts简介 Struts是最早应用MVC的开发框架之一。 要理解Struts,先要对MVC有一定的了解。下面先介绍它,再讲解Struts。 (1) MVC简介 MVC是ModelViewController的简写。Model

59、代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), View 是应用的表示面(由JSP页面产生),Controller 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 下图是一个简单的MVC结构示意图。图中可以看到前面所讲的Servlet、JSP、JavaBean都可以分别对应于MVC中的控制器,视图和模型部分。 (2) Struts Struts本质上是一种开发框架。Struts遵循MVC的基本思想,并主要在控制层从优化程序结构和方便应用开发的角度做了很多扩展工作。除此之外St

60、rtus还提供了很多附属的工具和定制标签。 Struts的框架结构 和其他架构比较而言,Struts致力于成为一个功能最精简的开发框架,将一般开发项目中最具有共性的控制部分抽取出来,而不是试图实现一个完整系统中所有部分。这样做的好处是,使用Struts对每个系统实现特定的业务逻辑带来的限制较少。Struts也可以很容易的和其他框架和技术整合。其结构可以示意如下图: Struts的操作流程 首先,控制器(ActionServlet)进行初始化工作,读取配置文件(struts-config.xml),为不同的Struts模块初始化相应的ModuleConfig对象。比如配置文件中的Action映射

温馨提示

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

评论

0/150

提交评论