雅典之夏的小站
          知人者智 自知者明 Fighting!!

          本文主要參考了,JSP+javabean循序漸進

          開發平臺:winxp+tomcat4+mysql+javabean

          在實現在了用servlet注冊還有登錄以后,打算做一個注冊頁面

          首先創建一個表:username VARCHAR2(20) 用戶名
          password VARCHAR2(20) 密碼
          email VARCHAR2(30) Email地址
          homepage VARCHAR2(50) 主頁
          signs VARCHAR2(200) 簽名
          regtime DATE 注冊時   //這個date我沒有實現

          主要有三個jsp頁面:

          addnewuser.jsp,主要用來實現注冊用戶的界面,

          doadduser.jsp 實現填加到數據庫中的具體功能

          listuser.jsp 來實現顯示所有用戶信息

          兩個bean:

          db.java實現數據庫的操作,主要有兩個方法public ResultSet executeQuery(sql)返回rs用來進行記錄的查詢

          public boolean executeUpdate(String sql)用來進行記錄的更新

          adduser.java繼承了db類用來提供所需更新和查詢的sql語句;

          我直接調用原文的代碼時后發現調用了span什么,不太懂,而且有很多字符不對,所以調試時的問題基本上都是html代碼的問題.這是一個僅有基本功能,很多方面還需進一步完善,比如實現注冊時間(雖然這不難,可是我還沒看util.date和sql.date 區別),email地址的識別,連登錄都沒有做 :) ,我發現基于這種bean結構的功能很吸引人,比servlet要好,膚淺之見

          源碼如下:db.java

          package rkind;
          import java.net.*;
          import java.sql.*;
          import java.lang.*;
          import java.io.*;
          import java.util.*;
          public class db {
          //成員變量初始化
          Connection conn = null; //數據庫連接
          ResultSet rs = null; //記錄集
          String Username=""; //用戶名
          String Password=""; //密碼
          String Email=""; //email
          String Homepage=""; //主頁
          String Signs=""; //簽名
          String url="jdbc:mysql://172.20.0.73/rk";

          //db的構建器
          public db() {
           try {
          //注冊數據庫驅動程序為Oracle驅動
            String name="org.gjt.mm.mysql.Driver";
            Class.forName(name);
            conn = DriverManager.getConnection(url,"root","你的密碼");
            System.out.println("success");
            }
           catch(Exception e) {
          //這樣寫是為了方便調試程序,出錯打印mydb()就知道在什么地方出錯了
            System.err.println("mydb(): " + e.getMessage());
            
           }
           }

          //executeQuery方法用于進行記錄的查詢操作

          //入口參數為sql語句,返回ResultSet對象
           public ResultSet executeQuery(String sql) {
            rs = null;
            try {
          //建立數據庫連接,使用Oracle的一種thin連接方式,demo為主機名字,demodb為數據庫,后面的兩個
          //demo為用戶名和密碼
            
            
            Statement stmt = conn.createStatement();
          //執行數據庫查詢操作
            rs = stmt.executeQuery(sql);
            }
            catch(SQLException ex) {
             System.err.println("db.executeQuery: " + ex.getMessage());
            }
            return rs;
           }
          //executeUpdate方法用于進行add或者update記錄的操作

          //入口參數為sql語句,成功返回true,否則為false
           public boolean executeUpdate(String sql) {
            boolean bupdate=false;
            rs = null;
            try {
          //建立數據庫連接,其它參數說明同上面的一樣
            
            Statement stmt = conn.createStatement();
            int rowCount = stmt.executeUpdate(sql);
          //如果不成功,bupdate就會返回0
            if(rowCount!=0)bupdate=true;
            }
            catch(SQLException ex) {
          //打印出錯信息
             System.err.println("db.executeUpdate: " + ex.getMessage());
            }
           return bupdate;
           }

          //toChinese方法用于將一個字符串進行中文處理

          //否則將會是???這樣的字符串
           public static String toChinese(String strvalue) {
            try{
             if(strvalue==null)
            {
            return null;
            }
            else {
             strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
             return strvalue;
            }
            }catch(Exception e){
             return null;
            }
           }

          }

          adduser.java

          package rkind;
          import java.sql.*;
          import java.lang.*;
          import java.util.Date;
          //adduser由db派生出來,擁有db的成員變量和方法
           public class adduser extends db {
          //構建器
           public boolean addNewUser(){
           boolean boadduser=false;
           try {
          //進行用戶注冊的記錄添加操作,生成sql語句
           
            String sSql=new String("insert into demo(username,password,email,homepage, signs)");
            sSql=sSql+ " values('"+Username+"','"+Password+"','"+Email+"','"+Homepage +"','"+Signs+"')";
          //一種調試的方法,可以打印出sql語句,以便于查看錯誤
            System.out.println(sSql);
          //調用父類的executeUpdate方法,并根據成功以否來設置返回值
            if(super.executeUpdate(sSql))boadduser=true;
            }
           catch(Exception ex) {
          //出錯處理
            System.err.println("adduser.addNewUser: " + ex.getMessage());
           }finally{
          //無論是否出錯,都要返回值
           return boadduser;
           }
          }

          //checkUser()方法用來檢查用戶名是否重復

          //如果重復返回一個false
           public boolean checkUser(){
            boolean boadduser=false;
            try {
          //構建sql查詢語句
             String sSql="select * from demo where username='"+Username+"'";
          //調用父類的executeQuery方法
             if((super.executeQuery(sSql)).next()){
          //查詢出來的記錄集為空
             boadduser=false;
             }else{
              boadduser=true;
             }
            }
            catch(Exception ex) {
          //出錯處理
             System.err.println("adduser.addNewUser: " + ex.getMessage());
            }finally{
          //返回值
             return boadduser;
            }
           }
           public String getUsername(){ return Username;}
           public void setUsername(String newUsername){
          //用戶名有可能是中文,需要進行轉換
            Username =db.toChinese(newUsername);}
          //屬性密碼Password的get/set方法
            public String getPassword(){
            return Password;}
            public void setPassword(String newPassword){ Password = newPassword;}
          //屬性Email的get/set方法
            public String getEmail(){ return Email;}
            public void setEmail(String newEmail){ Email = newEmail;}
          //屬性主頁Homepage的get/set方法
            public String getHomepage(){ return Homepage;}
            public void setHomepage(String newHomepage){ Homepage = newHomepage;}
          //屬性主頁Signs的get/set方法
            public String getSigns(){ return Signs;}
            public void setSigns(String newSigns){
          //簽名有可能是中文,需要進行轉換
            Signs = db.toChinese(newSigns);}
          }
          newuser.jsp

          <%@ page contentType="text/html;charset=gb2312"%>
          <% response.setHeader("Expires","0"); %>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
          <meta name="ProgId" content="FrontPage.Editor.Document">
          <title>新用戶注冊 </title>
          </head>
          <body bgcolor="#FFFAD9">
          <script language="JavaScript">

          function valid(form)

          {
              if(form.username.value.length==0)
             {
                  alert("Please enter username!");
                  form.username.focus();
                  return false;
              }
              if(form.Password.value==form.password1.value){
               alert("你輸入的驗證密碼不正確");
               form.password1.focus(); 
              }
          }
          </script>
          <p align="center"><font color="#8484FF"><strong><big>新個人
          用戶注冊 </font>
          <form onsubmit="return valid(this)" method="POST"  name="formreg" action="donewuser.jsp">
          <div align="center"><center> 
          <table width="49%" height="281"
          border="1"
          cellspacing="0">
              <tr>
                <td width="27%" bgcolor="#DDDDFF" align="center">用戶名:
                  <td width="73%" bgcolor="#DDDDFF"><input type="text"
          name="username" size="20" >
                          <font color="#00CCFF"><b>* </b></font>        
              </tr>
              <tr>
                <td width="27%" bgcolor="#DDDDFF" align="center">輸入密碼:
                  <td width="73%" bgcolor="#DDDDFF"><input type="password" name="password" size="20"
          >
                          <font color="#FF0000"><b>* </b></font>        
              </tr>
              <tr>
                <td width="27%" bgcolor="#DDDDFF" align="center">校驗密碼:
                  <td width="73%" bgcolor="#DDDDFF"><input type="password" name="password1" size="20"
          >
                          <font color="#FF0000"><b>* </b></font>        
              </tr>
              <tr>
                <td width="27%" bgcolor="#DDDDFF" align="center">E-mail
                  <td width="73%" bgcolor="#DDDDFF"><input type="text" name="email" size="20" >
                          <font color="#FF0000">* </font>        
              </tr>
              <tr>
                <td width="27%" bgcolor="#DDDDFF" align="center">主頁地址:
                  <td width="73%" bgcolor="#DDDDFF"><input type="text" name="homepage" size="20"
           value="http://">
                </tr>
              <tr>
                <td width="100%" height="20" colspan="2" bgcolor="#DDDDFF"><br>
                    <center>
                      <font color="red"><b>介紹自己: (介紹自己,不能超過120字)</span></b></font>
                  </center>    </tr>
            <td width="70%">
            <tr>
              <td><textarea rows="6"
          name="signs" cols="30" ></textarea>
            </tr>
            <tr>
              <td width="30%" bgcolor="#DDDDFF" colspan="2"><center>
                  <p>
                    <input
          type="submit" value="遞交" onClick="return checkmsg();" name="B1" >
                    <input type="reset" value="清除" name="B2" >
                </center>
            </tr>
            </table>
            </div>

          </form>

          <hr size="1" color="#FF0000">
          <p align="center">Better View:800*600 Best View:1024x768
          為了本系統能夠更好的為您服務,請使用IE4.0或以上版本瀏覽器
          <font color="#000000"></font><a href="javascript:%20newGuide("copyright.htm")"
          target="_self">版權所有 </a>


          </body>
          </html>

          listuser.jsp

          <%@ page contentType="text/html;charset=gb2312"%>
          <% response.setHeader("Expires","0"); %>
          <%@ page import="java.sql.ResultSet" %>
          <%@ page import="org.gjt.mm.mysql.Driver.*" %>
          <!--生成一個JavaBean:lyf.db的實例-->
          <jsp:useBean id="db" class="rkind.db" scope="request"/>
          <jsp:setProperty name="db" property="*"/>
          <%

          java.lang.String strSQL; //SQL語句

          int intPageSize; //一頁顯示的記錄數
          int intRowCount; //記錄總數
          int intPageCount; //總頁數
          int intPage; //待顯示頁碼
          java.lang.String strPage;
          int i,j,k;
          //設置一頁顯示的記錄數
          intPageSize = 15;
          //取得待顯示頁碼
          strPage = request.getParameter("page");
          if(strPage==null){//表明在QueryString中沒有page這一個參數,此時顯示第一頁數據
          intPage = 1;
          }
          else{//將字符串轉換成整型
          intPage = java.lang.Integer.parseInt(strPage);
          if(intPage<1) intPage = 1;
          }
          //獲取記錄總數
          strSQL = "select count(*) from demo";
          ResultSet result = db.executeQuery(strSQL); //執行SQL語句并取得結果集
          result.next(); //記錄集剛打開的時候,指針位于第一條記錄之前
          intRowCount = result.getInt(1);
          result.close(); //關閉結果集
          //記算總頁數
          intPageCount = (intRowCount+intPageSize-1) / intPageSize;
          //調整待顯示的頁碼
          if(intPage>intPageCount) intPage = intPageCount;
          strSQL="select * from demo ";
          //執行SQL語句并取得結果集
          result = db.executeQuery(strSQL);
          //將記錄指針定位到待顯示頁的第一條記錄上
          i = (intPage-1) * intPageSize;
          for(j=0;j<i;j++) result.next();
          %>
          <html>
          <head>
          <meta http-equiv="Content-Language" content="zh-cn">
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <meta name="GENERATOR" content="Microsoft FrontPage 3.0">
          <meta name="ProgId" content="FrontPage.Editor.Document">
          <title>用戶列表</title>
          </head>
          <body bgcolor="#FFEBBD">
          <div align="center"><center>
          <table border="1"
          borderColorDark="#FFFFFF" borderColorLight="#000000" cellspacing="0" height="22"
          width="100%">
          <tr bgcolor="#FFEBAD">
          <td height="1" width="691" class="main">
          第<%=intPage%>頁 共<%=intPageCount%>頁
          <a href="listuser.jsp?page=0">首頁</a>
          <%if(intPage>1){%><a href="listuser.jsp?page=<%=intPage-1%>">上一頁</a><%}%>
          <%if(intPage<=1){%>上一頁<%}%>
          <%if(intPage<intPageCount){%><a href="listuser.jsp?page=<%=intPage+1%>">下一頁</a><%}%>
          <%if(intPage>=intPageCount){%>下一頁<%}%>
          <a href="listuser.jsp?page=<%=intPageCount%>">尾頁</a>
          第<input type="text" class="main" name="page" size="3" value="<%=intPage%>" tabindex="1">頁<input type="submit" class="main" value="go" name="B1" tabindex="2"><class="main">
          </td></tr></table></form>


          <table border="1" width="100%" cellspacing="0" bordercolorlight="#000000"
          bordercolordark="#FFFFFF" class="main">
          <tr bgcolor="#FFEBAD">
          <td >
          <div align="left">用戶名</div>
          </td>
          <td >
          <p align="center">Email
          </td>
          <td >
          <p align="center">主頁
          </td>
          <td>
          <p align="center">登記時間
          </td>
          <td>
          <p align="center">說明
          </td>
          </tr>
          <%
          //顯示數據
          i = 0;
          while(i<intPageSize && result.next()){
          %>
          <tr bgcolor="#FFEBAD">
          <td>
          <div align="left"><%=result.getString("username") %></div></td>
          <td><div align="center"><%=result.getString("email") %></a></div></td>
          <td><div align="center"><font color="#0000CC"><%=result.getString("homepage") %></font></div></td>
          <td><div align="center"><font color="#FF6666"><%=result.getDate("regtime") %></font></div></td>
          <td><div align="center"><font color="#0000FF"><%=result.getString("signs") %></font></div></td></tr>
          <%
          i++;
          }
          %>
          </table>
          <% result.close(); //關閉結果集%>
          </body>
          </html>

          donewuser.jsp

          <%@ page contentType="text/html;charset=gb2312"%>
          <% response.setHeader("Expires","0"); %>
          <!--生成一個JavaBean:lyf.adduser的實例,id為adduser,生存范圍為page-->
          <jsp:useBean id="adduser" class="rkind.adduser" scope="page"/>

             <!--設置JavaBean中各個屬性的值,這會調用JavaBean中各個屬性的set方法,以便JavaBean得到正確的屬性值,”*”代表進行所有屬性的匹配-->

          <jsp:setProperty name="adduser" property="*"/>
          <html>
          <head>
          <meta http-equiv="Content-Language" content="zh-cn">
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <meta name="GENERATOR" content="Microsoft FrontPage 3.0">
          <meta name="ProgId" content="FrontPage.Editor.Document">
          <title>用戶添加</title>
          </head>
          <body bgcolor="#FFEBBD">
          <div align="center"><center>
          <%
          //調用lyf.adduser的checkUser()方法檢查是否有重復的用戶名

          //如果有重復就顯示對應的信息

          if(!adduser.checkUser())
          {
          //頁面文字輸出信息,使用jsp內置對象out的println方法,相當于asp中的response.write方法

          out.println("對不起,這個用戶名"+adduser.getUsername()+"已經被申請了,請重新選擇!");
          //return代表返回,運行時候碰到return就不會進行下面的處理了,功能相當于asp中的response.end

          return;
          }
          %>
          <%
          //如果沒有用戶名重復的問題,調用lyf.adduser的addNewUser()方法來將用戶數據添加到數據庫中,并根據數據添加成功否來顯示對應的信息
          if(adduser.addNewUser()){
          %>
          <H2>添加用戶成功!</P>
          <%}else{%>
          <H2>添加用戶失敗,請和管理員聯系!</P>
          <%}%>
          </BODY>
          </HTML>

          posted on 2005-10-27 12:56 rkind 閱讀(1261) 評論(0)  編輯  收藏 所屬分類: JSP&Servlet
          主站蜘蛛池模板: 榆社县| 永修县| 麻城市| 祁东县| 琼中| 安西县| 历史| 黄龙县| 山东| 聂荣县| 汉寿县| 开鲁县| 盐山县| 涞水县| 略阳县| 建德市| 沙田区| 双桥区| 磴口县| 邵东县| 林芝县| 翁牛特旗| 毕节市| 额敏县| 桃江县| 华坪县| 科技| 南昌市| 娄底市| 内江市| 镇远县| 温宿县| 龙里县| 基隆市| 乌什县| 博罗县| 遂昌县| 内丘县| 无极县| 安龙县| 嵊州市|