动态网页修改数据库数据
JSP动态网页连接访问数据库,修改数据的操作一般有两种方式,一种是用于前台的,只能修改数据库表中的一条记录;另一种是用于后台系统管理员操作使用的,可以方便的修改表中的任何一条记录。本节分别对两种进行介绍。
一、 范例的演示和代码清单
演示的前提和前几节完全相同。
演示步骤:
1. 启动IE,在地址栏键入http://127.0.0.1:8080/ch4/ch4-51.htm,用户名处,输入数据库表中,已经存在的一个用户名;密码处输入对应的密码。如图4-60所示窗口:
图4-60
2. 单击“提交”按钮。出现该用户所有资料的列表,其中用户名和密码两项,注有“不能更改”提示,其他项目都可以进行修改的操作。如图4-61所示窗口:
图4-61
3. 在对应的文本框中,将需要变动的数据进行修改,然后单击“修改”按钮。屏幕出现修改成功的信息,以及修改后数据列表。如图4-62所示窗口:
图4-62
4. 至此一条指定的数据记录修改完成。这属于一般用于前台,用户修改自己的注册资料用的修改方式。用于后台的系统管理员修改方式,请在此单击“返回浏览修改”,或返回主页后,单击“浏览修改”。出现浏览修改的界面。如图4-63所示窗口:
图4-63
5. 网页窗口显示的是,数据库表中的所有数据记录。并且在每一条记录的后面,有一个“修改”的链接。单击任何一条数据记录后面的“修改”,进入数据修改界面。如图4-64所示窗口:
图4-64
6. 这个网页窗口和前面单独修改一条记录的图4-61界面一样,只是数据内容不同。它们实际上是调用的同一个JSP动态网页。改动某些数据后,单击“修改”按钮。出现修改成功的信息,以及修改后数据列表。如图4-65所示窗口:
图4-65
7. 这个网页窗口和前面单独修改一条记录成功的图4-62界面一样,只是数据内容不同。它们实际上也是调用的同一个JSP动态网页。单击“返回浏览修改”,可以进行下一条记录的修改。
这个范例由四个网页构成:
1. ch4-51.htm:用表单的形式,提供需要修改数据记录的用户名、密码,表单的action指向ch4-51.jsp。同时又是“浏览修改”的入口,链接指向ch4-53.jsp。
2. ch4-51.jsp:连接数据库,查询找到需要修改的数据记录。将每个字段数据,放入一个表单,供用户进行修改。修改的数据,提交后交给ch4-52.jsp去更新数据库表中的数据记录。(这是本范例的重点网页)
3. ch4-52.jsp:从ch4-51.jsp获得数据,连接数据库,使用SQL更新语句,修改指定记录的数据。然后再查询数据库,从表中读取更新的数据记录,送到屏幕上显示。
4. ch4-53.jsp:“浏览修改”的操作界面,设计的思路是,查询数据库表中所有数据记录,在显示界面,将每条记录的尾部添加一个“修改”链接。这个链接指向ch4-51.jsp,用户点击“修改”链接时,同时将该条记录中的“用户名”、“密码”一并提交给ch4-51.jsp。
四个网页的代码如下:
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇修改数据库◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-51.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>修改数据库</title>
5) <body bgcolor="#FFFFCC">
6) <table width="600" border="0" align="center" cellpadding="0" cellspacing="0">
7) <tr>
8) <td height="40" colspan="2">单独修改请输入:</td>
9) <td width="71"> </td>
10) </tr>
11) <tr>
12) <td width="70" height="159" align="center" valign="top"><!--DWLayoutEmptyCell--> </td>
13) <td width="459" valign="top"><form name="form1" method="post" action="ch4-51.jsp">
14) <table width="100%" height="131" border="0" cellspacing="0">
15) <!--DWLayoutTable-->
16) <tr>
17) <td height="32" colspan="2" valign="top">用户名:</td>
18) <td colspan="2" valign="top"><input type="text" name="name"></td>
19) </tr>
20) <tr>
21) <td height="33" colspan="2" valign="top">密码:</td>
22) <td colspan="2" valign="top"><input type="password" name="password"></td>
23) </tr>
24) <tr>
25) <td width="90" height="33"> </td>
26) <td colspan="2" align="center" valign="top"> <input type="submit" name="Submit" value="提交"></td>
27) <td width="209"> </td>
28) </tr>
29) <tr>
30) <td height="3"></td>
31) <td width="21"></td>
32) <td width="131"></td>
33) <td></td>
34) </tr>
35) </table>
36) </form></td>
37) <td> </td>
38) </tr>
39) <tr>
40) <td height="49" colspan="2"><a href="ch4-53.jsp">浏览修改</a></td>
41) <td> </td>
42) </tr>
43) <tr>
44) <td height="49" colspan="2"><div align="left"><a href="ch4.htm" target="_top">返回主页</a></div></td>
45) <td> </td>
46) </tr>
47) </table>
48) </body>
49) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇修改数据◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-51.jsp
1) <%@page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" %>
2) <html>
3) <head>
4) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
5) <title>修改数据</title>
6) </head>
7) <body bgcolor="#FFFFCC">
8) <%
9) String name=request.getParameter("name");
10) String password=request.getParameter("password");
11) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
12) String url="jdbc:odbc:ch4";
13) Connection con=DriverManager.getConnection(url,"","");
14) Statement st=con.createStatement();
15) String strSql="select * from st where 姓名='"+name+"' and 密码='"+password+"'";
16) ResultSet rs=st.executeQuery(strSql);
17) if (!rs.next())
18) {out.print("用户名或密码输入错误!");%>
19) <p align="center"><a href="ch4-51.htm">返回修改页面</a></p>
20) <%return;}
21) %>
22) <table width="600" border="0" align="center" cellpadding="0" cellspacing="0">
23) <tr>
24) <td height="40" colspan="2" align="center" valign="top"><div align="left"><font color="#000000" size="4" face="幼圆"><strong>请修改信息内容</strong></font></div></td>
25) <td width="80"> </td>
26) </tr>
27) <tr>
28) <td width="64" height="341"> </td>
29) <td width="456" valign="top"><form name="form1" method="post" action="ch4-52.jsp">
30) <table width="100%" height="323" border="0" cellspacing="0">
31) <tr>
32) <td height="48" colspan="2" align="right" valign="middle">用户名:</td>
33) <td colspan="2" valign="middle"><%=name%>
34) <input name="name" type="hidden" id="name" value="<%=rs.getString("姓名")%>">
35) </td>
36) <td colspan="2" valign="middle"><font color="#0000FF" size="2">不能更改</font></td>
37) </tr>
38) <tr>
39) <td height="40" colspan="2" align="right" valign="middle">密码:</td>
40) <td colspan="2" valign="middle"><%=password%> <input name="password" type="hidden" id="password" value="<%=rs.getString("密码")%>"></td>
41) <td colspan="2" valign="middle"><font color="#0000FF" size="2">不能更改</font></td>
42) </tr>
43) <tr>
44) <td height="41" colspan="2" align="right" valign="middle">班级:</td>
45) <td colspan="4" valign="middle"> <input name="clas" type="text" id="clas" value="<%=rs.getString("班级")%>"></td>
46) </tr>
47) <tr>
48) <td height="41" colspan="2" align="right" valign="middle">学号:</td>
49) <td colspan="4" valign="middle"> <input name="na" type="text" id="na" value="<%=rs.getString("学号")%>"></td>
50) </tr>
51) <tr>
52) <td height="41" colspan="2" align="right" valign="middle">性别:</td>
53) <td colspan="4" valign="middle"> <input name="sex" type="text" id="sex" value="<%=rs.getString("性别")%>"></td>
54) </tr>
55) <tr>
56) <td height="42" colspan="2" align="right" valign="middle">E-mail:</td>
57) <td colspan="4" valign="middle"> <input name="email" type="text" id="email" value="<%=rs.getString("Email")%>"></td>
58) </tr>
59) <tr>
60) <td width="96" height="42"> </td>
61) <td colspan="2" valign="middle"> <input type="submit" name="Submit" value="修改"></td>
62) <td width="51"> </td>
63) <td width="49" valign="middle"> <input type="reset" name="Submit2" value="重填"></td>
64) <td width="201"> </td>
65) </tr>
66) <tr>
67) <td height="3"></td>
68) <td width="21"></td>
69) <td width="26"></td>
70) </tr>
71) </table>
72) </form></td>
73) <td> </td>
74) </tr>
75) <tr>
76) <td height="50"> </td>
77) <td><div align="left"><a href="ch4-51.htm">返回修改</a></div></td>
78) <td> </td>
79) </tr>
80) </table>
81) <%rs.close();
82) st.close();%>
83) </body>
84) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇修改数据◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-52.jsp
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>修改数据</title>
5) </head>
6) <body bgcolor="#FFFFCC">
7) <%@page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" %>
8) <%
9) String name=request.getParameter("name");
10) String password=request.getParameter("password");
11) String sex=request.getParameter("sex");
12) String clas=request.getParameter("clas");
13) String na=request.getParameter("na");
14) String email=request.getParameter("email");
15) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
16) String url="jdbc:odbc:ch4";
17) Connection con=DriverManager.getConnection(url,"","");
18) if(sex.equals("")||clas.equals("")||na.equals("")||email.equals(""))
19) { out.print("不能将信息修改为空值!");
20) return;}
21) %>
22) <%Statement stmt=con.createStatement();
23) String sql="update st set 班级='"+clas+"',学号='"+na+"',性别='"+sex+"',Email='"+email+"' where 姓名='"+name+"' and 密码='"+password+"'";
24) stmt.executeUpdate(sql);
25) Statement st=con.createStatement();
26) String strSql="select * from st where 姓名='"+name+"'";
27) ResultSet rs=st.executeQuery(strSql);
28) if(!rs.next())
29) return;
30) %>
31) <p><font color="#000000" size="5" face="隶书">信息修改成功!</font></p>修改后的信息为:<p>
32) <table border="1" >
33) <tr>
34) <td width="30%"> <p align="right">班级:</td>
35) <td width="70%"> <%out.print(rs.getString("班级"));%> </td>
36) </tr>
37) <tr>
38) <td width="30%"> <p align="right">学号:</td>
39) <td width="70%"> <%out.print(rs.getString("学号"));%> </td>
40) </tr>
41) <tr>
42) <td width="30%"> <p align="right"> 姓名:</td>
43) <td width="70%"> <%out.print(rs.getString("姓名"));%> </td>
44) </tr>
45) <tr>
46) <td width="30%"> <p align="right">性别:</td>
47) <td width="70%"> <%out.print(rs.getString("性别"));%> </td>
48) </tr>
49) <tr>
50) <td width="30%"> <p align="right">密码:</td>
51) <td width="70%"> <%out.print(rs.getString("密码"));%> </td>
52) </tr>
53) <tr>
54) <td width="30%"> <p align="right">E-mail:</td>
55) <td width="70%"> <%out.print(rs.getString("email"));%> </td>
56) </tr>
57) </table>
58) <p align="left"><a href="ch4-main.htm">返回主页</a> </p>
59) <p align="left"><a href="ch4-53.jsp">返回浏览修改</a></p>
60) <%
61) rs.close();
62) st.close();
63) stmt.close();
64) %>
65) </body>
66) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇浏览修改数据◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-53.jsp
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>浏览修改数据</title>
5) <style type="text/css">
6) body { background-color: #FFFFCC;}
7) </style></head>
8) <body><p>
9) <%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>
10) <%
11) String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
12) String ConnStr="jdbc:odbc:ch4";
13) String sql="select * from st";
14) String temp1,temp2,temp3,temp4,temp5,temp6;
15) Class.forName(DBDriver);
16) Connection conn=DriverManager.getConnection(ConnStr," "," ");
17) ResultSet rs;
18) Statement stmt=conn.createStatement();
19) rs=stmt.executeQuery(sql);
20) out.println("数据库中数据如下:<br>");
21) out.println("<table border=1><tr align=center><td>班级<td>学号<td>姓名<td>性别<td>密码<td>E-mail<td align=center>修改<tr>");
22) while(rs.next())
23) {
24) temp1=rs.getString(1);
25) temp2=rs.getString(2);
26) temp3=rs.getString(3);
27) temp4=rs.getString(4);
28) temp5=rs.getString(5);
29) temp6=rs.getString(6);
30) out.print("<tr><td>"+temp1+"<td align=center>"+temp2+"<td align=center>" +temp3 +"<td align=center>" +temp4 +"<td align=center>" +temp5 +"<td align=center>"+temp6+"<td><a href='ch4-51.jsp?name="+temp3+"&password="+temp5+"'><em>修改</em></a><tr>");
31) }
32) rs.close();
33) stmt.close();
34) conn.close();
35) %>
36) </table>
37) <p> </p>
38) </body>
39) </html>
二、 网页重点代码的分析
静态网页(输入修改对象)ch4-51.htm:
ch4-51.htm:本范例的起始网页。网页的主体是一个表单(单独修改),让用户输入需要修改数据记录对应的用户名和密码,表单的action指向ch4-51.jsp。
表单下面,有一个链接“浏览修改”的入口,指向ch4-53.jsp。
这个网页很简单,不再作具体分析。需要说明的是,在实际的网站设计中,“单独修改”和“浏览修改”不会设计到同一个页面上。“单独修改”是针对用户使用的,必须通过验证用户名和密码,以避免资料被他人非法修改。“浏览修改”是提供给系统管理员使用的,属于后台管理的组成部分,应该有方便批量处理数据的能力。
提取修改对象数据,提供修改界面,ch4-51.jsp的代码分析:
这个动态网页提供用户修改数据的界面,由以下几个部分构成:
第一部分: 获得ch4-51.htm提交的数据。(第9-10行)
9) String name=request.getParameter("name");
10) String password=request.getParameter("password");
将用户提交的用户名和密码数据,赋值给JSP变量name和password。
第二部分: 链接数据库。(第11-13行)
11) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
12) String url="jdbc:odbc:ch4";
13) Connection con=DriverManager.getConnection(url,"","");
第11行:加载JDBC-ODBC驱动;
第12行:定义一个字符串url,指明数据源,为连接数据库进行准备;
第13行:连接数据库。
需要说明的是,这里没有使用异常的抛出和捕捉机制,使得代码行非常简练。但是连接数据库的操作有误时,程序将被挂起。
第三部分: 从数据库表中提取需要修改的数据。(第14-21行)
14) Statement st=con.createStatement();
15) String strSql="select * from st where 姓名='"+name+"' and 密码='"+password+"'";
16) ResultSet rs=st.executeQuery(strSql);
17) if (!rs.next())
18) {out.print("用户名或密码输入错误!");%>
19) <p align="center"><a href="ch4-51.htm">返回修改页面</a></p>
20) <%return;}
21) %>
第14行:为运行SQL语句,准备一个对象st。(注意:这里的对象st和表st使用了同样的名称,但它们不是一回事。编制代码时,应注意避免这种情况发生)
第15行:准备查询用的SQL语句,赋值给字符串变量strSql
SQL语句是标准的复合条件查询语句,含义为,在st表中查询“姓名”、“密码”两个字段的值,都符合用户输入条件的数据记录。
第16行:运行SQL语句,将符合条件的数据记录,放入结果集rs中。
第17-20行:拦截错误数据的代码。如果用户输入的用户名不存在,或者是密码错误,在SQL查询语句运行时,就找不到相应的数据记录,数据指针移动到最后,“!rs.next()”条件成立,程序运行第18-20行,提示用户返回重新输入用户名和密码。
第四部分: 用户修改数据界面。(第22-80行)。
采用方法是,将查询获得的数据,放入一个表单,使用户能够修改,修改后提交给ch4-52.jsp更新数据库的记录。具体的设计方法是,在Dreamweaver图形设计方式下,依据数据库表中的字段项目,在前三部分代码行之后,创建一个表单,如图4-66所示:
图4-66
每个表单项的属性设置,如表4-2所示:
| Type (类型) | Name (表单项名称) | Value (初始值) |
用户名: | hidden(隐藏) | name | <%=rs.getString("姓名")%> |
密码: | hidden(隐藏) | password | <%=rs.getString("密码")%> |
班级: | text (文本) | clas | <%=rs.getString("班级")%> |
学号: | text (文本) | na | <%=rs.getString("学号")%> |
性别: | text (文本) | sex | <%=rs.getString("性别")%> |
E-mail: | text (文本) | | <%=rs.getString("Email")%> |
表4-2
每个表单项的初始值,设定为从结果集rs中读取的对应数据(也就是数据库表中的字段值)。有初始值的表单项,运行时显示初始值,这样就把需要修改的数据,从数据库表中提取出来,放置到了表单中。允许用户修改的项目(班级、学号、性别、E-mail),将表单项的类型设置为text(文本框),不允许用户修改的项目(用户名、密码),将表单项的类型设置为hidden(隐藏域)。表单中文本框的数据,可以随意修改。而隐藏域中的数据,屏幕不显示,无法进行改动。
为了整齐美观,将表单放置在表格当中。又考虑到,不允许用户修改的项目(用户名、密码)在运行时屏幕不显示,会造成用户操作不便。于是在隐藏域所在单元格中,添加了可显示而不能修改的对应变量。第33行的<%=name%> 和第40行的<%=password%>。
表单的action指向ch4-52.jsp。
第五部分: 关闭rs和st两个对象。(第81-82行)
81) <%rs.close();
82) st.close();%>
这个动态网页,在使用Dreamweaver编制设计的过程中,需要在“代码”和“设计”两种方式下切换几次。第四部分的表单,主要在图形“设计”方式下进行,而33行的<%=name%> 和40行的<%=password%>的插入,又只能在“代码”方式下进行。
更新修改数据库数据,ch4-52jsp的代码分析:
这个动态网页,接收ch4-51.jsp提交的修改数据,并用这些数据更新修改数据库表中的记录。修改完成后,再从数据库读取更新后的数据记录,送到屏幕显示。具体构成如下:
第一部分: 获得ch4-51.jsp提交的修改数据(第9-14行)
9) String name=request.getParameter("name");
10) String password=request.getParameter("password");
11) String sex=request.getParameter("sex");
12) String clas=request.getParameter("clas");
13) String na=request.getParameter("na");
14) String email=request.getParameter("email");
第二部分: 连接数据库。(第15-17行)
15) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
16) String url="jdbc:odbc:ch4";
17) Connection con=DriverManager.getConnection(url,"","");
第三部分: 拦截非法修改的数据(18-20行)
18) if(sex.equals("")||clas.equals("")||na.equals("")||email.equals(""))
19) { out.print("不能将信息修改为空值!");
20) return;}
21) %>
第18行,判断用户在修改数据时,如果将数据删除,形成了空值,就执行第19-20行代码,提示用户“不能将信息修改为空值”
第四部分: 更新修改数据库表中的记录(22-24行)
22) <%Statement stmt=con.createStatement();
23) String sql=”update st set 班级=’”+clas+”’,学号=’”+na+”’,性别=’”+sex+”’,Email=’”+email+”’ where 姓名=’”+name+”’ and 密码=’”+password+”’”;
24) stmt.executeUpdate(sql);
第22行,为运行SQL语句,创建一个对象stmt,
第23行,将更新数据库表中记录的SQL语句,赋值给字符串变量sql。
语句的含义为,更新st表中“姓名”和“密码”字段的值都符合条件的数据记录,用clas的值更新“班级”字段,用na的值更新“学号”字段,用sex的值更新“性别”字段,用email的值更新“Email”字段。
第24行,运行SQL语句,更新修改数据库
第五部分: 从数据库提取修改后的数据(第25-30)
25) Statement st=con.createStatement();
26) String strSql="select * from st where 姓名='"+name+"'";
27) ResultSet rs=st.executeQuery(strSql);
28) if(!rs.next())
29) return;
30) %>
第25行,为运行SQL语句,创建一个对象st,
第26行,将查询被修改数据记录的SQL语句,赋值给字符串变量strSql。
第27行,运行SQL语句,将查询的结果放入结果集rs
第28-29行,查找完成后返回,停止语句运行,避免程序挂起出错。
第六部分: 从结果集中,提取被修改数据记录,送到屏幕显示(第31-57)
这部分在Dreamweaver图形“设计”方式下进行,创建一个六行两列的表格,第一列是每个字段的名称,第二列是从结果集rs中提取的对应数据,见图4-67所示:
图4-67
第二列添入对应数据,要切换到Dreamweaver“设计”方式下进行,具体添入的数据,在代码的第35行、39行、43行、47行、51、55行。
35) <td width="70%"> <%out.print(rs.getString("班级"));%> </td>
39) <td width="70%"> <%out.print(rs.getString("学号"));%> </td>
43) <td width="70%"> <%out.print(rs.getString("姓名"));%> </td>
47) <td width="70%"> <%out.print(rs.getString("性别"));%> </td>
51) <td width="70%"> <%out.print(rs.getString("密码"));%> </td>
55) <td width="70%"> <%out.print(rs.getString("email"));%> </td>
第35行的代码<%out.print(rs.getString("班级"));%>是在对应的单元格显示输出结果集rs中“班级”的内容。其他各行的作用等同。
<%out.print(rs.getString("班级"));%>也可以书写成<%=rs.getString("班级")%>,这是前面范例介绍过两种不同书写方式的JSP语句,它们的作用相同。
第七部分: 关闭rs、st、stmt三个对象(第60-64行)
这里需要说明,前面范例的动态网页连接数据库后,或者只进行读取操作,查询数据;或者只进行写操作,写入数据。而在这个动态网页中,连接数据库后,先进行写操作,更新数据;然后又进行读操作,查询修改后的数据。连接一次,进行两种操作。这种代码在编写时要注意,要分别创建写操作对象stmt(第22行)和读操作对象st(第25行),两个对象不能重名,而且都产生于(第17行的)连接对象con。
浏览修改据,ch4-53jsp的代码分析:
这个动态网页演示时,可以方便的选择任何表中一条记录,点击“修改”,无需输入“用户名”和“密码”,直接进入修改界面。如果仔细观察网页,不难发现,它和前面查询全部数据的范例网页ch4-32.jsp基本相同,只是在每一条数据记录后面,多了一个“修改”链接。它实际就是查询全部数据ch4-32.jsp网页的简单变形。
在代码上也是添加了一些新代码,使之能够方便进入对应数据记录的修改界面。另外这个网页,去掉了异常的抛出和捕捉的处理,删去了相关的代码。添加的新代码体现在代码行的第21行和第30行:
21) out.println("<table border=1><tr align=center><td>班级<td>学号<td>姓名<td>性别<td>密码<td>E-mail<td align=center>修改<tr>");
30)out.print("<tr><td>"+temp1+"<td align=center>"+temp2+"<td align=center>"+temp3+"<td align=center>"+temp4+"<td align=center>"+temp5+"<td align=center>"+temp6+"<td><a href='ch4-51.jsp?name="+temp3+"&password="+temp5+"'><em>修改</em></a><tr>");
第21行:显示输出表格的首行,只在原来代码的基础上添加了一个单元格,单元格中添加了“修改”两个汉字,代码是<td align=center>修改
第30行:显示输出表中每一条记录,并在数据记录后面添加一个“修改”链接,添加的代码是<td><a href='ch4-51.jsp?name="+temp3+"&password="+temp5+"'><em>修改</em></a>,被添加代码的含义是,链接到ch4-51.jsp,同时将temp3(姓名)的数值和temp5(密码)的数值也传送过去。temp3传给表单项name,temp5传给表单项password 。所有ch4-51.jsp就能自动读取到,需要获得的数据了。这实际上是JSP的输入语句,注意它的格式,在被输入的文件名后,要有一个“?”,之后是该文件获得数据语句中的表单项名称,再之后的“=”等号后是传送的具体数据。