1、安徽农业大学Web 开发技术JSP 版课程配套教材Web 开发技术实验指导书(JSP 版)刘 波 编写安徽农业大学信息与计算机学院通信工程2008 年 2 月2目 录实验一 搭建 JSP 运行的实验环境 1实验二 JSP 页面 .2实验三 显示不同大小的“你好 JSP”.6实验四 JSP 指令和动作 .8实验五 Tag 文件的代码复用 11实验六 中文显示服务器端日期 13实验七 JSP 内置对象 .18实验八 session 对象 .22实验九 简易留言板 27实验十 JSP 中使用 Java Bean .30实验十一 JSP 中的文件操作 .40实验十二 JSP 中使用数据库 .47实验十
2、三 Java Servlet 64实验十四 网上书店 69实验报告761实验一 搭建 JSP 运行的实验环境一、实验目的(1)掌握 JSP 运行环境的安装与配置(2)理解 JSP 与 Servlet 的关系(3)运行简单的 JSP 页面,理解 JSP 的运行原理二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2)编辑工具记事本(3)Tomcat 服务器,也可以从网上免费下载三、实验步骤(1)按教材中演示安装 JDK(2)按教材中演示安装 Tomcat(3)启动 Tomcat 服务器,在浏览器中输入:http:/localhost:8080 ,
3、观察主页内容(4)观察 Tomcat 安装目录下的各个子目录的内容(5)打开记事本,输入下列源代码并保存为 exer1.jsp。将此文件复制到 Tomcat 安装目录下的 webappsROOT 目录下,运行该页面,观察其对应的 Servlet 源代码。exer1.jsp 的代码:程序片创建 Date 对象:“+date);sum=add(12,34);%在下一行输出和:2(6)将 exer1.jsp 文件复制到 Tomcat 安装目录下的 webappsexamples 目录下,运行该页面,观察其对应的 Servlet 源代码。(7)将 exer1.jsp 文件复制到 Tomcat 安装目录
4、下的 webappswebdav 目录下,运行该页面,观察其对应的 Servlet 源代码。四、实验思考题(1)JDK 安装完毕后,需要添加哪些环境变量?(2)在 Tomcat 安装目录下的 webapps 文件夹中,新建一文件夹 myapp,将 exer1.jsp 文件复制到 Tomcat 安装目录下的 webappsmyapp 目录下,运行该页面(http:/localhost:8080/myapp/exer1.jsp ) ,结果如何?若在 d:盘根目录建立一个文件夹 myweb,将 exer1.jsp 文件复制到 d:myweb目录下, 运行该页面(http:/localhost:808
5、0/myweb/exer1.jsp ) ,结果如何?3若要正确显示该页面,还应做如何处理?提示:修改 conf 目录下的 server.xml 文件。(3)Tomcat 默认端口号为 8080,如何更改端口号?(4)编写一个 JSP 页面,用于显示 1100 的整数和。五、实验报告要求(1)分析 JSP 的工作原理,说明 JSP 文件和 Servlet 的关系(2)根据实验运行情况,对实验步骤和运行结果进行阐述(3)完成实验思考题的解答实验二 JSP 页面一、实验目的(1)熟悉典型 JSP 页面的组成元素,掌握 HTML 标记和 JSP 标记的不同(2)掌握在 HTML 页面中插入 JSP 脚
6、本(java 代码)的方法(2)编写简单的 JSP 页面,初步掌握 JSP 网页的设计原理4二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2)编辑工具:记事本或 Dreamweaver MX 2004、FrontPage 2003(3)Tomcat 服务器,也可以从网上免费下载三、实验步骤(1)打开记事本,输入以下代码,保存为 exer2_1.jsp,观察其运行结果exer2_1.jsp:(2)JSP 中声明类(比较教材 P15P16 页的声明变量和声明方法) 是 JSP 页面对应的Servlet 类的内部类,页面上所有脚本元素都可以创建该
7、类的对象。下面的实例定义一个square 类,当客户访问该页面时,服务器创建该类的对象,只要客户给出正方形的边长,就可以求出该正方形的周长和面积,创建并运行 exer2_2.jsp,观察运行结果exer2_2.jsp:请输入正方形边长方的面积是:方的周长是:(3)编写 exer2_3.jsp,熟悉在“”之间插入表达式,用于输出表达式计算结果的方法exer2_3.jsp:Sin(0.9)除以 3 等于 3 的平方是:12345679 乘 72 等于5 的平方根等于99 大于 100 吗?回答:100%(4)在 Dreamweaver 或 FrontPage 中利用可视化方法,编写 input.j
8、sp 和 receive.jsp。input.jsp:请输入下列信息:输入您的姓名: 选择性别: 男 6女 选择您喜欢的歌手: 张歌手李歌手刘歌手王歌手receive.jsp:您的姓名:“+yourName+“);out.println(“ 您的性别:“+yourSex+“);out.println(“ 您喜欢的歌手:“);if(personName=null) out.print(“一个都不喜欢“); else for(int k=0;k hidden 提交的值 :“+secretMess); %四、设计性实验环节(1)编写一个 jiecheng 类,当客户在浏览器中给出指定的正整数 N,能
9、计算 N 的阶乘。创建能实现此功能的 jsp 文件 res1.jsp,观察运行结果(参考 exer2_2.jsp)(2)编写程序 newclass2.jsp,学会在声明中定义类 student,初始化该类(学号、姓名、成绩) ,用表格形式输出“班号(学号的前 4 位) 、学号、姓名、成绩” 。 (选做)7五、实验报告要求(1)分析 JSP 的脚本元素,说明 JSP 标记和 html 标记的不同(2)根据实验运行情况,对实验步骤和运行结果进行阐述(3)完成实验设计题的解答实验三 显示不同大小的“你好 JSP”(选做)一、实验目的(1)掌握控制字体显示大小的方法(2)掌握 For 语句,显示变量值
10、二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2)编辑工具:记事本或 Dreamweaver MX 2004、FrontPage 2003(3)Tomcat 服务器,也可以从网上免费下载三、实验原理和内容本程序运行后,在浏览器页面上显示不同字体大小的“你好 Jsp”,如图 31 所示,程序的流程图如图 32 所示。1、 程序知识点 显示变量值在 JSP 中,获取变量值可使用“ ”来实现,valname 可以是一个整型字符型的变量。图 31 浏览器显示不同字体大小 For 语句For 语句的格式如下for (initialization St
11、atement; conditional Expression; increment Statement)8 loopBody为了执行 For 语句,首先执行初始化语句,然后再对条件表达式求值,如果值为TRUE,则执行循环体,随后执行递增语句。表达式的求值和循环体与递增语句的执行不断重复,直到条件表达式的值变为 false。多个初始化和增量语句可以用逗号隔开。For 循环的初始化部分可以声明局部循环变量,循环变量的范围在循环体内部。这些循环变量遵循在块内有效的一般规则,即用大括号作为程序块,变量在块内声明,不能与范围外边的变量同名,也不能在循环外引用。图 32 程序流程图 控制字体大小在 HT
12、ML 语言中,控制文字大小可使用 “”(n 从 16) ,因此,可以使用循环语句来控制 n 的变化。然后,使用 ,来显示字体大小渐变的 “你好 JSP”2、程序代码(exer3.jsp)显示不同大小字体9你好 JSP你好 JSP3、观察运行结果四、综合设计实验环节综合思考:结合实验二和实验三,编写 input2.jsp 和 receieve2.jsp,根据变量和 for 循环生成表格的行和列,结果如下图 33 和图 34 所示:图 33 input2.jsp 执行结果 图 34 执行“确定”后结果五、实验报告要求(1)根据实验运行情况,对实验步骤和运行结果进行阐述(2)完成综合设计环节的解答1
13、0实验四 JSP 指令和动作一、实验目的(1)综合掌握在 JSP 中使用指令标记(2)综合掌握在 JSP 中使用动作标记二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2)编辑工具:记事本或 Dreamweaver MX 2004、FrontPage 2003(3)Tomcat 服务器,也可以从网上免费下载三、实验步骤1、Page 指令的使用(1)打开记事本,输入以下文档,并保存为 pagederictive.jsp。DoneThis program example how to use page Directive(2)将 pagederi
14、ctive.jsp 复制到 Tomcate 安装目录下的 webappsROOT。(3)在 IE 地址栏输入 http:/localhost:8080/pagederictive.jsp2、page 指令 import 属性的使用(1)打开记事本,输入以下文档,并保存为 pageimport.jsp。CurrentYear=(2)将 pageimport.jsp 复制到 Tomcate 安装目录下的 webappsROOT。(3)在 IE 地址栏输入 http:/localhost:8080/pageimport.jsp113、include 指令的使用(1)打开记事本,输入以下文档,并保存为
15、 copyright.jsp。2002 Any unauthorized use of these materials will be prosecuted to the fullest extent of the law(2)打开记事本,输入以下文档,并保存为 inc1.jsp。This page is unde contructionLast updated:March 2008(3)将 copyright.jsp 和 inc1.jsp 复制到 Tomcate 安装目录下的 webappsROOT(4)在 IE 地址栏输入 http:/localhost:8080/inc1.jsp四、设计
16、性实验环节(1) 、编写 JSP 页面,用“*”显示一个 77 方阵的边框和对角线,结果如图 41 所示。* * * * * * * * * * * * * * * * * * * * * * * * * * *图 41 练习 1 运行结果(2) 、编写 JSP 页面,判断字符串是否为回文,并用表格显示出来,结果如图 42 所示。提示:使用 StringBuffer 类的 reverse()颠倒某字符串的顺序,若字符串与颠倒后的字符串12相等,则该串为回文。 (选做)图 42 练习 2 的运行结果(3) 、张三手头分别有 800 美元和 1860 美元,编写一个 JSP 页面,把他的美元换成人
17、民币,并用表格显示出来。假设当前美元兑换人民币的汇率是 7.82。 (选做)(4) 、编写 JSP 页面分别显示 110 之间的各数字的阶乘。实验五 Tag 文件的代码复用一、实验目的(1)Tag 文件的编写、保存以及 Tag 标记的使用(2)编写 JSP 页面,使用 Tag 标记实现代码的复用二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2)编辑工具:记事本或 Dreamweaver MX 2004、FrontPage 2003(3)Tomcat 服务器,也可以从网上免费下载三、实验步骤(1)Tag 文件是扩展名为 .tag 的文本文件,
18、其结构几乎和 JSP 文件相同,只是扩展名不同而已。也就是说,一个 Tag 文件中可以有普通的 HTML 标记符、某些特殊的指令标记、成员变量和方法、Java 程序片和 Java 表达式等。在记事本中编写如下一个 Tag 文件Trangle.tag:这是一个 Tag 文件,负责计算三角形的面积:cdouble area=Math.sqrt(p*(p-a)*(p-b)*(p-c) ;13return “三角形的面积:“+area;else return(“+a+“,“+b+“,“+c+“不能构成一个三角形,无法计算面积“);%jsp 页面传递过来的三边:“+sideA+“,“+sideB+“,“
19、+sideC);double a=Double.parseDouble(sideA);double b=Double.parseDouble(sideB);double c=Double.parseDouble(sideC);out.println(getArea(a,b,c);%(2)将 Trangle.tag 保存在ROOTWEB-INF 目录下(3)在 ROOT 目录下编写 exer5_1.jsp 文件,代码如下:请选择三角形的三条边SIDE A:345SIDE B:345SIDE B:34514以下是调用 Tag 文件的效果:“ sideB=“ sideC=“ /(4)在 IE 地址栏
20、输入 http:/localhost:8080/exer5_1.jsp四、综合设计实验环节编写两个 Tag 文件 Rect.tag 和 Circle.tag。Rect.tag 负责计算矩形的面积,Circle.tag 负责计算圆的面积。编写一个 JSP 页面,该 JSP 页面使用 Tag 标记调用 Rect.tag 和Circle.tag。调用 Rect.tag 时,向其传递矩形的两个边的长度;调用 Circle.tag 时,向其传递圆的半径。实验六 中文显示服务器端日期(选做)一、实验目的(1)掌握在 JSP 中 Switch 语句的使用(2)掌握 Date 类使用。(3)熟悉 int 和
21、String 的区别(4)通过实例编程,综合掌握实用网页编程技巧二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2)编辑工具:记事本或 Dreamweaver MX 2004、FrontPage 2003(3)Tomcat 服务器,也可以从网上免费下载三、实验原理和内容15本实例运行后将在浏览器上用中文显示当前服务端的日期,如图 61 所示。图 61 服务器端的日期1、程序知识点 Date 类及其引用Date 是在 jdk 中 java。util 这个包下的一个类,它支持日历和时间,并且包含了getYear()、getMonth()、getD
22、ate()、getDay() 几个方法,分别为获取系统年份、系统月份、系统日期、系统星期,并且返回的都是整型。其标准用法为:java.util.Date dt=new java.util.Date();int year=dt.getYear();当然也可先用 import 语句使包中定义的类和接口,可以只用类名而不用全名来引用用法为(import 语句一定要放在程序开头):import java.util.*;Date dt=new Date();int year=dt.getYear();以上例句 Date dt=new Date()中用 new 语句生成一个新对象 dt 对 Date 类进
23、行引用,而 Date()是类 Date 的构造函数。然后可以对 Date 类中的 getYear()方法进行调用。但得到的返回值要加 1900 才是现在年份。同样用 getMonth()得到的返回值也要加 1 才是现在的月份。 int 和 String 的区别在 Java 中它们是两个完全不同的概念。int 是一个类型,而 String 是一个类。所以在转换上是不能进行简单的强制型转换(int num=(int)string)。在此需要采用 String 类中的一个方法,一般用法如下:String str_year=String.valueOf(year) Switch 语句switch 语句
24、能够根据表达式的值决定执行多个操作中的一个或者几个。switch 的一般格式为:switch (expression)case value1:statement1 ;break;case valueN:statemendN;break;default:default_Statement;16expression 可以返回任一简单类型的值,case 子句中的值 valueI 必须是常量,而且所有 case 子句中的值应是不同的。多分支语句把表达式返回的值与每个 case 子句中的值相比,如果匹配成功,则执行该 case 子句后的语句序列,否则执行 default 中的语句;如果没有 defaul
25、t,则不进行任何操作。而 case 字句中的 break 用于跳出 switch,如果没有break,则 switch 会顺序执行下个 case 中的语句,直至遇到 break 语句或者执行完所有的case 或者 default 语句。 switch 语句中使用的表达式必须为整型表达式或不丢失便可显式地转换为整型的表达式。不丢失便可显式地转换为整型的数据类型包括字节、字符和短型数。对于长型数、浮点数和双精度数等数据类型,需明确地转换。case 值必须能够求值或编译时能隐含地转换为整型的常量表达式。图 62 程序流程图 程序实现过程可以先获取系统的日期,然后将月份和日期统一成二位整型的格式,再将
26、获取的系统时间拼成字符串,最后利用 For 循环和 swtich 语句获取中文时间信息并显示。图 62显示程序流程图2、部分程序关键源码(exer6.jsp)四、实验思考 上述 exer6.jsp 中,for 循环体中有这样一段语句:if(j=4|j=6)if(cha_i=1)|(cha_i=0)chi_num_total=“; if(cha_i!=0)chi_num_total+=“十“;试问:如果将语句改成:if(j=4|j=6)if(cha_i=0)chi_num_total=“; elsechi_num_total+=“十“;这样修改能不能正确显示,为什么?五、综合实验 判断服务端时间
27、并显示中文问候编写 JSP 程序,运行后,程序将根据服务端的不同时间段,在浏览器上显示“早上好” 、“中午好” 、 “下午好”和“晚上好” ,如图 63 所示。19图 63 显示结果提示:利用 Date 类的 getHours()函数可得到 24 小时制的服务器端时间,并根据当前时间来判断是何段时间:511 点:早上;1114 点:中午1418 点:下午;18 点5 点:晚上实验七 JSP 内置对象(4 课时)一、实验目的(1)掌握 JSP 中内置 request 对象的使用(2)掌握 response 对象的使用,并熟悉 setContentType 方法(3)掌握 out 对象的使用二、实
28、验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2)编辑工具:记事本或 Dreamweaver MX 2004、FrontPage 2003(3)Tomcat 服务器,也可以从网上免费下载三、实验内容与步骤1、request 对象的使用(获取表单中提交的信息)在 jsp 中,当用户通过浏览器请求一个页面时,浏览器将请求发送给服务器。按照HTTP 协议,浏览器发送的请求具有一定的结构,请求包括一个请求行、头域和表单提交的信息体。使用 request 对象,可以获取用户浏览器提交的请求信息。 request 对象常用的方法是 getParameter(
29、String s) ,该方法获取表单提交的信息。1)在 ROOT 目录下编写如下源码: exer7_1.jsp20调用 Computer.tag 文件负责计算平方根“ /2)在 ROOTtags 目录下编写如下源码:computer.tag=0) double r=Math.sqrt(n) ;out.print(“+n+“的平方根:“);out.print(“+r);else out.print(“+“请输入一个正数“);catch(NumberFormatException e) out.print(“+“请输入数字字符“);%3)在浏览器输入:http:/local host:8080/e
30、xer7_1.jsp,观察其运行结果4)将 Form 提交请求的方法改成 get,观察其运行结果,体会 get 方法和 post 方法的不同。2、response 对象的使用(1)利用 response 对象的 setContentType 方法,改变显示方式。将下列源码保存为exer7_2.jsp,运行后观察其结果:在学习 response 对象的 setContentType 方法21将当前页面用 MS-Word 显示吗?将当前页面用 MS-Powerpoint 显示吗?(2)利用 response 对象实现页面重定向。将下列源码保存为 exer7_3.jsp 和 form.jsp,运行
31、exer7_3.jsp 后观察其结果:exer7_3.jsp:填写姓名: form.jsp:3、out 对象的使用out 对象是一个输出流,该对象调用相应的方法可以将数据发送到客户端浏览器的缓存中。其中 println()和 print()是常用的两个方法,其区别是:println()会向缓存区写入一个换行,而 print()不写入换行。但是浏览器的显示区域目前不识别 println()写入的换行,如果希望浏览器显示换行,应当向浏览器写入实现换行。下面的实例 exer7_4 使用 out 对象向客户输出包括表格等内容的信息,运行该实例并观察结果。Exer7_4.jsp:“);out.print
32、ln(c);%以下是一个表格 “);out.println(“);out.println(“);out.println(“+“姓名“+“);out.println(“+“性别“+“);out.println(“+“出生日期“+“);out.println(“);out.println(“);out.println(“+“张三“+“);out.println(“+“男“+“);out.println(“+“1988 年 5 月“+“);out.println(“);out.println(“);out.println(“+“李四“+“);out.println(“+“男“+“);out.prin
33、tln(“+“1987 年 10 月“+“);out.println(“);23out.println(“);out.print(“) ;%四、设计性实验环节1、编写两个页面 inputNumber.jsp 和 computerAndShow.jsp,用户可以使用inputNumber.jsp 提供的表单输入一个数字,并提交给 computerAndShow.jsp 页面。该页面通过内置对象获取 inputNumber.jsp 页面提交的数字,计算并显示该数的平方和立方,并用 out 对象输出结果。若 inputNumber.jsp 页面提交的不是数字,computerAndShow.jsp
34、页面应能重定向到 inputNumber.jsp 页面。 (必做)2、编写程序 register.html 和 register.jsp,做一个用户注册的界面,要求对用户填写的部分进行合法性检验,然后提交到 register.jsp 进行注册检验,若用户名为 user 开头的,就提示“该用户名已被注册” ,若用户名为 admin,就提示“欢迎您,管理员” ,否则,就显示“注册成功” 。 (必做)实验八 session 对象(4 课时)一、实验目的掌握 JSP 中内置 session 对象的使用二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载(2
35、)编辑工具:记事本或 Dreamweaver MX 2004、FrontPage 2003(3)Tomcat 服务器,也可以从网上免费下载三、实验原理与内容1、利用 session 对象存储数据。本实例利用 session 对象模拟购物车,存储客户的姓名和购买的商品,三个 JSP 页面分别是:main.jsp;food.jsp;count.jsp。代码如下,分析下列代码,完成实验练习(1)main.jsp欢迎来到本页面,请输入您的姓名240)% 点击超链接,连接到 food.jsp 的页面,去采购食品。欢迎去食品柜台!food.jsp:点击超链接,连接到 main.jsp 的页面,去修改姓名。
36、欢迎去 main.jsp!这里是食品柜台,请选择您要购买的食品:香肠苹果酱油饮料点击超链接,连接到 count.jsp 的页面,去查看购物车中的商品。25欢迎去 count.jsp!count.jsp:这里是结帐处,您的姓名以及选择的商品:您的姓名:“+personName);Enumeration enumGoods=session.getAttributeNames();out.println(“购物车中的商品:“);while(enumGoods.hasMoreElements() String key=(String)enumGoods.nextElement();String goo
37、ds=(String)session.getAttribute(key);if(!(goods.equals(personName)out.println(goods+“); %点击超链接,连接到 food.jsp 的页面,购买食品。欢迎去 food.jsp!点击超链接,连接到 main.jsp 的页面,去修改姓名。欢迎去 main.jsp!(2)下例是利用 session 完成的一个猜数字的游戏,当客户端访问 exer8_1.jsp 时,页面产生一个 1100 的随机数,并将其存入 session 对象,然后让客户猜这个数字。客户输入数后提交 result.jsp,该页面将客户猜的数和产生的
38、随机数进行比较,若猜对了,连接到 success.jsp。该页面显示客户猜数所用的时间等信息。若猜的数字大于随机数,连接到large.jsp;否则连接到 small.jsp。这两个页面都要求客户重新猜数。五个 jsp 页面的代码如下:exer8_1.jsp:猜数字随机分给了逆一个 1 到 100 之间的数字,请猜猜这个数输入你猜的数result.jsp 的关键代码:realnumber)int n=(Integer)session.getAttribute(“count“).intValue();n=n+1;session.setAttribute(“count“,new Integer(n)
39、;response.sendRedirect(“large.jsp“);else if(guessNumberlarge.jsp 的关键代码:large所猜的数比实际的数大,请再猜:27你已经猜了次了请再输入你猜的数small.jsp 的关键代码:small所猜的数比实际的数小,请再猜:你已经猜了次了请再输入你猜的数success.jsp 的代码:success恭喜你,猜对了你共猜了 次用时 秒!28这个数字就是你必须关掉浏览器才能得到新的数字四、实验练习改进实验内容 1,在 main.jsp 页面中,用户可以输入年龄和性别,并用 session 保存。五、综合实验利用 session 完成的
40、一个猜双数字的游戏,当客户端访问 exer8_2.jsp 时,页面产生两个 1100 的随机数,并将其存入 session 对象,然后让客户猜这两个个数字,如图 81所示。客户输入数后提交 result.jsp,该页面将客户猜的数和产生的随机数进行比较:1)若两个猜对了,连接到 success.jsp。2)若猜的两个数字均大于随机数,连接到 large2.jsp;3)若猜的两个数字均小于随机数,连接到 small2.jsp;5)若猜的第一个数字大,第二个数字小,连接到 largesmall.jsp6)若猜的第一个数字小,第二个数字大,连接到 smalllarge.jsp7)若猜的两个数字中,有一个数猜测成功,继续另一个数的猜测:若大于随机数,连接到 large1.jsp;若小于随机数,连接到 small1.jsp。图 81 实验练习 2 运行效果实验九 简易留言板(选做)一、实验目的综合掌握各种 JSP 指令和标记,重点掌握 JSP 中内置 application 对象的使用二、实验工具(1)JDK1.4、JDK1.5 或 JDK1.6,可以从 SUN 公司的网站免费下载