第一篇:JSP编程实验报告
JSP编程实验报告
学生姓名:学生班级:学生学号:指导教师:实验n(n-实验顺序号):实验名称
一、实验目的二、实验内容及步骤
三、源代码
四、运行界面
五、收获和体会
第二篇:JSP实验报告
中南民族大学管理学院
学生实验报告
课程名称: JSP程序设计 年
级: 2010 专
业: 姓 名: 学 号: 指导教师:
实验地点: 管理学院综合实验室
学年至 学第 学期
第一章 JSP简介
实验 Tomcat服务器的安装与配置
一、实验目的
本实验的目的是让学生掌握怎样设置Web服务目录、怎样访问Web服务目录下的JSP页面、怎样修改Tomcat服务器的端口号。
二、实验要求
1、将下载的apache-tomcat-6.0.13.zip解压到硬盘某个分区,比如D。
2、在硬盘分区D下新建一个目录,名字为student,见stuent设置为Web服务目录,并为该Web服务目录指定名字为good的虚拟目录。
3、修改端口号为5678.在server.xml文件中找到修改端口号的部分,将端口号修改为5678.4、启动Tomcat服务器。
5、用文本编辑器编写一个简单的JSP页面biao.jsp,并保存到Web服务目录student中。
6、用浏览器访问Web服务目录student中的jsp页面biao.jsp。
三、实验内容
1、Tomcat安装成功并运行
2、编码实现乘法表 3.代码
四、实验结果
biao.jsp页面
五、实验结果分析
1、默认的端口号为8080,若修改,在conf目录下的server.xml文件中修改端口号。
2、设置虚拟目录。在conf目录下的server.xml中前加入:
3、Tomcat服务器必须保持启动。第二章 JSP页面与JSP标记 实验1 JSP页面的基本结构
一、实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用成员变量,怎样使用Java程序片、Java表达式。
二、实验要求
本实验将用户输入的单词按字典顺序。需要编写两个JSP页面,名字分别为inputWord.jsp和showDictionary.jsp。
1、inputWord.jsp的具体要求 该页面有一个表单,用户通过将该表单输入若干个单词,并提交给showDictionary.jsp页面。
2、showDictionary.jsp的具体要求
该页面负责排序单词,并将排序的全部单词显示给用户。
(1)该JSP页面有个名字为dictionary、类型是TreeSet成员变量。
(2)该JSP页面有public void addWord(String s)方法,该方法将参数s指定的字符串添加到成员变量dictionary中。
(3)该JSP页面在程序片中操作dictionary,即显示全部的单词。
三、实验内容
1)inputWord.jsp页面有一个表单,用户通过该表单输入若干个单词,并提交给showDictionary.jsp页面。
2)showDictionary.jsp负责排序单词,并将排序的全部单词显示给用户。3)代码
四、实验结果
inputWord.jsp页面
showDictionary.jsp页面
五、实验结果分析
1、jsp页面由html标记、jsp标记、成员变了和方法的声明、java程序片和java表达式组成。
2、jsp页面中的成员变量是被所有用户共享的变量。Java程序片可以操作成员变了,任何一个用户对jsp页面成员变量操作的结果,都会影响到其他用户。
实验2 JSP指令标记
一、实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用include指令标记在JSP页面中静态插入一个文件内容。
二、实验要求
该实验要求使用include指令标记使得每个页面都包含有导航条。在进行实验之前将名字是leader.txt的文件保存到本实验所使用的web服务目录中。实验要求编写3个JSP页面,具体要求如下。first.jsp的具体要求
first.jsp使用include指令静态插入leader.txt.second.jsp的具体要求
second.jsp使用include指令静态插入leader.txt.third.jsp的具体要求
third.jsp使用include指令静态插入leader.txt.三、实验内容
leader.txt编写3个JSP页面。
1)frist.jsp使用include指令静态插入leader.txt文本文件。2)second.jsp使用include指令静态插入leader.txt文件。3)third.jsp使用include指令静态插入leader.txt。3)代码 1
2.3.4.4)
四、实验结果
frist.jsp页面
second.jsp页面
third.jsp页面
五、实验结果分析
1、include指令标记是在jsp页面出现该指令的位置处,静态的插入一个文 件。被插入的文件必须是可访问和可使用的。Include指令标记是在编译 阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖与当前jsp 页面,优点是执行速度快。
实验3 JSP动作标记
一、实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用include标记动态加载文件,使用forward实现页面的转向。
二、实验要求
编写3个JSP页面:giveFileName.jsp、readFile.jsp和error.jsp。
1、giveFileName.jsp的具体要求
要求giveFileName.jsp页面使用include动作标记动态加载readFile.jsp页面,并将一个文件的名字比如ok.txt传递给被加载的readFile.jsp页面。
2、readFile.jsp的具体要求
要求readFile.jsp负责根据giveFileName.jsp页面传递过来的文件名字进行文件的读取操作,如果该文件不存在就使用
Forward动作标记将用户转向error.jsp页面。
3、error.jsp的具体要求 负责显示错误信息。
三、实验内容
1)giveFileName.jsp页面使用include动作标记动态加载readFtle.jsp页面,并将一个文件的名字ok.txt传递给被加载的readFtle.jsp页面。
2)readFile.jsp页面负责根据giveFileName.jsp页面传递过来的文件名字进行文件的读取操作,如果该文件不存在就使用forward动作标记将用户转向error.jsp。
3)error.jsp负责显示错误信息。4)代码
四、实验结果
giveFileName.jsp页面
error.jsp页面
五、实验结果分析
1、include动作标记是在jsp页面运行时才处理加载的文件,被加载的文件在逻辑和语 法上独立与当前jsp页面,include指令标记可以使用param子标记向被加载的jsp 文件传递信息。第三章 Tag文件与Tag标记
实验1 JSP页面的基本结构
一、实验目的
本实验的目的是让学生灵活掌握在Tag标记中使用标记体。
二、实验要求
编写一个JSP页面giveMess.jsp和一个Tag文件handleMess.tag。JSP页面通过调用Tag文件在表格中的单元格显示文本,该JSP页面通过使用标记体将要显示的文件传递给被调用的Tag文件。
三、实验内容
1、giveMess.jsp页面使用带标记体的Tag标记来调用Tag文件,其中标记体是一行文本,如下所示:
2、handelMess.tag使用
3、分别写出giveMess.jsp和handelMess.tag的代码。4.代码
四、实验结果
giveMess.jsp页面
五、实验结果分析
1、tag文件中可以有html标记符、特殊的指令标记、成员变了和方法、java程序片和java表达式。
2、jsp页面使用tag标记动态执行一个tag文件。
3、当jsp页面调用一个tag文件时可能希望动态地向该tag文件传递信息,那么就可以使用带有标记体的tag标记来执行一个tag文件。
实验2 使用attribute指令
一、实验目的
本实验的目的是让学生灵活掌握在Tag标记中使用attribute指令。
二、实验要求
编写一个ShowCalendar.tag文件,该Tag文件负责显示日历。编写一个JSP页面giveYearMonth.jsp,该JSP页面使用Tag标记调用ShowCalendar.tag文件,并且向ShowCalendar.tag文件传递年份和月份。
三、实验内容
1、giveYearMonth.jsp通过tag标记调用ShowCalendar.tag文件,并且向ShowCalendar.tag文件传递年份和月份。
2、ShowCalendar.tag文件根据jsp页面传递过来的年份和月份显示日历。该文件能对jsp页面传递过来的数据进行判断,比如,如果jsp页面传递过来的数据不是数值型数据,tag文件负责显示错误信息。4.代码
四、实验结果
giveYearMonth.jsp页面
五、实验结果分析
1、一个tag文件中通过使用attribute指令,使得jsp页面在调用tag文件时,可以 向该tag文件中的对象传递一个引用。tag文件中使用attribute指令:
<%@ attribute name=“对象名字” required=“true”|“false” type=“对象的类型”%>
实验3 使用variable指令
一、实验目的
本实验的目的是让学生灵活掌握在Tag标记中使用variable指令。
二、实验要求
编写一个Tag文件GetWord.tag,负责分解出字符串中的全部单词,并将分解出的全部单词返还给调用该Tag文件的JSP页面。编写一个JSP页面giveSoring.jsp,该页面负责向Tag文件传递一个由英文单词构成的字符串,并负责显示Tag文件返回的全部单词。
三、实验内容
1、giveSoring.jsp通过tag标记调用GetWord.tag,并传递一个由英文单词构成的字符串,显示tag文件返回的全部单词。
2、GetWord.tag使用attibute指令得到jsp页面传递过来的字符串,并用vatiable指令返回全部的单词。
3.代码
四、实验结果 giveSoring.jsp页面
五、实验结果分析
1、Tag文件可以使用variable指令把一个对象返回给调用它的jsp页面
Tag文件使用variable指令给出返回的对象的名字、类型和有效范围:
<%@ variable name-given=“对象名字” variable-class=“对象的类型” scope=“有效范围”%>
第4章 JSP内置对象 实验1 request对象
一、实验目的
本实验的目的是让学生掌握怎样在JSP中使用内置对象request。
二、实验要求
通过JSP页面和Tag文件实现数字的四则运算,要求编写两个JSP页面inputNumber.jsp和receiveNumber.jsp及一个Tag文件Computer.tag。receiveNumber.jsp使用内置对象接受inputNumber.jsp提交的数据,然后将计数任务交给Tag文件Computer.tag去完成。
三、实验内容
1)inputNumber.jsp页面提供一个表单,用户可以通过表单输入两个数、选择四则运算符号,并将输入的两个数和所选择的运算符号提交给receiveNumber.jsp页面。
2)receiveNumber.jsp使用内置对象inputNumber.jsp页面提交的数据,然后将计算任务交给Tag文件Computer.tag去完成。
3)要求Computer.tag使用attribute指令得到receiveNumber.jsp页面传递过来的书和运算符号,使用variable指令将运算结果返回给receiveNumber.jsp页面。
4)代码
四、实验结果
inputNumber.jsp页面
receiveNumber.jsp页面
五:实验结果分析
1、内置对象request的作用就是用来接收客户端提交的请求
2、request对象用的比较多的方法是getParameter方法。
request对象的getParameter方法根据指定的参数,获取客户端提交的信息。
其语法规则如下:
<% String name=request.getParameter(“txtName”)%>
其中,name是一个字符串变量。txtName是客户端提交信息中的一个字段名。
3、下面的就是在实验里面request的使用 <% String a=request.getParameter(“numberOne”);String b=request.getParameter(“numberTwo”);String operator=request.getParameter(“operator”)
实验2 responese对象
一、实验目的
本实验的目的是掌握怎样使用response对象动态响应用户的请求。
二、实验要求
编写两个JSP页面inputRadius.jsp和drawCircle.jsp页面,drawCircle.jsp页面使用response对象做出动态响应。
三、实验内容
1)inputRadius.jsp提供表单,用户在表单中输入一个代表圆的半径的数字,提交给drawCircle.jsp页面。
2)drawCircle.jsp页面首先使用request对象获得inputRadius.jsp提交的数字,然后根据数字的大小做出不同的响应。如果数字小于等于0或者大于100,response对象调用setCountType(String s)方法将contentType属性的值设置为text/plain,同时输出“半径不合理”;如果数字大于0并且小于等于100,response对象调用setContentType(String s)方法将contentType属性的值设置为image/jpeg,并绘制一个圆;如果用户在inputRadius.jsp页面输入了非数字,response对象调用sendRedirect(URL url)方法将用户重定向到inputRadius.jsp。
3)代码
四、实验结果
1、在输入要求的范围以内:
inputRadius.jsp页面
drawCircle.jsp页面
2、当输入的数据不符合要求的结果显示:
inputRadius.jsp页面
drawCircle.jsp页面
五、实验结果分析:
1、response的作用就是把服务器端的数据以HTTP的格式发送到客户端浏览器
2、与request相比,它的功能和request对象的功能相反。request对象用于得到用户提交的信息而response对象是向用户发送信息,两者结合起来完成动态页面的交互功能。
3、response对象的主要方法:
sendRedirect():页面重定向方法 setStatus():设置状态行方法
setContentType():设置文本类型方法
实验3 session对象
一、实验目的
本实验的目的是让学生掌握怎样使用session对象存储和用户有关的数据。
二、实验要求
使用session对象模拟购物车。编写两个JSP页面choiceBook.jsp和orderForm.jsp。
三、实验内容 1)用户在choiceBook.jsp页面通过超链接将自己要购买的图书信息传递到orderForm.jsp页面。
2)orderForm页面将用户购买的图书信息存储到session对象中,然后生成一个图书订单并显示给用户。
3)代码
四、实验结果:
choiceBook.jsp页面
orderForm页面
五、实验结果分析:
1、session的作用就是记住客户的连接信息,可以使用会话对象(session)。session对象记录了每个客户与服务器的连接信息
2、判断session是否失效有三种情况1)、客户是否关闭浏览器。2)、是否到达最大的发呆时间3)、是否调用validate()函数
3、session对象常用方法:
setAttribute(String name,java.lang.Object value):设定指定名字的属性值,并且把它存储在session对象中。getAttribute(String name):获得指定名字的属性,如果该属性不存在,将会返回null
第5章 JSP中的文件操作(实验)实验1 使用文件字节流读写文件
1、相关知识点。
Fileunputstream流以字节(byte)为单位顺序地读取文件,只要不关闭流,每次调用read的方法就书讯地读取源中其余的内容,直接原到尾末或流被关闭。
Fileunputstream流以字节(byte)为单位顺序地写文件,只要不关闭流,每次调用writer方法就顺序地向输出流写入内容。2.实验目的。
本实验的目的是掌握使用文件输入,输出字节流读写文件。3.实验要求。
1)giveContent.jsp页面提供一个表单,要求该表单提供一个text文件输入框、select下拉列表和一个TextArea文本区,用户可以在text输入框中输入文件的名字、在select下拉列表选择一个目录、通过TextArea输入多行文本。
2)writeContent.jsp页面首先获得giveContent.jsp页面提交的文件所在目录、名字以及TextArea文本区中的内容传递给WriteTag.tag。
3)lookContent.jsp页面提供一个表单,该表单提供两个text文本输入框,用户可以在这两个text文本框中输入目录和文件名字。单击表单的“提交”按钮将text中输入的文件目录以及文件名字提交给readContent.jsp。
4)readContent.jsp页面首先获得lookContent.jsp页面提交的文件目录、名字,然后使用Tag标记调用Tag文件ReadTag.tag,并将文件所在目录、名字传递给ReadTag.tag。
5)writeTag.tag文件使用attribute指令获得writeCintent.jsp页面传递过来的文件目录 文件名字和文件内容,然后使用文件字节输入流将文件内容写入到文件中,给文件所在目录就是writeCintent.jsp页面传递过来的文家目录,名字就是writeCintent.jsp页面传递过来的文家名字。
6)ReadTag。Tag的具体要求
Read.Tag文件使用attribute指令获得readContent.jsp页面传递过来的文件目录 文件名字和文件内容,然后使用文件字节输入流读取文件,并负责现实所读取的内容。
7)代码
4、实验结果:
giveContent.jsp页面
writeContent.jsp页面
lookContent.jsp页面
readContent.jsp页面
5、实验结果分析
1、把输入流的指向称做源,程序从指向源的输入流中读取源中的数据。而输出流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把信息传递到目的地。所有字节输入流类都是InputStream(输入流)抽象类的子类,而所有字节输出流都是OutputStream(输出流)抽象类的子类。
2、int read(): 输入流调用该方法从源中读取单个字节的数据,该方法返 回字节值,如果未读出字节就返回-1。
3、void write(int n): 输出流调用该方法向输出流写入单个字节
实验2 使用文件字节流加密文件
1、相关知识点
fileinputstream流和filereader流都是顺序的读取文件,只要不关闭,每次调用read方法就顺序的读取源中其余的内容,只到源的末尾或流被关闭;二者的区别是fileinputstream流以字节为单位读取文件,filereader流以字符为单位读取文件
Fileoutstream流和filewtiter流顺序地写文件,只要不关闭流,每次调用writer方法的就顺序的向输出流写入内容,只到流被关闭。二者额区别是fileoutstream流以字节为单位些文件,filewtiter流以字符为单位文件
2、实验目的
本实验目的是掌握使用文件字符输入输出读写文件
3、实验要求
编写3个jsp页面inputcontent,jsp write,jsp read.jsp ,两个tag文件write.Tag和read.Tag 1).inputcontent,jsp的具体要求
inputcontent,jsp页面提供一个表单,要求该表单提供textarea的输入界面 用户可以通过textarea的输入界面多行文本提供交给write。Jsp界面 2.)write,jsp 的具体要求
write,jsp页面调用一个tag文件write,jsp将inputcontent,jsp 页面提交的文本信息加密后写入文件save.txt中。
3)read.jsp 的具体要求
read.jsp 页面提供一个表单,该表单提供两个单选按钮,名字分别是读取加密的文件和读取解密的文件 该页面选中的单选按钮的值提交给本页面如果该页面提交的值是单选按钮读取加密的文件的值 该页面调用tag文件read.tag读取文件save.txt如果该页面提交的值是单选按钮读取解密文件的值,该页面负责显示read.tag文件返回的有关信息 4)write.Tag的具体要求
write.Tag文件使用attribute指令获得write.jsp页面传递过来的文本信息,并使用文本文件输出流其写入到文件save.txt 5)read.Tag的具体要求 read.Tag文件使用文件输入流读取文件save.txt,并根据read.jsp的要求决定是否进行 6)代码
四、实验结果:
7)inputContent.jsp页面
8)write.jsp页面
9)read.jsp页面
10)
五、实验结果分析:
11)
1、FileInputStream流和FileReader流都是顺序的读取文件,只要不关闭流。每次调用read方法就顺利的读取源中其余的内容,直到源的末尾或流被关闭。两者的区别是Fileinputstream流以字节为单位读取文件,FileReader流以字符为单位读取文件。
12)
2、FileOutStream流和FileReader流都是顺序的写文件,只要不关闭文件,每次调用write方法就顺序的向输出流写入内容,直到流被关闭。二者的区别是FileOutStream流以字节为单位读取文件,FileReader流以字符为单位读取文件。
实验3 使用数据流读写Java数据
1、实验目的
本实验的目的是掌握使用数据流读写Java数据。
2、实验要求
编写两个JSP页面writeData.jsp和readData.jsp。
3、实验内容
1)writeData.jsp页面使用Java程序片将一个int型数据、一个long型数据、一个char型数据、一个String型数据和一个double型数据写入到名字为javaData.data的文件中。
2)readData.jsp页面读取javaData.data文件中的数据并显示出来。3)代码
4、实验结果
writeData.jsp页面
readData.jsp页面
5、实验结果分析
1、Java使用流(stream)来执行输入输出(I/O)的功能,流是一种数据的源头和目的之 间的通信途径.用于读入数据称为输入流(input stream), 用于写出数据称为输出流(output stream).2、当使用流时需要使用java.io包,因此在涉及数据流操作的程序中都要先导入 java.io包:import java.io.*;
第六章 JSP中使用数据库
要求在webapps目录下新建一个web服务目录chapter6。除特别要求外,本章实验所涉及的jsp页面均保存在chapter6中;tag文件保存在chapter6web-inttags目录中。
实验中用到的数据库为book,其中的表为bookform表。在进行实验之前首先完成下列任务:
1、使用microsoft access 2003 创建一个数据库book(book.mdb)。
2、在数据库book中创建名名字为bookform的表,表的字段及属性如图6-1所示。
3、讲数据库book设置为名字为information的数据源。
实验1 查询记录
1、相关知识点
本实验使用jdbc-odbc桥接器方式和数据库建立连接,查询数据库中表的记录的步骤是:(1)与数据库information建立连接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement对象;
Statement sql=con.createStatement();(3)向数据库发送关于查询记录的sql语句。返回查询结果,即Resultset对象
2、实验目的
本实验的目的是掌握使用jdbc查询数据库中表的记录。
3、实验要求
编写一个jsp页面inputMess.jsp。编写一个tag文件FindBook.tag。1)inputMess.jsp的具体要求
inputMess.jsp页面提供表单。表单允许用户输入要查询的内容,以及选择针对该内容的查询条件,比如,输入“实用”,那么可以指定该内容是书名的一部分或作者姓名等。inputMess.jsp页面查询条件条件提交给当前页面,当前页面调用FindBook.tag文件完成查询操作。2)FindBook.tag的具体要求
FindBook.tag文件的使用attribute指令获得inputMess.jsp页面传过来的字段的查询条件,然后与数据源information建立连接、根据得到的查询条件查询bookForm表。FindBook.tag文件使用variable指令的将查询结果返回给inputMess.jsp页面。
4、jsp页面的效果示例
inputMess.jsp的效果如图6-2所示。
5、参考代码
可以按照实验要求,参考本代码编写代码。1)jsp页面参考代码、实验结果
inputMess.jsp
7、实验结果分析:
1、DriverManager类:用语跟踪可用的JDBC驱动程序并产生数据库连接。
2、Connection接口:用于取得数据库信息、生成数据库语句,并管理数据库事务。
3、Statement接口:用于在基层连接上运行SQL语句,并且生成一个结果集。
4、查询结果一般封装在ResultSet对象中。ResultSet实际上是一张数据表。ResultSet对象有多种方法用来从查询结果中读取数据
5、在tag文件通过使用 attribute指令,就可以让调用该tag文件的jsp页面向该tag文件传递在jsp页面输入的查询内容的数据。tag文件通过使用variable属性可以从tag文件向jap页面返回符合查询条件的内容的数据
实验2 更新记录
1、相关知识点
本实验使用jdbc-odbc桥接器方式和数据库建立连接,查询数据库中表的记录的步骤如下:(1)与数据库information建立连接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement对象;
Statement sql=con.createStatement();(3)向数据库发送关于更新记录的sql语句: int m=sql.executeUpdate(更新记录的sql语句);更新成功m的值为1,否则为0。
2、实验目的
本实验的目的是掌握使用jdbc更新数据库中表的记录。
3、实验要求
编写一个jsp页面updateRecord.jsp和两个tag文件UpdateRecord.tag、GetRecord.tag。updateRecord.jsp负责调用GetRecord.tag文件,显示GetRecord.tag返回待更新的记录的有关字段的值;updateRecord.jsp调用UpdateRecord.tag文件,并显示UpdateRecord.tag返回的有关更新记录是否成功的信息。1)updateRecord.jsp的具体要求 updateRecord.jsp页面提供一个表单,该表单允许用户输入某种图书的isbn号以及针对该isbn号的图书的更新信息;该页面负责将图书的isbn号传递给GetRecord.tag,将图书的更新信息传递给UpdateRecord.tag。2)GetRecord.tag的具体要求
GetRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书的isbn号,并显示和该图书对应的记录。3)UpdateRecord.tag的具体要求
UpdateRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书更新信息,然后更新数据库中bookForm表中的记录,并返回更新成功的消息给updateRecord.jsp页面。
4、jsp页面效果示例
updateRecord.jsp的效果如图6-3所示。
5、参考代码
6、实验结果
updateRecord.jsp
7、实验结果分析
1、在数据库的连接于实验一是一样的,只是调用的方法不一样,在查询时Statement对象调用方法public int executeUpdate(String sql)
2、在jsp页面输入图书的ISBN号,GetRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书的ISBN号,在数据库里进行查找,并显示和该图书对应的记录
3、UpdateRecord.tag文件使用attribute指令获得updateRecord.jsp页面传递过来的图书更新信息即图书价钱的变化从39到25.5,然后更新数据库中bookForm表中的记录,并返回更新是否成功的消息给updateRecord.jsp页面。这样,如果在查询该图书,那么显示的信息就是更新后的。
实验3 删除记录
1、相关知识点
本实验使用jdbc-odbc桥接器方式和数据库建立连接,那么删除数据库中表的记录的步骤如下:
(1)与数据库information建立连接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement对象;
Statement sql=con.createStatement();(3)向数据库发送关于删除记录的sql语句: int m=sql.executeUpdate(更新记录的sql语句);删除成功m的值为1,否则为0。
2、实验目的
本实验的目的是掌握使用jdbc删除数据库中表的记录。
3、实验要求
编写一个jsp页面inputDeletedISBN.jsp和一个tag文件DelRecord.jsp.1)inputDeletedISBN.jsp的具体要求
inputDeletedISBN.jsp页面提供一个表单,该表单允许用户图书的ISBN提交到本页面。2)DelRecord.jsp的具体要求
inputDeletedISBN.jsp页面首先获得本页面提交的图书的ISBN,然后使用tag标记调用DelRecord.jsp删除数据库中表的相应的记录。
4、jsp页面效果示例
inputDeletedISBN.jsp的效果如图6-4所示:
5、参考代码
可以按照实验要求,参考本代码编写代码。
6、实验结果
inputDeletedISBN.jsp
7、实验结果分析:
1、在连接方法和所用的方法都与更新语句相同,因为executeUpdate()方法执行SQL的INSERT,UPDATE或DELETE语句,返回int值,给出受查询影响的行数
2、将图书的ISBN输入到件jsp页面,然后由tag文件进行相应的处理
3、将满足条件的图书直接删除,并将结果显示在本页面。
第七章 jsp与javabean 要求在webapps目录下新建一个web服务目录chapter7。除特别要求外,本章实验所涉及的jsp页面均保存在chapter7中。实验涉及的Javabean的包名均为bean.date,因此,要求在chapter7下建立子目录webclassesbeandate,Javabean的字节码文件保存在该子目录中。
实验1 有效范围为request的bean 1.相关知识点
JSP页面使用useBean标记调用一个有效范围是request的bean:
本实验的目的是掌握使用有效范围是request的bean的存储信息。3.实验要求
编写一个JSP页面inputAndShow.JSP和一个名字为computer的javabean,其中computer由pc.class类负责创建。
1)inputAndShow.jsp的具体要求
inputAndShow.jsp页面提供一个表单。其中表单允许用户输入计算机的品牌 型号和生产日期,该表单将用户输入的信息提交给当前调用名字为compter的bean,并使用表单提交的数据设置computer的有关属性的值,然后显示compter的各个属性值。2)pc.java的具体要求
编写的pc.java应当有描述计算机品牌 型号 生产日期的属性,并提供相应的getXxx和setXxx方法,来获取和修复这些属性的值。Pc.java中试用package语句,起的包名是bean.data。将pc.java编译后的字节码文件pc.class保存到chapter7WEB-INFclassesbeandata的目录中、4.JSP页面效果示列
inputAndShow.jsp的效果如图:
5、参考代码
可以按照实验要求,参考本代码编写代码。1)jsp页面参考代码、实验结果
inputAndShow.jsp页面
7、实验结果分析
1、JavaBean是一种可复用,跨平台的组件。
2、如果request的bean那么request是用户请求访问的当前组件、以及和当前web组件共享同一用户请求的web组件。范围是指在一个jsp网页发出请求到另一个jsp网页之间,随后这个属性就失效,设定request的范围时可利用request对象中的setattribute()和getattribute(),简单的讲就是客户端的一次请求。
实验2 有效范围为session的bean 1.相关知识点
JSP页面使用useBean标记调用一个有效范围是session的bean:
本实验目的是让学生掌握使用有效范围是session的bean显示计算机的信息,3.实验要求
本实验2要求和实验1类似,但是和实验1不同的是,要求编写两个jsp页面input.jsp和show,jsp。编写一个名字为compter的javabean,其中compter由pc.class类负责创建。
1)input.jsp的具体要求
input.jsp页面提供一个表单。其中表单允许用户输入计算机的品牌 型号和生产日期,该表单将用户输入的信息提交给当前调用名字为compter的bean,并使用表单提交的数据设置computer的有关属性的值。要求在input.jsp提供一个超链接以便用户单机这个超链接访问show.jsp页面。13)show.jsp的具体要求
Show.jsp调用名字为computer的bean,并显示bean的各个属性的值。3)pc.java的具体要求
编写的pc.java应当有描述计算机品牌 型号 生产日期的属性,并提供相应的getXxx和setXxx方法,来获取和修复这些属性的值。Pc.java中试用package语句,起的包名是bean.data。将pc.java编译后的字节码文件pc.class保存到chapter7WEB-INFclassesbeandata的目录中。4.JSP页面效果示列 Input.jsp的效果如图
show.jsp的效果如图
6、实验结果
input.jsp页面
Show.jsp页面
7、实验结果分析
1、session就是JavaBean对象被创建后,一直存在于当前回话中,在同一会话中,共享同一JavaBean
2、session基于会话的,当用户网页关闭的话,session就清空了或是到达了session最大的发呆时间。
实验3 有效范围application的bean 1.相关知识点
JSP页面使用useBean标记调用一个有效范围是application的bean:
本实验目的是掌握使用有效范围是application的bean制作一个简单留言板。3.实验要求
要求编写两个jsp页面inputMess.jsp和show.jsp。编写一个名字为board的javabean,其中board由MessBoard.class类负责创建.。第6章 inputMess.jsp的具体要求
inputMess.jsp页面提供一个表单。其中表单允许用户输入留言者的姓名 留言标题和留言内容,该表单将用户输入的信息提交的当前页面,当前页面调用名字为board的bean,并使用表单提交的数据设置board的有关属性的值。要求在inputMess.jsp中提供一个连接,已便用户单击这个超链接是访问show.jsp页面 第7章 show.jsp的具体要求
Show.jsp调用名字为board的bean,并显示该bean的allMessage属性的值 3)MessBoard.class的具体要求
编写MessBoard.java应当有刻画留言者的姓名.留言标题 和留言内容属性,并刻画全部留言信息的属性allMessage。将MessBoard.java保存到chapter7WEB-INFclassesbeandata的目录中。4.JSP页面效果示列
inputMess.jsp的效果如图 show.jsp的效果如图
5、参考代码
6、实验结果
inputMess.jsp页面
show.jsp 页面
7、实验结果分析
1、如果在scope指定范围内,该JavaBean已存在,则
3、Application:在服务器运行期间有效,当运行Tomcat时,就会生成Application,而且所有用户在访问相同服务目录项的文件时,application对象都是相同的,当关闭Tomcat时,Application对象失效。
第三篇:JSP实验报告(范文模版)
(1)创建名称为“UserInfo.java”类文件,该文件的主要代码如下:
package com;
public class UserInfo { private String username=“";
private String password=”“;
private String repassword=”“;
private String realname=”“;
private String sex=”“;
private String age=”“;
private String born=”“;
private String address=”“;
private String introduce=”“;
public String getUsername(){
return username;
} public void setUsername(String username){
this.username = username;
} public String getPassword(){
return password;
} public void setPassword(String password){
this.password = password;
} public String getRepassword(){
return repassword;
} public void setRepassword(String repassword){
this.repassword = repassword;
} public String getRealname(){
return realname;
} public void setRealname(String realname){
this.realname = realname;
} public String getSex(){
return sex;
} public void setSex(String sex){
this.sex = sex;
} public String getAge(){
return age;
} public void setAge(String age){
this.age = age;
} public String getBorn(){
return born;
} public void setBorn(String born){
this.born = born;
} public String getAddress(){
return address;
} public void setAddress(String address){
this.address = address;
} public String getIntroduce(){
return introduce;
} public void setIntroduce(String introduce){
this.introduce = introduce;
}
}
(2)用户注册页面的代码如下:
<%@ page contentType=”text/html;charset=gb2312“ language=”java“
im port=”java.sql.*“ errorPage=”“%>
第四篇:JSP内置对象实验报告
JSP程序设计实验报告
(三)院系:计算机科学与工程学院
【实验题目】
JSP内置对象
【实验目的】
1、了解JSP中4个内置对象request、reponse、session、pagecontext的基本概念。
2、理解JSP内置对象的常用方法的功能。
3、掌握JSP内置对象的应用。
【实验内容】
1、request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
2、response对象:response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
3、session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。
4、pageContext对象:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者。
5、练习(自己完成)
【实验代码】
实验1 request对象使用
<%@ page language=“java” import=“java.util.*” pageEncoding=“GBK”%> <%
%>
+ request.getServerName()+ “:” + request.getServerPort()+ path + “/”;
请求方式:<%=request.getMethod()%>
请求的资源:<%=request.getRequestURI()%>
请求用的协议:<%=request.getProtocol()%>
请求的文件名:<%=request.getServletPath()%>
请求的服务器的IP:<%=request.getServerName()%>
请求服务器的端口:<%=request.getServerPort()%>
客户端IP地址:<%=request.getRemoteAddr()%>
客户端主机名:<%=request.getRemoteHost()%>
表单提交来的值:<%=request.getParameter(”qwe“)%>
<%
%> String str = ”“;if(request.getParameter(”qwe“)!= null){ Enumeration enumt = request.getParameterNames();while(enumt.hasMoreElements()){ str = enumt.nextElement().toString();out.println(str + ”:“ + request.getParameter(str)+ ”
");} }
第五篇:网络编程实验报告
实验一 TCP Socket API程序设计
一、预备知识
1.网络编程基本概念
网络上的计算机间的通讯,实质上是网络中不同主机上的程序之间的通讯。在互联网中使用IP地址来标识不同的主机,在网络协议中使用端口号来标识主机上不同进程,即使用(IP地址,端口号)二元组。
套接字(Socket)用于描述IP地址和端口,是一个通信链的句柄,通信时一个网络程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡相连的传输介质将这段信息发送到另一台主机的Socket中,以供其他程序使用。
图1-1 TCP通信流程 2.TCP通信流程
TCP程序是面向连接的,程序运行后,服务器一直处于监听状态,客户端与服务器通信之前必须首先发起连接请求,由服务器接收请求并在双方之间建立连接后才可以互相通信。
二、实验目的
1.了解Winsock API编程原理; 2.掌握TCP Socket程序的编写; 3.了解C/S模式的特点; 4.学会解决实验中遇到的问题。
三、实验任务
使用Winsock API相关类实现TCP Socket通信程序,并能成功运行。
四、实验环境及工具
1.Windows2000/XP/7 2.Visual C++开发平台 3.Visual Studio2010
五、实验内容和步骤
参照《Visual C++网络编程教程》书中81页,TCP Socket API程序设计。连接:
void CChatClientDlg::OnConnect(){
WSADATA wsd;
//WSADATA结构
WSAStartup(MAKEWORD(2,2),&wsd);
//加载协议,使用Winsock 2.2版
m_client = socket(AF_INET,SOCK_STREAM,0);//创建流式套接字
//服务器地址
sockaddr_in serveraddr;
UpdateData();
if(ServerIP.IsBlank())
{
AfxMessageBox(“请指定服务器IP!”);
return;
}
if(sPort.IsEmpty())
{
AfxMessageBox(“请指定端口!”);
return;
}
//获取服务器进程的IP和端口
BYTE nFild[4];
CString sIP;
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);
//设置服务器地址结构的内容
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);
serveraddr.sin_port = htons(atoi(sPort));
//发起连接须指明要访问的服务器进程地址,这个地址存储在serveraddr中
if(connect(m_client,(sockaddr*)&serveraddr,sizeof(serveraddr))!= 0)
{
MessageBox(“连接失败”);
return;
}
else
{
m_ListWords.AddString(“连接服务器成功!”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
ServerIP.EnableWindow();
ServerPort.EnableWindow();
m_ButtonConnect.EnableWindow();
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);
m_ButtonExit.EnableWindow();}
“发送”按钮事件过程代码如下:
void CChatClientDlg::OnSend(){
//向服务器发送信息
UpdateData();
if(m_sWords.IsEmpty())
{
AfxMessageBox(“发送的消息不能为空!”);
return;
}
//开始发送数据
int i = send(m_client,m_sWords.GetBuffer(0),m_sWords.GetLength(),0);
m_ListWords.AddString(“发送:” + m_sWords);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
closesocket(m_client);
ServerIP.EnableWindow();
ServerPort.EnableWindow();
m_ButtonConnect.EnableWindow();
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);
m_ButtonExit.EnableWindow();} “清空”按钮的事件过程: m_ListWords.ResetContent();“关于”按钮的事件过程: CAboutDlg dlgAbout;dlgAbout.DoModal();
服务器端: 开始监听代码:
void CChatServerDlg::OnListen(){
WSADATA wsd;
//WSADATA结构
WSAStartup(MAKEWORD(2,2),&wsd);
//加载协议栈,使用Winsock 2.2版
m_server = socket(AF_INET,SOCK_STREAM,0);//创建流式套接字
//将网络中的事件关联到窗口的消息函数中,定义消息号为20000,侦测客户端的连接请求
WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);
m_client = 0;
BYTE nFild[4];
CString sIP;
UpdateData();
if(ServerIP.IsBlank())
{
AfxMessageBox(“请设置IP地址!”);
return;
}
if(sPort.IsEmpty())
{
AfxMessageBox(“请设置监听端口!”);
return;
}
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);
//服务器地址
sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);
serveraddr.sin_port = htons(atoi(sPort));
//绑定地址
if(bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))
{
MessageBox(“绑定地址失败.”);
return;
}
//监听开始,服务器等待连接请求的到来
listen(m_server,5);
m_ListWords.AddString(“监听开始:”);
m_ListWords.AddString(“地址” + sIP + “ 端口” + sPort);
m_ListWords.AddString(“等待客户端连接„„”);
//界面完善
m_ListWords.SetTopIndex(m_ListWords.GetCount()-1);
ServerIP.EnableWindow(false);
ServerPort.EnableWindow(false);
m_ButtonListen.EnableWindow(false);
m_ButtonStopListen.EnableWindow();
m_ButtonClear.EnableWindow();
m_ButtonExit.EnableWindow(false);} “停止监听”按钮事件过程代码如下: void CChatServerDlg::OnStopListen(){
//停止监听
closesocket(m_server);
m_ListWords.AddString(“停止监听”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);} “断开”按钮事件过程代码如下: void CChatServerDlg::OnDisconnect(){
closesocket(m_client);
m_ListWords.AddString(“与客户端断开”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
//界面完善
m_ButtonDisconnect.EnableWindow();
m_EditWords.EnableWindow();
m_ButtonSend.EnableWindow();} ReceiveData()函数代码如下:
void CChatServerDlg::ReceiveData(){
//接收客户端的数据
char buffer[1024];
int num = recv(m_client,buffer,1024,0);
buffer[num] = 0;
CString sTemp;
sTemp.Format(“收到:%s”,buffer);
m_ListWords.AddString(sTemp);//显示信息
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
closesocket(m_client);//关闭与客户端通信的Socket
WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);//准备接收新的客户端连接
//界面完善
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);} 服务器的初始化代码如下: //界面初始化
m_ButtonStopListen.EnableWindow(false);m_ButtonDisconnect.EnableWindow(false);m_ButtonClear.EnableWindow(false);m_EditWords.EnableWindow(false);m_ButtonSend.EnableWindow(false);
运行结果:
六、思考题
1.用Winsock API编程时,主要进行哪些通行的操作步骤? 2.阐述C/S模式的通信过程。答:
1.通行的操作
1.Winsock的打开(WSAStartup())。2.建立套接字(socket()或WSASocket())。3.地址绑定(bind())。
4.服务器监听连接(listen())。
5.客户端提出连接申请(connect()或WSAConnect())。6.服务器接收客户端的连接请求(accept()或WSAAccept())。7.数据的发送(send()或WSASend(),sendto()或WSASendTo())。8.数据的接收(recv()或WSARecv(),recvfrom()或WSARecvfrom())。9.关闭套接字(closesocket())。10.关闭Winsock(WSACleanup())。
2通信过程