⽹络系统(Javaweb)开发与设计项⽬实战——实现⽤户登录与注册
项⽬概况
该⽤户登录功能通过连接SQL Server数据库实现数据的交互,使⽤MVC架构设计思想和MODEL1(JSP+JavaBean)实现。其
中,Database类负责连接后台数据库进⾏数据交互;DAO层负责业务逻辑判断;Jsp页⾯负责前端展⽰和获取⽤户输⼊的数据。可以实现普通⽤户的注册和登录,管理员⽤户的登录。
项⽬⽂件结构
数据库设计
本功能使⽤SQL Serve实现输⼊输出数据的交互,所有数据都保存在名为users的数据库中。users数据库中包含两张表,user_admin由ad_name(主键)和ad_password项组成,保存管理员⽤户的登录信息;user_ordinary表由ad_name(主键)和ad_password,保存普通⽤户登录信息。
连接数据库
com.db包中的Database类实现连接数据库,可进⾏增删改查等基本操作。
package com.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
* 创建Database服务类,对数据库的增删查改的操作都基于这个类
*/
public class Database
public Database(){}
private String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=users"; private String userName = "sa";
private String userPwd = "******";
public String getDriverName() {
return driverName;
}
public void setDriverName(String driverName) {
this.driverName = driverName;
}
public String getDbURL() {
return dbURL;
}
public void setDbURL(String dbURL) {
this.dbURL = dbURL;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public Connection getConnection()//连接数据库
{
try {
Class.forName(driverName);
System.out.println("获取连接成功!");
Connection(dbURL, userName, userPwd);
}catch(Exception e) {
System.out.println("获取连接失败!");
}
return null;
基于javaweb的美食食谱网站}
public Statement getStatement()
{
try
{
System.out.println("创建对象成功!");
Connection().createStatement();
} catch (SQLException e)
{
// TODO ⾃动⽣成的 catch 块
System.out.println("创建对象失败!");
}
return null;
}
public int insert(String sql)//插⼊
{
try
{
Statement().executeUpdate(sql);
} catch (SQLException e)
{
// TODO ⾃动⽣成的 catch 块
e.printStackTrace();
}
return -1;
}
public int update(String sql) //修改
{
return this.insert(sql);
}
public int delete(String sql)
{
return this.update(sql);
}
public ResultSet select(String sql)//查询
{
try
{
Statement().executeQuery(sql);
} catch (SQLException e)
{
// TODO ⾃动⽣成的 catch 块
e.printStackTrace();
}
return null;
}
}
页⾯设计
前端界⾯由login.jsp、register.jsp等12个页⾯组成,实现普通⽤户的注册和登录,管理员⽤户的登录等功能。使⽤HTML代码进⾏页⾯设计,并运⽤到CSS代码对页⾯的布局进⾏优化,以及⽤JavaScript脚本对输⼊⽤户名和密码是否为空进⾏简单的逻辑判断。使⽤JavaBean 获取⽤户提交的数据,并提交到DAO层进⾏数据交互。
login页⾯
<%@ page contentType="text/html;charset=gb2312"%>
<%
String path = ContextPath();
String basePath = Scheme()+"://"+ServerName()+":"+ServerPort()+path+"/";
%>
<script language="javascript">
function on_submit()
{//验证数据的合法性
if (form1.userName.value == "")
{
alert("账号不能为空,请输⼊账号!");
form1.userName.focus();
return false;
}
if (form1.passWord.value == "")
{
alert("密码不能为空,请输⼊密码!");
form1.passWord.focus();
return false;
return false;
}
}
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登录界⾯</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<img alt="" src="img.1ppt/uploads/allimg/1903/1_190326171106_1.JPG" width="1520" height="289">  <hr>
<div class="divForm">
<form action="do_login.jsp" method="post" name="form1" "return on_submit()">
<p>
<h2>欢迎登录</h2>
</p>
<p>
<b>账号:</b><input type="text" name="userName"/>
</p>
<p>
<b>密码:</b><input type="password" name="passWord"/>
</p>
<input type="submit" value="登录"/>
<input type="reset" value="清除"/>
<br><br>
没有账户?<a href="register.jsp">⽴即注册</a>
</form>
</div>
<div ><a href="login_byadmin.jsp">管理员登录</a></div>  </body>
<style type="text/css">
.divForm{
position: absolute;/*绝对定位*/
width: 300px;
height: 230px;
border: 1px solid blue;
text-align: center;/*(让div中的内容居中)*/
top: 70%;
left: 50%;
margin-top: -200px;
margin-left: -150px;
}
</style>
</html>
页⾯效果
do_login.jsp
do_login.jsp负责获取提交的⽤户登录信息,并与DAO层进⾏数据交互。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
request.setCharacterEncoding("utf-8");
String path = ContextPath();
String basePath = Scheme()+"://"+ServerName()+":"+ServerPort()+path+"/";
%>
<!-- 实例化⽤户类User和⽤户业务逻辑类UserDAO -->
<jsp:useBean id="loginUser" class="com.po.User"/>
<jsp:useBean id="userDAO" class="com.DAO.UserDAO"/>
<jsp:setProperty property="*" name="loginUser"/>
<%
if(userDAO.userLogin(loginUser))//调⽤业务逻辑类UserDAO对输⼊的⽤户名和密码进⾏验证
{
session.setAttribute("loginUser", UserName());//⽤session.setAttribute保存⽤户名
}
else
{
response.sendRedirect("login_failure.jsp");//失败则使⽤请求重定向
}
%>
DAO层设计
DAO层负责与数据库进⾏交互,并对登录信息逻辑判断,由三个class组成。UserDAO类负责对普通⽤户登录进⾏验证;RegisterDAO负责对普通⽤户的注册信息进⾏验证;AdminDAO负责对管理员⽤
户登录进⾏验证。
UserDAO类