《JSP编程》教学及实验大纲
《JSP编程》课程实验指导书说明与约定
一、编写原则
编写本指导书的指导原则是:以适应市场经济对计算机专业人才的需要和学生就业需求为宗旨,以学生的实践动手能力培养为重点,突出学生学习的主体地位,给定题目及要求,以学生为主,独立或小组协作完成;鼓励学生创新;实验过程中和课余的其他时间,教师应以辅导、指导、引导为主要教学手段;加强考核,以实践能力考核为指挥棒,促使学生重视程序设计能力的提高。
二、总体要求
实验课之前要写出实验预习报告(重点:实验名称、源代码)。体现Java编程风格(源代码缩进Tab4,块花括号在类、方法名同行,等等),每个类、每个方法都要有功能说明,其说明用文档注释方式表示/*……*/。
实验一JSP页面与JSP标记(4学时)
一、实验目的
1.掌握JDK的安装配置
2.熟悉Tomcat的配置
3.测试JSP的运行环境
4.掌握JSP的页面的基本结构
5.掌握JSP的指令标记和动作标记
二、实验要求
1.实验课之前,下载最新版本的JDK和Tomcat,并在自备微机上安装配置。
2.实践内容:根据实验任务1~任务3要求,编写程序,调试运行。
3.该实验共有3个任务。要求在webapps目录下新建一个Web服务目录:test1。除特别要求外,本章实验中涉及的JSP页面均保存在test1中。
任务1JSP页面的基本结构
1.相关知识点
一个JSP页面可由普通的HTML标记、JSP标记、成员变量和方法的声明、Java 程序片以及Java表达式组成。JSP引擎把JSP页面中的HTML标记交给用户的浏览器执行显示;JSP引擎负责处理JSP标记、变量和方法声明;JSP引擎负责运行Java程序片、计算Java 表达式,并将需要显示的结果发送给用户的浏览器。
JSP页面中的成员变量是被所有用户共享的变量。Java 程序片可以操作成员变量,任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。如果多个用户访问一个JSP页面,那么该页面中的Java程序片就会被执行多次,分别运行在不同的线程中,即运行在不同的时间片内。运行在不同线程中的Java程序片的局部变量互不干扰,即一个用户改变Java程序片中的局部变量的值不会影响其他用户的Java程序片中的局部变量。
2.实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用成员变量,怎样使用Java程序片、Java表达式。
3.实验要求
编写两个JSP页面,分别为inputName.jsp和people.jsp。
(1)inputName.jsp的具体要求
该页面有一个表单,用户通过该表单输入自己的姓名并提交给people.jsp页面。
(2)people.jsp的具体要求
该页面有名字为person、类型是StringBuffer以及名字是count、类型为int的成员
变量。
该页面有public void judge ()方法。该方法负责创建person对象,当count的值是0
时,judge ()方法创建person对象。
该页面有public void addPerson(String p)方法,该方法将参数p指定的字符串添加到
成员变量person末尾,同时将count作自增运算。
该页面在程序片中获取inputName.jsp页面提交的姓名,然后调用judge()创建person
对象、调用addPerson方法将用户的姓名添加到成员变量person末尾。
如果inputName.jsp页面没有提交姓名,或姓名含有的字符个数大于10,就使用
通过Java表达式输出person和count的值。
4.JSP页面效果示例
inputName.jsp(效果如图1-1所示)
图1-1 输入姓名
people.jsp(效果如图1-2所示)
图1-2 显示姓名和人数
5.参考代码
代码仅供参考,学生可按照实验要求,参考本代码编写代码。
JSP页面参考代码
inputName.jsp
<%@ page contentType="text/html;charset=GB2312" %>
people.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%!
int count;
StringBuffer person;
public void judge()
{
if(count==0)
person=new StringBuffer();
}
public void addPerson(String p)
{
if(count==0)
{
person.append(p);
}
else
{
person.append(","+p);
}
count++;
}
%>
<%
String name=request.getParameter("name");
byte bb[]=name.getBytes("iso-8859-1");
name=new String(bb);
if(name.length()==0||name.length()>10)
{
%>
<% }
judge();
addPerson(name);
%>
目前共有<%=count%>人浏览了该页面,他们的名字是:
<%=person%>
任务2JSP指令标记
1.相关知识点
page 指令<%@ page 属性1="属性1的值" 属性2= "属性2的值" …%>用来定义整个JSP页面的一些属性和这些属性的值。比较常用的两个属性是contentType和import。page
指令只能为contentType指定一个值,但可以为import属性指定多个值。
include指令标记<%@ include file= "文件的URL " %>的作用是在JSP页面出现该指令的位置处,静态插入一个文件。被插入的文件必须是可访问和可使用的,如果该文件和当前JSP页面在同一Web服务目录中,那么“文件的URL”就是文件的名字;如果该文件在JSP 页面所在的Web服务目录的一个子目录中,比如fileDir子目录中,那么“文件的URL”就是“fileDir/文件的名字”。include指令标记在编译阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖于当前JSP页面,其优点是页面的执行速度快。
2.实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用page指令设置contentType的值;使用include指令在JSP页面中静态插入一个文件的内容。
3.实验要求
编写三个JSP 页面:first.jsp 、second.jsp和third.jsp。另外,要求用“记事本”编写一个TXT文件hello.txt。hello.txt的每行有若干个英文单词,单词之间用空格分隔,每行之间用“
”分隔,如下所示:
hello.txt
package apple void back public
private throw class hello welcome
(1)first.jsp的具体要求
first.jsp使用page指令设置contentType属性的值是text/plain,使用include指令静态插入hello.txt文件。
(2)second.jsp的具体要求
second.jsp使用page指令设置contentType属性的值是application/vnd.ms-powerpoint,使用include指令静态插入hello.txt文件。
(3)third.jsp的具体要求
third.jsp使用page指令设置contentType属性的值是application/msword,使用include 指令静态插入hello.txt文件。
4.JSP页面效果示例
first.jsp(效果如图1-3所示)
图1-3 contentType的值是text/plain
second.jsp(效果如图1-4所示)
图1-4 contentType的值是application/vnd.ms-powerpoint third.jsp(效果如图1-5所示)
图1-5 contentType的值是application/msword 5.参考代码
代码仅供参考,学生可按照实验要求,参考本代码编写代码。JSP页面参考代码
first.jsp
<%@ page contentType="text/plain" %>
<%@include file="hello.txt" %>
second.jsp
<%@ page contentType="application/vnd.ms-powerpoint" %>
<%@include file="hello.txt" %>
third.jsp
<%@ page contentType="application/msword" %>
<%@include file="hello.txt" %>
任务3JSP动作标记
1.相关知识点
include 动作标记
forward动作标记
2.实验目的
本实验的目的是让学生掌握怎样在JSP页面中使用include标记动态加载文件;使用forward实现页面的转向。
3.实验要求
编写四个JSP 页面:one.jsp 、two.jsp、three.jsp和error.jsp。one.jsp 、two.jsp和three.jsp 页面都含有一个导航条,以便让用户方便地单击超链接访问这三个页面,要求这三个页面通过使用include动作标记动态加载导航条文件head.txt。
导航条文件head.txt的内容如下所示:
head.txt
<%@ page contentType="text/html;charset=GB2312" %>
one.jsp页面 | two.jsp页面 | three.jsp页面 |
(1)one.jsp的具体要求
要求one.jsp页面有一个表单,用户使用该表单可以输入一个1~100之间的整数,并提
交给该页面;如果输入的整数在50~100之间(不包括50)就转向three.jsp,如果在1~50之间就转向two.jsp;如果输入不符合要求就转向error.jsp。要求forward标记在实现页面转向时,使用param子标记将整数传递到转向的two.jsp或three.jsp页面,将有关输入错误传递到转向的error.jsp页面。
(2)two.jsp、three.jsp和error.jsp的具体要求
要求two.jsp和three.jsp能输出one.jsp传递过来的值,并显示一幅图像,该图像的宽和高刚好是one.jsp页面传递过来的值。error.jsp页面能显示有关的错误信息和一幅图像。
4.JSP页面效果示例
one.jsp(效果如图1-6所示)
图1-6 使用include动作标记加载导航条
two.jsp(效果如图1-7所示)
图1-7 得到param子标记传递来的值
three.jsp(效果如图1-8所示)
图1-8 得到param子标记传递来的值
error.jsp(效果如图1-9所示)
图1-9 显示错误信息
5.参考代码
代码仅供参考,学生可按照实验要求,参考本代码编写代码。
JSP页面参考代码
one.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%
String num=request.getParameter("number");
if(num==null)
{ num="0";
}
try
{
int n=Integer.parseInt(num);
if(n>=1&&n<=50)
{
%>
<% }
else if(n>50&&n<=100)
{
%>
<% }
}
catch(Exception e)
{
%>
<% }
%>
two.jsp
<%@ page contentType="text/html;charset=GB2312" %>
This is two.jsp.
<%
String s=request.getParameter("number");
out.println("
传递过来的值是"+s);
%>
three.jsp
<%@ page contentType="text/html;charset=GB2312" %>
This is three.jsp.
<%
String s=request.getParameter("number");
out.println("
传递过来的值是"+s);
%>
error.jsp
<%@ page contentType="text/html;charset=GB2312" %>
This is error.jsp.
<%
String s=request.getParameter("mess");
out.println("
传递过来的错误信息"+s);
%>
实验二 JSP与JavaBean (2学时)
一、实验目的
1.理解JavaBean 的作用
2.能够定义JavaBean
3.能在jsp 页面中使用JavaBean
二、实验要求
1.实验课之前,认真复习教材上关于第五章中的例题,例如教材上5.4.1三角形bean。
2.设计一个定书程序,实现:可以进行定书功能并查看订单信息。要求:
⑴要求在webapps目录下新建一个Web服务目录:test2。除特别要求外,本章实验中涉及的JSP页面均保存在test2中。
⑵设计三个JSP页面和一个Java类,其中三个JSP页面的效果如下:
index.jsp页面效果
图2-1 输入书的相关信息
saveinfo.jsp页面效果
图2-2 提交后的页面
viewbook.jsp页面效果:
图2-3 书的详细信息
三、参考代码:代码仅供参考,学生可按照实验要求,参考本代码编写代码。
1 )index.jsp
<%@page contentType="text/html;charset=GBK"%>
2) saveinfo.jsp
<%@page contentType="text/html;charset=GBK"%>
3) viewbook.jsp:
<%@page contentType="text/html;charset=GBK"%>
书号 | |
书名 | |
数量 | |
作者 |
4) BookBean.java:
package com.bookshop.order;
public class BookBean{
private String bid;
private String bname;
private int number;
private String wr;
public void setBid(String bid){ this.bid=bid;
}
public String getBid(){
return this.bid;
}
public void setBname(String bname){ this.bname=bname;
}
public String getBname(){
return this.bname;
}
public void setNumber(int number){ this.number=number;
}
public int getNumber(){
return this.number;
}
public void setWr(String wr){
this.wr=wr;
}
public String getWr(){
return this.wr;
}
}
实验三 JSP的文件操作(2学时)
一、实验目的
1.继续掌握JavaBean的概念。
2.掌握JSP的输入和输出流。
3.掌握在页面中读写文件中的数据。
4.掌握如何进行文件操作。
二、实验要求
1.课余时间且在实验课之前,认真复习教材上关于文件操作的例题。
2.实现一系统,具体要求:该系统能够实现文件上传功能和下载功能,显示文件列表和读取文件内容功能。
3.要求在webapps目录下新建一个Web服务目录:test3。除特别要求外,本章实验中涉及的JSP页面均保存在test3中。
upfile.jsp实现文件上传功能,顶部为三个页面的超链接。页面效果如图3-1所示:
图3-1 文件上传页面
listdir.jsp实现列出服务目录所有文件和子目录的功能,并且能够显示指定文件内容功能。页面效果如图3-2所示:
图3-2显示文件列表以及文件内容页面
downfile.jsp实现文件下载功能,示例中为直接指定能够下载的文件,学生应该进行改进,实现能够根据服务目录的变化而变化的效果。页面效果如图3-3所示:
图3-3 文件下载页面
三、参考代码:代码仅供参考,学生可按照实验要求,参考本代码编写代码。upfile.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="tom.jiafei.UpFile" %>
选择要上传的文件:
<% upFile.setRequest(request);
upFile.setSession(session);
%>
downfile.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="tom.jiafei.DownLoadFile" %>
<%@ page import="java.io.*" %>
选择要下载的文件:
<% downFile.setResponse(response);
%>
listdir.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="tom.jiafei.ReadFile" %>
该目录
有如下文件:
文件内容如下: