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

          本文主要參考了,JSP+javabean循序漸進(jìn)

          開發(fā)平臺:winxp+tomcat4+mysql+javabean

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

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

          主要有三個jsp頁面:

          addnewuser.jsp,主要用來實現(xiàn)注冊用戶的界面,

          doadduser.jsp 實現(xiàn)填加到數(shù)據(jù)庫中的具體功能

          listuser.jsp 來實現(xiàn)顯示所有用戶信息

          兩個bean:

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

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

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

          我直接調(diào)用原文的代碼時后發(fā)現(xiàn)調(diào)用了span什么,不太懂,而且有很多字符不對,所以調(diào)試時的問題基本上都是html代碼的問題.這是一個僅有基本功能,很多方面還需進(jìn)一步完善,比如實現(xiàn)注冊時間(雖然這不難,可是我還沒看util.date和sql.date 區(qū)別),email地址的識別,連登錄都沒有做 :) ,我發(fā)現(xiàn)基于這種bean結(jié)構(gòu)的功能很吸引人,比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; //數(shù)據(jù)庫連接
          ResultSet rs = null; //記錄集
          String Username=""; //用戶名
          String Password=""; //密碼
          String Email=""; //email
          String Homepage=""; //主頁
          String Signs=""; //簽名
          String url="jdbc:mysql://172.20.0.73/rk";

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

          //executeQuery方法用于進(jìn)行記錄的查詢操作

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

          //入口參數(shù)為sql語句,成功返回true,否則為false
           public boolean executeUpdate(String sql) {
            boolean bupdate=false;
            rs = null;
            try {
          //建立數(shù)據(jù)庫連接,其它參數(shù)說明同上面的一樣
            
            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方法用于將一個字符串進(jìn)行中文處理

          //否則將會是???這樣的字符串
           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 {
          //構(gòu)建器
           public boolean addNewUser(){
           boolean boadduser=false;
           try {
          //進(jìn)行用戶注冊的記錄添加操作,生成sql語句
           
            String sSql=new String("insert into demo(username,password,email,homepage, signs)");
            sSql=sSql+ " values('"+Username+"','"+Password+"','"+Email+"','"+Homepage +"','"+Signs+"')";
          //一種調(diào)試的方法,可以打印出sql語句,以便于查看錯誤
            System.out.println(sSql);
          //調(diào)用父類的executeUpdate方法,并根據(jù)成功以否來設(shè)置返回值
            if(super.executeUpdate(sSql))boadduser=true;
            }
           catch(Exception ex) {
          //出錯處理
            System.err.println("adduser.addNewUser: " + ex.getMessage());
           }finally{
          //無論是否出錯,都要返回值
           return boadduser;
           }
          }

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

          //如果重復(fù)返回一個false
           public boolean checkUser(){
            boolean boadduser=false;
            try {
          //構(gòu)建sql查詢語句
             String sSql="select * from demo where username='"+Username+"'";
          //調(diào)用父類的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){
          //用戶名有可能是中文,需要進(jìn)行轉(zhuǎn)換
            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){
          //簽名有可能是中文,需要進(jìn)行轉(zhuǎn)換
            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
          為了本系統(tǒng)能夠更好的為您服務(wù),請使用IE4.0或以上版本瀏覽器
          <font color="#000000"></font><a href="javascript:%20newGuide("copyright.htm")"
          target="_self">版權(quán)所有 </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; //一頁顯示的記錄數(shù)
          int intRowCount; //記錄總數(shù)
          int intPageCount; //總頁數(shù)
          int intPage; //待顯示頁碼
          java.lang.String strPage;
          int i,j,k;
          //設(shè)置一頁顯示的記錄數(shù)
          intPageSize = 15;
          //取得待顯示頁碼
          strPage = request.getParameter("page");
          if(strPage==null){//表明在QueryString中沒有page這一個參數(shù),此時顯示第一頁數(shù)據(jù)
          intPage = 1;
          }
          else{//將字符串轉(zhuǎn)換成整型
          intPage = java.lang.Integer.parseInt(strPage);
          if(intPage<1) intPage = 1;
          }
          //獲取記錄總數(shù)
          strSQL = "select count(*) from demo";
          ResultSet result = db.executeQuery(strSQL); //執(zhí)行SQL語句并取得結(jié)果集
          result.next(); //記錄集剛打開的時候,指針位于第一條記錄之前
          intRowCount = result.getInt(1);
          result.close(); //關(guān)閉結(jié)果集
          //記算總頁數(shù)
          intPageCount = (intRowCount+intPageSize-1) / intPageSize;
          //調(diào)整待顯示的頁碼
          if(intPage>intPageCount) intPage = intPageCount;
          strSQL="select * from demo ";
          //執(zhí)行SQL語句并取得結(jié)果集
          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>
          <%
          //顯示數(shù)據(jù)
          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(); //關(guān)閉結(jié)果集%>
          </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"/>

             <!--設(shè)置JavaBean中各個屬性的值,這會調(diào)用JavaBean中各個屬性的set方法,以便JavaBean得到正確的屬性值,”*”代表進(jìn)行所有屬性的匹配-->

          <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>
          <%
          //調(diào)用lyf.adduser的checkUser()方法檢查是否有重復(fù)的用戶名

          //如果有重復(fù)就顯示對應(yīng)的信息

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

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

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

          posted on 2005-10-27 12:56 rkind 閱讀(1263) 評論(0)  編輯  收藏 所屬分類: JSP&Servlet
          主站蜘蛛池模板: 屏东县| 三原县| 长丰县| 武宣县| 苍山县| 北辰区| 中江县| 侯马市| 佳木斯市| 小金县| SHOW| 彰化县| 依兰县| 瓦房店市| 淄博市| 宜春市| 鱼台县| 东兰县| 休宁县| 视频| 原平市| 尉犁县| 那坡县| 柘荣县| 启东市| 澜沧| 张家界市| 文登市| 青海省| 东台市| 安顺市| 抚顺县| 县级市| 伊宁市| 兴城市| 兰考县| 天全县| 循化| 鄄城县| 麻栗坡县| 页游|