雅典之夏的小站
知人者智 自知者明 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 阅读(1255) 评论(0)  编辑  收藏 所属分类: JSP&Servlet

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问