回麻雀苑主页          

3-2使用session认证登录用户

作者:老麻雀 2006/10/22 23:36:04

使用session认证登录的用户
  session是JSP使用频繁的默认对象之一,在我们动态网页的设计制作入门实践中,他主要用于区分不同的用户,尤其是区分登录和未登录的用户。为了了解他的作用和使用方法,我们先看一下下面的范例。
一、 范例的演示
  演示的前提和上一章一样:
1. 配置好开发运行环境。
2. 将随书光盘中的范例ch3文件夹,复制到resin2.1.6\doc文件夹内。
3. 启动JSP引擎。
  演示步骤:
1. 启动IE,在地址栏键入http://127.0.0.1:8080/ch3/ch3-1.htm,如图3-2:
  
  图 3-2
2. 点击左面页面的“注册”。屏幕出现下面图3-3界面:
  

图 3-3
填写“密码”和“重新输入密码”(可以改变默认的用户名,将“张三”更换成其他人名,“真实姓名”和“年龄”可以不填写),然后点击“提交”,屏幕显示注册成功的信息。
3. 然后点击左面页面的“登录”。屏幕“用户登录”的界面,填写“密码”后,点击“登录”按钮,出现“登录成功”的界面,图 3-4:

图 3-4

4. 如果“用户名”和“密码”填写都正确出现图3-5的界面,如果“用户名”和“密码”填写有错则出现图3-6的界面
   
        图 3-5                                   图 3-6
5. 登录成功后,可以点击左面页面的“注销”。屏幕出现下面图3-7界面:

图 3-7
注销之后,再点击左面页面的“登录”进入登录界面,填写“用户名”和“密码”,点击“登录”按钮,出现“没有注册,不能登录”的界面,图3-8:

图3-8
6. 读者现在可以再次注册,又可以用注册的“用户名”和“密码”进行登录了。再次注册时,注意一下“年龄”项在不填写内容、填写错误内容和正确填写内容,三种情况下有不同的反映,读者可以自己分析相应的代码行,用于今后动态网页的设计制作中。
  从上面的范例中,我们看到这组网页(构成一个站点),主要实现的功能是用户注册、登录。只有注册的用户能登录;未注册的用户,系统提示用户去注册;而注册的用户也必须通过用户名和密码的验证才能登录。而当我们将注册用户注销后,用户就不能登录了,需要重新注册才行。
  读者在机房局域网环境下体验这个范例时,要使用几台计算机同时访问这个站点(用户机不必启动JSP引擎,只需启动IE,在地址栏键入站点所在计算机的IP地址、端口号8080、路径和文件名即可)。注册时使用不同的“用户名”和“密码”。我们会发现登录、注销时每个用户相互之间互不干扰,从而明显的体验到系统为不同的用户创建了独立的session。
二、范例站点的网页构成说明和代码
  这个范例就是使用session来实现上述功能的。基本原理是用户注册时,系统创建该用户的session,并将用户的“用户名”和“密码”写入。登录时系统从该用户的session中提取信息和登录用户的信息比对,比对成功允许登录,比对出错不让登录。如果用户没有进行注册就登录,session中就没有写入的数据,系统就可以判断出来,提示用户去注册。这个站点由11个网页构成。其中有6个HTML静态网页,5个JSP动态网页。基本情况列表如下: 。

          文件名        网页的功能和作用 

1    ch3-1.htm         框架集
2   ch3-1top.htm     框架上端的标题页
3   ch3-1left.htm     框架左端的菜单页
4   ch3-1main.htm   说明,介绍站点中几个动态网页的功能和作用
5   ch3-11.htm        用户注册的表单网页
6   ch3-11.jsp         处理注册数据的动态网页,创建用户的session,并将“用户名”和“密码”写入session
7   ch3-12.htm        用户登录的表单网页
8   ch3-12.jsp         处理登录数据的动态网页,从session中提取“用户名”和“密码”数据,对登录用户进行验证。
9   ch3-13.jsp        登录成功的页面,提取session中的“用户名”,对登录用户表示欢迎。
10  ch3-14.jsp       登录失败的页面,提取session中的“用户名”、“密码”,告知登录用户。
11  ch3-15.jsp       注销用户的动态网页,将用户的 session 删除。
表 3-1
框架集及3个初始网页的代码如下:
◇-◇-◇-◇-◇-◇  session注册登录  ◇-◇-◇-◇-◇-◇范例ch3-1.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>Session注册登录</title>
5) </head>
6) <frameset rows="80,*" framespacing="1" frameborder="NO" border="1" bordercolor="#EBE9ED">
7)   <frame src="ch3-1top.htm" name="topFrame" scrolling="NO" noresize>
8)   <frameset rows="*" cols="107,*" framespacing="0" frameborder="NO" border="0">
9)   <frame src="ch3-1left.htm" name="leftFrame" scrolling="NO" noresize>
10)   <frame src="ch3-1main.htm" name="mainFrame">
11)   </frameset>
12) </frameset>
13) <noframes><body>
14) </body></noframes>
15) </html>

◇-◇-◇-◇-◇-◇-◇  标题  ◇-◇-◇-◇-◇-◇-◇
范例ch3-1top.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>标题</title>
5) </head>
6) <body bgcolor="#CCFF00">
7) <div align="center"><font size="6"><strong>使用session认证登录的用户</strong></font></div>
8) </body>
9) </html>

◇-◇-◇-◇-◇-◇-◇  菜单  ◇-◇-◇-◇-◇-◇-◇
范例ch3-1left.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>菜单</title>
5) </head>
6) <body bgcolor="#CCFF00">
7) <p><font size="5"><a href="ch3-11.htm" target="mainFrame">注册</a></font></p>
8) <p><font size="5"><a href="ch3-12.htm" target="mainFrame">登录</a></font></p>
9) <p><font size="5"><a href="ch3-15.jsp" target="mainFrame">注销</a></font></p>
10) <p><font size="5"><a href="ch3-1main.htm" target="mainFrame">说明</a></font> </p>
11) </body>
12) </html>

◇-◇-◇-◇-◇-◇-◇  说明  ◇-◇-◇-◇-◇-◇-◇
范例ch3-1main.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>说明</title>
5) </head>
6) <body bgcolor="#FFFF99">
7) <p><font size="6">说明:</font></p>
8) <table width="839" height="332">
9)   <tr>
10)     <td width="831" height="61" scope="row"><div align="left"><strong>注册:</strong>ch3-11.jsp 创建用户的session,并将“用户名”和“密码”写入session。</div></td>
11)   </tr>
12)   <tr>
13)     <td height="53" scope="row"><div align="left"><strong>登录:</strong>ch3-12.jsp 从session中提取“用户名”和“密码”对登录用户进行验证。</div></td>
14)   </tr>
15)   <tr>
16)     <td height="70" scope="row"><div align="left"><strong>登录成功:</strong>转到 ch3-13.jsp,提取session中的“用户名”,对登录用户表示欢迎。</div></td>
17)   </tr>
18)   <tr>
19)     <td height="71" scope="row"><div align="left"><strong>登录失败:</strong>转到 ch3-14.jsp,提取session中的“用户名”、“密码”,告知登录用户。<br>
20) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果没有注册直接登录,session中的“用户名”为空,告知用户去注册。</div></td>
21)   </tr>
22)   <tr>
23)     <td height="63" scope="row"><div align="left">
24)       <p><strong>注销:</strong>ch3-15.jsp 将用户的 session 删除。</p>
25)     </div></td>
26)   </tr>
27) </table>
28) <p align="center"><font size="7">
29)   </font></p>
30) </body>
31) </html>

登录和注册界面的2个表单网页代码如下:
◇-◇-◇-◇-◇-◇  注册-写入Session  ◇-◇-◇-◇-◇-◇
范例ch3-11.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>注册-写入Session</title>
5) </head>
6) <body bgcolor="#FFFF99">
7) <div align="center">
8)   <p align="left"><font size="6">用户注册</font></p>
9)   <p>请您填写以下信息(*为必填项),谢谢!</p>
10)       <form name="form1" method="post" action="ch3-11.jsp">
11)           <table width="495" height="241" align="left">
12)             <tr>
13)               <th scope="row"><div align="right"><span class="style3">用户名:</span></div></th>
14)               <td><input name="name" type="text" id="name2" value="张三" size="16">
15)               *</td></tr>
16)             <tr>
17)               <th scope="row"><div align="right"><span class="style3">密码</span>:</div></th>
18)               <td><input name="mima" type="password" size="16" maxlength="16">
19)               *</td></tr>
20)             <tr>
21)               <th scope="row"><div align="right"><span class="style3">重新输入密码:</span></div></th>
22)               <td><input name="mima2" type="password" size="16" maxlength="16">
23)             *</td></tr>
24)             <tr>
25)               <th scope="row"><div align="right"><span class="style3">真实姓名:</span></div></th>
26)               <td><div align="left"><span class="style3">
27)               <input name="xingming" type="text" size="16" maxlength="8">
28)               </span></div></td></tr>
29)             <tr>
30)               <th scope="row"><div align="right"><span class="style3">性别:</span></div></th>
31)               <td><div align="left"><span class="style3">
32)               <input name="xingbie" type="radio" value="男" checked>  男
33)   <input type="radio" name="xingbie" value="女">  女 </span></div></td></tr>
34)             <tr>
35)               <th scope="row"><div align="right"><span class="style3">年龄: </span></div></th>
36)               <td><div align="left"><span class="style3">
37)                 <input name="nianling" type="text" size="8" maxlength="2">
38)               </span></div></td></tr>
39)             <tr>
40)               <th height="80" scope="row"><div align="right"><span class="style3">
41)                 <input type="submit" name="Submit" value="提交">
42)               </span></div></th>
43)               <td><div align="center"><span class="style3">
44)                 <input type="reset" name="Submit2" value="重置">
45)               </span></div></td></tr>
46)           </table>
47)   </form>
48) </div>
49) </body>
50) </html>

◇-◇-◇-◇-◇-◇-◇登录-读取Session ◇-◇-◇-◇-◇-范例ch3-12.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>登录-读取Session</title>
5) </head>
6) <body bgcolor="#FFFF99">
7) <p align="left"><font size="6">用户登录</font></p>
8) <form name="form1" method="post" action="ch3-12.jsp">
9)   <table width="390">
10)     <tr>
11)       <th scope="row"><div align="right">用户名:</div></th>
12)       <td><div align="left">
13)         <input name="text" type="text" id="text2" value="张三">
14)       </div></td>
15)     </tr>
16)     <tr>
17)       <th scope="row"><div align="right">密码:</div></th>
18)       <td><div align="left">
19)         <input name="password" type="password" id="password">
20)       </div></td>
21)     </tr>
22)     <tr>
23)       <th scope="row"><div align="right"></div></th>
24)       <td><div align="left">
25)         <input type="submit" name="Submit" value="登录">
26)       </div></td>
27)     </tr>
28)   </table>
29) </form>
30) </body>
31) </html>

5个动态网页的代码如下:
◇-◇-◇-◇-◇-◇  注册-写入Session  ◇-◇-◇-◇-◇-◇范例ch3-11.jsp
1) <html>
2) <head><title>注册-写入Session</title></head>
3) <BODY bgcolor="#FFFF66">
4) <%@ page contentType="text/html; charset=gb2312" %>
5) <%@ page import="java.util.*" %>
6) <%!   
7) String username;
8) String password1;
9) String password2;
10) String truename;
11) String zhuzhi;
12) String age;
13) String xingbie;
14) %>
15) <%
16) username=request.getParameter("name");
17) password1=request.getParameter("mima");
18) password2=request.getParameter("mima2");
19) truename=request.getParameter("xingming");
20) zhuzhi=request.getParameter("zhuzhi");
21) age=request.getParameter("nianling");
22) xingbie=request.getParameter("xingbie");
23) if(username.equals("")||password1.equals("")||password2.equals(""))
24) {
25) out.println("<P align="center"><font size="5" face="kai" color="#FF6699">带*为必填项,请您重新填写,谢谢!</font><P>");
26) out.println("<a href="ch3-11.htm">返回</a>");
27) return;}
28) if(password1.length()<3)
29) {
30) out.println("<P align="center"><font size="5" face="kai" color="#FF6699">您填写密码应大于等于3位,请重新填写!</font></P>");
31) out.println("<a href=ch3-11.htm>返回</a>");
32) return; 
33) }
34) if(!password1.equals(password2)){
35) out.println("您填写的两次密码不一致,请重新填写!<P>");
36) out.println("<a href="ch3-11.htm">返回</a>");
37) return;
38) }
39) if(truename.equals(""))
40) truename="未填写";
41) if(!age.equals(""))
42) { int g;
43) try {
44) g = Integer.parseInt(age); 
45) if(g<1||g>99)
46) {
47) out.println("<P align="center"><font size="5" face="kai" color="#FF6699">您填写的年龄数值错误,请重新填写!</font></P>");
48) out.println("<a href=ch3-11.htm>返回</a>");
49) return; 
50) } 
51) }
52) catch (NumberFormatException e)
53) { 
54) out.println("<P align="center"><font size="5" face="kai" color="#FF6699">您填写年龄,应输入正确数字,请重新填写!</font></P>");
55) out.println("<a href=ch3-11.htm>返回</a>");
56) return; 
57) }
58) }
59) if(age.equals(""))
60) age="未填写";
61) request.getsession(true);
62) session.putValue("user",username);
63) session.putValue("pass",password1);
64) %>
65) <h2>您已经注册成功! </h2>
66) <table width="200">
67) <tr>
68) <th scope="row"><div align="right">用户名:</div></th>
69) <td><div align="left">
70) <%out.println(username);%>
71) </div></td>
72) </tr>
73) <tr>
74) <th scope="row"><div align="right">密码:</div></th>
75) <td><div align="left">
76) <%out.println(password1);%>
77) </div></td>
78) </tr>
79) <tr>
80) <th scope="row"><div align="right">真实姓名:</div></th>
81) <td><div align="left">
82) <%out.println(truename);%>
83) </div></td>
84) </tr>
85) <tr>
86) <th scope="row"><div align="right">年龄:</div></th>
87) <td><div align="left">
88) <%out.println(age);%>
89) </div></td>
90) </tr>
91) </table>
92) <p>去<a href="ch3-12.htm">登录</a></p>
93) </BODY>
94) </HTML>

◇-◇-◇-◇-◇-◇-◇登录-读取Session ◇-◇-◇-◇-◇-◇
范例ch3-12.jsp
1) <html>
2) <head>
3) <title>登录-读取Session</title>
4) </head>
5) <BODY bgcolor="#FFFF99">
6) <%@ page contentType="text/html; charset=gb2312" %>
7) <%!
8) String name;
9) String mima;
10) String name2;
11) String mima2; 
12) %>
13) <%
14) request.getsession(true);
15) if(session.getValue("user")==null)
16) {
17) out.print("<h2>你没有注册,不能登录!</h2><P>");
18) out.print("<a href="ch3-11.htm">去注册</a>");
19) return;
20) }
21) name=request.getParameter("text");
22) mima=request.getParameter("password");
23) name2=(String)session.getValue("user");
24) mima2=(String)session.getValue("pass");
25) if(name.equals(name2) && mima.equals(mima2))
26) response.sendRedirect("ch3-13.jsp");
27) else if(!name.equals(name2) || !mima.equals(mima2))
28) out.println("<h2>登录失败!</h2>");
29) response.sendRedirect("ch3-14.jsp");
30) %>
31) </BODY>
32) </HTML>

◇-◇-◇-◇-◇-◇-◇    登录成功  ◇-◇-◇-◇-◇-◇-◇
范例ch3-13.jsp
32) <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"%>
33) <html>
34) <head>
35) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
36) <title>登录成功</title>
37) <style type="text/css">.style1 {color: #FF0000}</style>
38) <body bgcolor="#FFFF99">
39)   <%@ page contentType="text/html; charset=gb2312" %>
40)   <%!
41)  String name;
42)  String mima2; 
43)   %>
44)   <%
45)  name=(String)session.getValue("user");
46)  mima2=(String)session.getValue("pass");
47)     out.println("欢迎你 <span class="style1"><b>"+name+"</b></span><P><h2>你已经登录成功!</h2><P>");
48)     out.println("你用户名是:<span class="style1"><b>"+name+"</b></span>,密码是:<span class="style1"><b>"+mima2+"</b></span>");
49)   %>
50) <p><a href="ch3-1.htm" target="_top">返回</a></p>
51) </body>
52) </html>

◇-◇-◇-◇-◇-◇-◇  登录失败  ◇-◇-◇-◇-◇-◇-◇
范例ch3-14.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) <style type="text/css">.style1 {color: #FF0000}</style>
7) </head>
8) <body bgcolor="#FFFF99">
9) <%@ page contentType="text/html; charset=gb2312" %>
10) <%!
11)  String name;
12)  String mima2; 
13) %>
14) <%
15)  name=(String)session.getValue("user");
16)  mima2=(String)session.getValue("pass");
17)     out.println("<H2>登录失败!</H2><P>");
18)     out.println("用户名或密码错,请重新登录。<P>"); 
19)     out.println("登录本系统,正确的用户名是:"+name+", 密码是:"+mima2+"。<P>");
20)     out.println("<a href="ch3-12.htm">返回登录</a>");
21) %>
22) </body>
23) </html>

◇-◇-◇-◇-◇-◇-◇  注销  ◇-◇-◇-◇-◇-◇-◇
范例ch3-15.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) <style type="text/css">
7) .style1 { font-size: 24px; color: #FF0000;}
8) .style2 { font-size: x-large; color: #FF0000;}
9) .style3 {font-size: 36px}
10) </style>
11) </head>
12) <body>
13) <%
14)     String name=(String)session.getValue("user");
15)  session.invalidate();
16)  response.setHeader("Refresh","2;URL=ch3-1main.htm");
17) %>
18) <P><img src="img/pass.gif" alt="注销" width="200" height="25"></P>
19) <h2>注销 <span class="style1">  <%=name%> </span></h2>
20) </body>
21) </html>
三、相关功能的设计思路和网页代码分析
  6个HTML静态网页的设计界面和相关代码都比较简单,上一章中都有具体的分析,本章中不再重复,读者只需注意一下框架网页中连接时,属性面板中“目标”属性的应用。对于框架网页不太熟悉的读者,应该自己复习一下。
  下面重点分析动态网页的功能:
  在站点中,ch3-11.jsp获得注册信息的同时创建session,并将注册的“用户名”和“密码”写入session。登录时ch3-12.jsp将登录的“用户名”和“密码”和session中的“用户名”和“密码”进行比对,二者一致则显示“登录成功”,否则显示“登录失败”。如果没有进行注册就直接登录,session中没有相关信息,就显示“没有注册,不能登录”。注销功能是ch3-15.jsp通过删除用户的session实现。注意在登录判断、登录成功、登录失败的三个动态网页中都从session中提取了数据,并使用这些数据提示用户,这是本节中重点内容。
  真正的注册登录功能,不是将注册信息写入session,而是写入数据库,登录时从数据库读取用户信息进行比对。session的应用一般是登录时创建,进入站点其他网页时提取session数据,为用户提供专门服务,并控制非法用户的进入等。这方面的技术在后面的章节中介绍。
  以下是从各个JSP文档中抽出来,应用session的代码行:
  “年龄”项不输入数据,或输入错误数据,分别处理的代码行
在范例ch3-12.jsp中的41-60行:
41) if(!age.equals(""))
42) { int g;
43) try {
44) g = Integer.parseInt(age); 
45) if(g<1||g>99)
46) {
47) out.println("<P align="center"><font size="5" face="kai" color="#FF6699">您填写的年龄数值错误,请重新填写!</font></P>");
48) out.println("<a href=ch3-11.htm>返回</a>");
49) return; 
50) } 
51) }
52) catch (NumberFormatException e)
53) { 
54) out.println("<P align="center"><font size="5" face="kai" color="#FF6699">您填写年龄,应输入正确数字,请重新填写!</font></P>");
55) out.println("<a href=ch3-11.htm>返回</a>");
56) return; 
57) }
58) }
59) if(age.equals(""))
60) age="未填写";
  这段代码所起得作用是,用户注册输入“年龄”的数据时,如果没输入数据,允许用户注册,系统反馈注册信息时告知用户年龄为“未填写”。如果“年龄”输入了数据,就必须是正确的数值,否则没法进行注册。
  所有的代码都是上一章学习过的,所不同的是设计思路和方法。第41行先判断“年龄”项是否不为空,在运行42-58行代码,拦截填写的不规范数据。到第59行再判断“年龄”项是否为空,运行60行代码,将年龄对应的变量age赋值“未填写”。从而实现了“年龄”项填写必须正确,否则就不填写。
  
  创建session将数据写入session的代码行:
在范例ch3-11.jsp中的61-63行
61) request.getsession(true);            创建session
62) session.putValue("user",username);   将username变量的值,写入session的"user"变量中
63) session.putValue("pass",password1);  将password1变量的值,写入session的"pass"变量中
  ch3-11.jsp是处理注册信息的动态网页,这里将用户的“用户名”、“密码”写入session,起到临时保存这些信息的作用,为的是登录时用这些信息验证登录这是否为注册用户。
  第61行request.getsession(true); 是创建session的语句。
  第62行session.putValue("user",username)是将JSP网页中变量的值,写入session的变量中的语句。其中的"user"是我们定义的session中字符串型变量名,username是写入变量user的值。
  
  提取session中数据验证登录用户的代码行:
在范例ch3-12.jsp中的21-29行
21) name=request.getParameter("text");
22) mima=request.getParameter("password");
23) name2=(String)session.getValue("user");    提取session中"user"变量的值,并赋值给name2
24) mima2=(String)session.getValue("pass");    提取session中"pass"变量的值,并赋值给mima2
25) if(name.equals(name2) && mima.equals(mima2))     进行比对认证
26) response.sendRedirect("ch3-13.jsp");             认证成功跳转到“登录成功”的网页
27) else if(!name.equals(name2)||!mima.equals(mima2))
28) out.println("<h2>登录失败!</h2>");
29) response.sendRedirect("ch3-14.jsp");             认证出错跳转到“登录失败”的网页
  ch3-12.jsp是验证登录用户的动态网页,使用从表单获得的登录信息和session中保存的注册用户信息进行比对,从而验证登录用户的合法性。
  21-22行从登录的HTML网页获得登录用户的信息;
  23-24行从session中提取注册用户的信息;语句的含义是使用session.getValue( )方法将session中变量的值提取出来,并把他转换为字符串型,赋值给JSP网页的变量。
  25行将两种信息进行比对,26、29行根据比对结果,跳转到不同的网页。
  
  控制未注册用户不能登录的代码行:
  在范例ch3-12.jsp中的第14行-20行
14) request.getsession(true);
15) if(session.getValue("user")==null)
16) {
17) out.print("<h2>你没有注册,不能登录!</h2><P>");
18) out.print("<a href="ch3-11.htm">去注册</a>");
19) return;
20) }
  第14行是创建session的语句。对于访问JSP站点的用户,系统只给每个用户创建一个session,这个session中可以定义若干个存储数据的变量,但再次运行创建session的语句时,不会重复创建session。这个范例运行时,如果用户先注册再登录,因注册时就已经创建了session,此时第14行虽然是创建session的语句,但不会重复创建另一个session。如果用户没有注册就直接登录,此时用户的session不存在,第14行的语句就要创建一个session,为15行提取session的语句进行铺垫,如果没有这行,此时的15行就成为非法语句。
  第15行是检查session中的变量是否为空值。如果用户没有注册,直接登录。系统就没有为用户创建session,session的变量不会存在,必然为空值。因此if语句复合条件,运行16-20行,提示用户没有注册。
  
  提取session中数据提示用户的代码行:
在范例ch3-13.jsp中的14-17行
14) name=(String)session.getValue("user");
15) mima2=(String)session.getValue("pass");
16) out.println("欢迎你 <span class="style1"><b>"+name+"</b></span><P><h2>你已经登录成功!</h2><P>");
17) out.println("你用户名是:<span class="style1"><b>"+name+"</b></span>,密码是:<span class="style1"><b>"+mima2+"</b></span>");
  第14行、15行是读取session的语句。
  第16行是利用从session中得到的“用户名”信息,对用户表示欢迎。
  第17行同样是利用从session中得到的“用户名”和“密码”信息,提示用户。
  ch3-13.jsp是登录成功跳转到的网页,这时提取session中的“用户名”信息,对用户表示欢迎,这是当前互联网上动态网站经常使用的技术。前面演示运行这个范例时,曾经提醒读者要在局域网环境下,同时用几台计算机访问这个站点,现在查看运行效果,又能清楚的体验session的独特作用,每个用户的计算机上欢迎的对象都是不同的注册用户名。
  
在范例ch3-14.jsp中的15-19行也是读取session中的数据,提示用户的代码行。
15)  name=(String)session.getValue("user");
16)  mima2=(String)session.getValue("pass");
17)     out.println("<H2>登录失败!</H2><P>");
18)     out.println("用户名或密码错,请重新登录。<P>"); 
19)     out.println("登录本系统,正确的用户名是:"+name+", 密码是:"+mima2+"。<P>");
  第15行、16行是读取session的语句。
  第19行利用从session中得到的“用户名”和“密码”信息,提示用户。
  ch3-14.jsp是登录失败跳转到的网页,第19行显示的是合法注册用户的信息,告知此时的非法登录者。这种滑稽在互联网上不会出现,范例这样编制是让读者体会session的作用。
  
  注销用户,删除session的代码行:
在范例ch3-15.jsp中的15行
15)  session.invalidate();
  ch3-15.jsp是注销用户的动态网页,代码中发挥注销作用的就是这一行。他是删除session的语句。session删除后,原来写入session的所有数据,也同时消失,注销的目的也就达到了。
  这里再次强调,删除的session只是注销用户的,而其他正在访问这个站点的注册登录用户,不会受到影响,因为他们的session都是独自的。
  
  从以上这个范例可以看到,动态网站中一个综合功能的实现,要靠几个HTML静态网页和JSP动态网页相互配合才能完成。学习动态网页掌握各种代码的编制固然重要,但更重要的是设计思路。读者在这里应该更多的体验功能实现的设计思路。互联网上有很多设计思路完善、巧妙的范例,应该去借鉴。读者可以在“百度”、“Google”等搜索引擎中,以“JSP源代码”为关键字进行搜索,能够找到不少提供JSP代码下载的站点。看懂别人编写的代码,学习人家的设计思路,也是增强学习效果的方法。

 

 

我也说两句
E-File帐号:用户名: 密码: [注册]
评论:(内容不能超过500字,如果您不填写用户名和密码只能以游客的身份发表评论。)

*评论内容将在30分钟以后显示!
发表须知:
一、用户须严格遵守国家法律和政策,包括但不限于《全国人大常委会关于维护互联网安全的决定》、《信息网络传播权保护条例》等规定,审慎、合法地利用伊妃(E-file)平台发表言论、作品。
二、用户的言论、行为若涉嫌违法或侵权,用户可能被强制承担因该行为直接或间接导致的全部法律责任。依照法律法规规定,伊妃(E-file)运营方有义务提供用户资料,有义务和权利采取删除、屏蔽、断开链接等各种必要措施。
三、伊妃(E-file)中心授权网络法律专业研究服务机构“网络法苑”为用户及客户提供包括免费咨询在内的全方位的法律支持。

 

版权所有:段保珠   电话:64616239   E-mail:dbz@sina.com   京ICP备06044461号
阿酷科技 Arkoo.com 提供底层技术