JSP程序设计实验指导new
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSP程序设计实验指导书
适用专业:计算机科学与技术
制定人:梁晟
教研室:计算机专业教研室
贵阳学院计算机科学系
2007年9月
实验一 Netbeans下 Jsp编程
【实验目的】
(1)熟悉Jsp的语法
(2)掌握Jsp开发步骤
(3)熟练掌握Netbeans开发环境
(4)开发简单的登录模块
【实验内容:】
实现简单的用户登陆功能,不要求连接数据库。
【参考代码:】
输入以下代码:
Index.jsp
<%@page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>login</title>
</head>
<body bgcolor="#ffffff">
<form action="check.jsp" method="POST">
<table>
<tr>
<td>用户名:</td>
<td>
<input type="text" name="name"/>
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<input type="password" name="pass"/>
</td>
</tr>
<tr>
<td> </td>
<td>
<input type="submit" value="Submit"/>
</td>
</tr>
</table>
</form>
</body>
Check.jsp
<%@ page contentType="text/html; charset=GBK" %> <html>
<head>
<title>
check
</title>
</head>
<body bgcolor="#ffffff">
<%
String name=request.getParameter("name");
String pass=request.getParameter("pass");
if(name==null)name="";
if(pass==null)pass="";
if(name.equals("jkx")&&pass.equals("jkx"))
{
%>
<jsp:forward page="welcome.jsp"/>
<%
}
else
{
%>
<jsp:forward page="error.jsp"/>
<%
}
%>
</body>
</html>
Welcome.jsp
<%@ page contentType="text/html; charset=GBK" %> <html>
<head>
<title>
welcome
</title>
</head>
<body bgcolor="#ffffff">
<h1>
Welcome to China!
</body>
</html>
Error.jsp
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
error
</title>
</head>
<body bgcolor="#ffffff">
<h1>
name or password error! <a href="login.jsp">Return to login</a> </h1>
</body></html>
实验二 JDBC 编程
【实验目的】
(1)熟悉Sqlserver2000常见操作
(2)熟悉使用JDBC操作数据库
【实验要求】
进行JDBC编程,实现数据查询功能。
【参考代码:】
编写下列程序调试:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<% Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try { con=DriverManager.getConnection("jdbc:odbc:sun","sa",""); sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM students");
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"学号");
out.print("<TH width=100>"+"姓名");
out.print("<TH width=50>"+"数学成绩");
out.print("<TH width=50>"+"英语成绩");
out.print("<TH width=50>"+"物理成绩");
out.print("</TR>");
while(rs.next())
{ out.print("<TR>");
out.print("<TD >"+rs.getString(1)+"</TD>");
out.print("<TD >"+rs.getString(2)+"</TD>");
out.print("<TD >"+rs.getInt("数学成绩")+"</TD>");
out.print("<TD >"+rs.getInt("英语成绩")+"</TD>");
out.print("<TD >"+rs.getInt("物理成绩")+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
con.close();
}
catch(SQLException e1) {}
%>
</BODY>
</HTML>
Example5_2.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<% Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try { con=DriverManager.getConnection("jdbc:odbc:sun","sa",""); sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM students WHERE 英语成绩 >= 80 ");
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"姓名");
out.print("<TH width=50>"+"英语成绩");
out.print("</TR>");
while(rs.next())
{ out.print("<TR>");
out.print("<TD >"+rs.getString(2)+"</TD>");
out.print("<TD >"+rs.getInt("英语成绩")+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
con.close();
}
catch(SQLException e1) {}
%>
</BODY>
</HTML>
Example5_3.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<% String name,number;
int math,physics,english;
Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try{ con=DriverManager.getConnection("jdbc:odbc:sun","sa",""); sql=
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_ READ_ONLY);
//返回可滚动的结果集:
rs=sql.executeQuery("SELECT * FROM students");
//将游标移动到最后一行:
st();
//获取最后一行的行号:
int lownumber=rs.getRow();
out.print("该表共有"+lownumber+"条记录");
out.print("<BR>现在逆序输出记录:");
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"学号");
out.print("<TH width=100>"+"姓名");
out.print("<TH width=50>"+"数学成绩");
out.print("<TH width=50>"+"英语成绩");
out.print("<TH width=50>"+"物理成绩");
out.print("</TR>");
//为了逆序输出记录,需将游标移动到最后一行之后:
rs.afterLast();
while(rs.previous())
{ out.print("<TR>");
number=rs.getString(1);
out.print("<TD >"+number+"</TD>");
name=rs.getString(2);
out.print("<TD >"+name+"</TD>");
math=rs.getInt("数学成绩");
out.print("<TD >"+math+"</TD>");
english=rs.getInt("英语成绩");
out.print("<TD >"+english+"</TD>");
physics=rs.getInt("物理成绩");
out.print("<TD >"+physics+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
out.print("单独输出第5条记录<BR>"); rs.absolute(5);
number=rs.getString(1);
out.print(number+",");
name=rs.getString(2);
out.print(name+",");
math=rs.getInt("数学成绩");
out.print(math+",");
english=rs.getInt("英语成绩"); out.print(english+",");
physics=rs.getInt("物理成绩"); out.print(physics+"。
");
con.close();
}
catch(SQLException e1) {}
%>
</BODY>
</HTML>
实验三数据的分页
【实验目的】
(1)掌握Jdbc连接数据库的技术
(2)使用Jsp进行数据的分页
(3)会使用纯Java驱动访问数据库
【实验要求】
使用Jsp进行数据的分页,要实现超链接方式的数据分页,即首页、末页、上一页、下一页功能;
【参考代码:】
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<%! int pageSize = 3; //每页显示的记录数。
int pageCount = 0; //分页后的总页数。
%>
<%-- 客户通过表单提交欲要显示的页码数--%>
<FORM action="" method=get >
输入页码数<Input Type=text name=showPage size=4 >
<Input Type=submit name=g value=提交>
</FORM>
<% Connection con;
Statement sql;
ResultSet rs;
try {
//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//SQL Server本地协议纯java驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
long start = System.currentTimeMillis();
// con = DriverManager.getConnection("jdbc:odbc:aaa", "", ""); //jdbc:sqlserver://localhost:1433; DatabaseName=shoppingDB
con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=pubs",
"aa", "aa");
sql =
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
//返回可滚动的结果集:
rs = sql.executeQuery("SELECT * FROM jobs");
//将游标移动到最后一行:
st();
//获取最后一行的行号:
int lastRow = rs.getRow();
//计算分页后的总页数:
pageCount = (lastRow % pageSize == 0) ? (lastRow / pageSize) : (lastRow / pageSize + 1);
//当前显示的初始页数:
int showPage = 1;
//告知客户总页数:
%>
<P> 共有<%=pageCount%>页
<BR>每页显示<%=pageSize%>条记录.
<% //获取客户想要显示的页数:
String integer = request.getParameter("showPage");
if (integer == null) {
integer = "1";
}
try {
showPage = Integer.parseInt(integer);
} catch (NumberFormatException e) {
showPage = 1;
}
if (showPage <= 1) {
showPage = 1;
}
if (showPage >= pageCount) {
showPage = pageCount;
}
%>
<BR>目前显示第<%=showPage%>页
<a href="showByPage.jsp?showPage=1">首页</a> <a href="showByPage.jsp?showPage=<%=showPage - 1%>">上一页</a> <a href="showByPage.jsp?showPage=<%=showPage + 1%>">下一页</a> <a href="showByPage.jsp?showPage=<%=pageCount%>">末页</a>
<% //如果要显示第showPage页,那么游标应移到posion的值是:
int posion = (showPage - 1) * pageSize + 1;
rs.absolute(posion); // 设置游标的位置
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>" + "学号");
out.print("<TH width=100>" + "姓名");
out.print("<TH width=50>" + "操作系统");
out.print("<TH width=50>" + "微机原理");
//out.print("<TH width=50>" + "数据结构");
out.print("</TR>");
for (int i = 1; i <= pageSize; i++) {
out.print("<TR>");
out.print("<TD >" + rs.getString(1) + "</TD>");
out.print("<TD >" + rs.getString(2) + "</TD>");
out.print("<TD >" + rs.getString(3) + "</TD>");
out.print("<TD >" + rs.getString(4) + "</TD>");
// out.print("<TD >" + rs.getString(5) + "</TD>");
// out.print("<TD >" + rs.getInt(3) + "</TD>");
//out.print("<TD >" + rs.getInt(4) + "</TD>");
// out.print("<TD >" + rs.getInt(5) + "</TD>");
out.print("</TR>");
if (!rs.next()) {
break;//rs移动到最后一行后,没有数据了,应该提前结束循环
}
}
out.print("</Table>");
con.close();
System.out.println("Expire time: " + (System.currentTimeMillis() - start));
} catch (SQLException e1) {
e1.printStackTrace();
}
%>
</BODY>
</HTML>
实验四 JavaBean 在JSP页面中的应用
【实验目的】
掌握JavaBean的编程规范
熟悉JavaBean 在JSP 页面中的使用
【实验内容:】
编写一个使用JavaBean的网页猜数程序
【参考代码:】
参考代码如下:
GuessNumber.java:
public class GuessNumber
{ int answer=0, //实际答案。
guessNumber=0, //客户猜测的数。
guessCount=0; //客户猜到正确答案之前所用的次数。
String result=null;
public void setAnswer(int n)
{ answer=n;
guessCount=0;
}
public int getAnswer()
{return answer;
}
public void setGuessNumber(int n)
{ guessNumber=n;
guessCount++;
if(guessNumber==answer)
result="恭喜,猜对了";
else if(guessNumber>answer)
result="猜大了";
else if(guessNumber<answer)
result="猜小了";
}
public int getGuessNumber()
{return guessNumber;
}
public int getGuessCount()
{return guessCount;
}
public String getResult()
{return result;
}
}
获取一个随机数页面(效果如图6.29所示)
getNumber.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="GuessNumber" %>
<HTML>
<BODY>
<% int n=(int)(Math.random()*100)+1;%>
<jsp:useBean id="guess" class="GuessNumber" scope="session" >
</jsp:useBean>
<jsp:setProperty name= "guess" property="answer" value="<%=n%>" />
<p>随机给你一个1到100之间的数,请猜测这个数是多少?
<% String str=response.encodeRedirectURL("guess.jsp");
%>
<Form action="<%=str%>" method=post >
<BR>输入你的猜测 <Input type=text name="guessNumber">
<Input type=submit value="提交">
</FORM>
</BODy>
猜数页面(效果如图6.30所示)
guess.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="GuessNumber" %>
<HTML>
<BODY>
<jsp:useBean id="guess" class="GuessNumber" scope="session" >
</jsp:useBean>
<jsp:setProperty name= "guess" property="guessNumber" param="guessNumber" /> <BR>
<jsp:getProperty name= "guess" property="result" />
<br>这是第
<jsp:getProperty name= "guess" property="guessCount" />
猜
<BR>你给出的数是
<jsp:getProperty name= "guess" property="guessNumber" />
<% String str=response.encodeRedirectURL("guess.jsp");
%>
<Form action="<%=str%>" method=post >
<BR>再输入你的猜测 <Input type=text name="guessNumber">
<Input type=submit value="提交">
</FORM>
<% String str1=response.encodeRedirectURL("getNumber.jsp");
%>
<BR><FORM action="<%=str1%>" method="post" name="f">
<Input type="submit" value="重新玩">
</FORM>
</BODy>
</HTML>
实验五 Jbuilder 下 Servlet编程
【开发语言及实现平台或实验环境】
Windows 2000(sp2) 或Windows XP 操作系统,需要的软件有:Jbuilder Jdk1.5
【实验目的】
(4)验证Servlet 工作原理
(5)掌握Servlet开发步骤
(6)使用Servlet技术实现简单的注册模块
【参考代码:】
参考代码:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY bgcolor=cyan><Font size=1 >
<FORM action="examples/servlet/LoginByServlet" method=post >
<P>输入你的姓名:
<INPUT type="text" name="name" value="abc">
<BR>
<P>输入你的e-mail地址:
<INPUT type="text" name="address" value="ookk@">
<P>点击送出按钮:
<BR>
<INPUT TYPE="submit" value="送出" name=submit>
</FORM>
</FONT>
</BODY>
</HTML>
sevlet源文件
LoginByServlet.java:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LoginByServlet extends HttpServlet
{ Hashtable hashtable=new Hashtable();
public void init(ServletConfig config) throws ServletException
{super.init(config);
}
public synchronized void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ //获得一个向客户发送数据的输出流:
PrintWriter out=response.getWriter();
response.setContentType("text/html;charset=GB2312");OutputStream();
response.setContentType("text/html");//设置响应的MIME类型。
out.println("<HTML>");
out.println("<BODY>");
//获取用户提交的名字:
String person_name=request.getParameter("name"),
name_found=null;
if(person_name==null)
{person_name="";
}
//在散列表查找是否已存在该名字:
name_found=(String)hashtable.get(person_name);
if(name_found==null)
{ String person_email=request.getParameter("address");
if(person_email==null)
{person_email="";
}
StringTokenizer fenxi=new StringTokenizer(person_email," @");
int n=fenxi.countTokens();
if(n>=3)
{out.print("<BR>"+"there are exists illegal letters in your email");
}
else
{ hashtable.put(person_name,person_name);
out.print("<BR>"+"login success!");
out.print("<BR>"+"your name is "+person_name);
}
}
else
{out.print("<BR>"+"This name has exist ");
}
out.println("</BODY>");
out.println("</HTML>");
}
public synchronized void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
doPost(request,response);
}
}
实验六 Servlet版的购物车
【开发语言及实现平台或实验环境】
Windows 2000(sp2) 或Windows XP 操作系统,需要的软件有:Jbuilder Jdk1.5
【实验目的】
(1)进一步掌握servlet的开发技术
(2)开发一个购物车模块
【实验要求】
要求学生能够独立编程获取ServletConfig对象,实现Servlet 间参数获取。
【实验原理】
在Servlet 中要得到ServletConfig 对象的方法有:通过init()方法获取,通过getServletConfig()方法直接获取。
【参考代码:】
负责添加商品的servlet
AddCar.java:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class AddCar extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse
response)
throws ServletException,IOException
{ //获得一个向客户发送数据的输出流:
PrintWriter out=response.getWriter();
response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
out.println("<HTML>");
out.println("<BODY>");
HttpSession session=request.getSession(true); //获取客户的会话对象
String item =request.getParameter("item"), //获取客户选择的商品名称。
mount=request.getParameter("mount"), //获取客户购买的数量。
unit =request.getParameter("unit"); //获取商品的计量单位。
//将客户的购买信息存入客户的session对象中。
String str="Name: "+item+" Mount:"+mount+" Unit:"+unit;
session.setAttribute(item,str);
//将购物车中的商品显示给客户:
out.println(" goods in your car: ");
Enumeration enum=session.getAttributeNames();
while(enum.hasMoreElements())
{ String name=(String)enum.nextElement();
out.print("<BR>"+(String)session.getAttribute(name));
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
doPost(request,response);
}
}
选择删除商品的JSP页面
remove.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*" %>
<%@ page import="Car1" %>
<HTML>
<BODY bgcolor=cyan><Font size=1>
<P>选择要从购物车中删除的商品:
<FORM action="examples/servlet/RemoveGoods" method=post name=form>
<Select name="item" value="没选择">
<Option value="TV">电视机
<Option value="apple">苹果
<Option value="coke">可口可乐
<Option value="milk">牛奶
<Option value="tea">茶叶
</Select>
<Input type=submit value="提交删除">
</FONT>
</BODY>
</HTML>
负责删除商品的servlet
RemoveGoods.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RemoveGoods extends HttpServlet
{public void init(ServletConfig config) throws ServletException
{super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{ //获得一个向客户发送数据的输出流:
PrintWriter out=response.getWriter();
response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
out.println("<HTML>");
out.println("<BODY>");
HttpSession session=request.getSession(true); //获取客户的会话对象
String item =request.getParameter("item"); //获取要删除的商品名称。
session.removeAttribute(item); //删除商品。
//将购物车中的商品显示给客户:
out.println("<H3>Now goods in your car:</H3> ");
Enumeration enum=session.getAttributeNames();
while(enum.hasMoreElements())
{ String name=(String)enum.nextElement();
out.print("<BR>"+(String)session.getAttribute(name));
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{ doPost(request,response);
}
}
实验七搭建Eclipse 下的J2EE 开发环境
【开发语言及实现平台或实验环境】
Windows 2000(sp2) 或Windows XP 操作系统,需要的软件有:Eclipse Lomboz等插件【实验目的】
(1)了解Eclipse开发环境的构成
(2)掌握Eclipse安装插件的步骤
【实验要求】
要求学生能够独立进行系统的安装和系统配置以及进行优化,掌握基本的操作方法。
【实验原理】
Jbuilder 作为J2EE开发环境,必须有JDK的支持。
为了简化操作,也需要Lomboz等插件的支持。
【实验步骤:】
(1)检查安装JDK是否安装
1)在Windows控制台下(进入控制台方法:主菜单—运行--cmd),在命令输入栏里面
输入:java –version,然后查看显示的JDK版本.如果没有显示,跳至set 2;
2)检查环境变量的设置,包括Java_Home 变量和向Classpath 变量。
具体如下:在桌
面上点击”我的电脑”—点击鼠标右键--选择属性,弹出系统属性对话框,选择高
级,单击环境变量,在弹出的对话框中,检查JAVA_HOME 和CLASSPATH变量,看看
其设置情况。
同时,检查PATH 变量的设置情况。
(对于环境变量,不要随便改动
否则,影响系统的运行!)
3) 如果,Setp 1 中没有发现java 信息,注意环境变量的设置情况。
(2) 检查Jbuilder 软件的安装
系统中已经安装了Jbuilder 位置:D:\Program Files\ben\Jbuilder,打开该目录,
对Jbuilder.exe 在桌面上建立一个快捷方式,并对该快捷方式的属性进行如下修改,
(由于系统已经安装了还原卡,本次设置,在下次重启系统后,丢失下次实验开始,仍然需要重新设置Jbuilder 的快捷方式)
添加 –clean 启动
参数
(3)检查Jboss 是否安装,首先需要检查JBOSS_HOME环境变量,并根据环境变量,找到JBOSS
的安装位置。
然后,启动JBOSS_HOME\bin\run.bat 文件,观察控制台的输出,直到下面信息出现,表明JBoss 启动正常,否则,为启动异常,查看异常信息。
(4)如果
Jboss 成功启动,打开IE,并输入:http://localhost:8080/jmx-console能够出现Jboss 启动页面。
(5)检查 Lomboz插件的安装
Lomboz插件的安装过程是把给定的文件解压后,把解压出来的文件,直接拷贝到
Jbuilder_Home/plugins/下;然后重新启动Jbuilder 使用菜单windows—Perferences 打开对话框后查看是否有Lomboz分支。
如果有说明安装成功,如果没有,说明安装没有成功。
(6)Lomboz 的激活
Lomboz 的激活相对复杂,具体过程请详细阅读教材:P16-20
(7)开发环境测试。
将给定的测试程序,通过Jbuilder下File---New—Lomboz J2EE Project
菜单,(整个创建Servlet的过程,详细参考教材:P20—23页)(注意:课本上使用的Jboss3.0.8的版本,而实验机器上是Jboss 4.0版本,因此,不能把课堂上给的代码通过import 直接导入到Jbuilder 下面!但相同文件下面的代码可以通过复制,直接粘贴到所建项目的对应文件下面。
)
(8)最后,打开本机的IE,并在地址栏输入:http://127.0.0.1:8080/MyWeb/index.jsp 如
果ie中有当时的日期和时间,说明一切安装成功,否则,请从步骤2)重新检查各个步骤
的设置情况。