一,项目结构和数据库
1,项目结构
2,数据库
二,后端代码
1,DBUtil.java
package com.util;
import java.sql.*;
public class DBUtil {
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/javawebdemo";
private static String user = "root";
private static String pwd = "123456";
//加载驱动
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//连接对象
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, pwd);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭流
public static void close(ResultSet rs, Statement st, Connection conn){
try {
if(rs != null){
rs.close();
}
if(st != null){
st.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(PreparedStatement pst, Connection conn){
close(null, pst, conn);
}
}
2,测试是否能连接数据库,JDBCTest.java
package com.test;
import com.util.DBUtil;
import java.sql.Connection;
public class JDBCTest {
public static void main(String[] args) {
//测试连接数据库是否成功
Connection conn = DBUtil.getConnection();
if(conn != null){
System.out.println("测试:数据库连接成功!");
}else{
System.out.println("测试:数据库连接失败!");
}
}
}
3,实体类User.java
package com.domain;
public class User {
protected String username;
protected String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
4,Dao层UserDao.java
package com.dao;
import com.domain.User;
public interface UserDao {
//定义两个待解决的方法
public boolean save(User user);
public boolean checkLogin(String username, String password);
}
5,Dao层实现类UserDaoImpl.java
package com.dao.impl;
import com.util.DBUtil;
import com.dao.UserDao;
import com.domain.User;
import java.sql.*;
//实现接口的类,返回值为布尔类型
public class UserDaoImpl implements UserDao {
public boolean save(User user){
boolean flag = false;
Connection conn = null;
PreparedStatement pst = null;
/*
创建连接Connection对象和Statement对象
调用插入数据到数据库的方法
*/
conn = DBUtil.getConnection();
String sql = "insert into user(username, password) values(?,?)";
try {
pst = conn.prepareStatement(sql);
pst.setString(1, user.getUsername());
pst.setString(2, user.getPassword());
int row = pst.executeUpdate();
if(row>0){
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(pst, conn);
}
return flag;
}
public boolean checkLogin(String username, String password){
boolean flag = false;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
/*
创建Connnection, Statement, ResultSet对象
调用验证登录的方法
*/
String sql ="select * from user where username = '"+ username +"'";
conn = DBUtil.getConnection();
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
while (rs.next()){
if(rs.getString("password").equals(password)){
flag = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, st, conn);
}
return flag;
}
}
6,测试插入数据到数据库表中,JDBCSaveTest.java
package com.test;
import com.dao.UserDao;
import com.dao.impl.UserDaoImpl;
import com.domain.User;
public class JDBCSaveTest {
public static void main(String[] args) {
//测试添加数据到数据库
UserDao ud = new UserDaoImpl();
User u = new User();
u.setUsername("张三");
u.setPassword("123456");
boolean flag = ud.save(u);
if(flag){
System.out.println("测试:数据添加到数据库成功!");
}else{
System.out.println("测试:数据添加到数据库失败!");
}
}
}
数据表中查看:数据成功插入
7,web界面注册功能控制,RegistServlet.java
package com.servlet;
import com.dao.UserDao;
import com.dao.impl.UserDaoImpl;
import com.domain.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/registServlet")
public class RegistServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置字符
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//转换字符串
String username = request.getParameter("username");
String password = request.getParameter("password");
//调用UserDao、UserDaoImpl类及方法
UserDao ud = new UserDaoImpl();
User u = new User();
//添加用户提交的数据到数据库
u.setUsername(username);
u.setPassword(password);
//处理结果跳转相应页面
boolean flag = ud.save(u);
if(flag){
//注册成功后跳转
response.sendRedirect("login.jsp");
}else{
response.sendRedirect("register.jsp");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
8,web界面登录功能控制,LoginServlet.java
package com.servlet;
import com.dao.UserDao;
import com.dao.impl.UserDaoImpl;
import com.domain.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置字符
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//转换字符串
String username = request.getParameter("username");
String password = request.getParameter("password");
//调用UserDao、UserDaoImpl类及方法
UserDao ud = new UserDaoImpl();
//处理结果跳转相应页面
boolean flag = ud.checkLogin(username, password);
if(flag){
//将提交的用户名存入session,前台登录成功页面调取
HttpSession session = request.getSession();
session.setAttribute("username", username);
//登录成功后跳转
response.sendRedirect("loginSucceed.jsp");
}else{
response.sendRedirect("loginFailed.jsp");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
三,前端代码
1,首页,index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>网站首页</h1>
<br>
<p><a href="login.jsp">登录</a> <a href="register.jsp">注册</a></p>
</body>
</html>
2,注册,register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
</head>
<body>
<h1>用户注册</h1>
<form action="${pageContext.request.contextPath}/registServlet" method="post">
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="password"></p>
<p><input type="submit" value="注册" onclick="alert('注册成功')"> <input type="reset" value="重置"></p>
<p><a href="login.jsp">登录</a></p>
</form>
</body>
</html>
3,登录,login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="${pageContext.request.contextPath}/loginServlet" method="post">
<p>用户名:<input type="test" name="username"></p>
<p>密码:<input type="password" name="password"></p>
<p><input type="submit" value="登录"> <input type="reset" value="重置"></p>
<p><a href="register.jsp">注册</a></p>
</form>
</body>
</html>
4,登录成功,loginSucceed.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h1>登录成功,欢迎您:${sessionScope.username}</h1>
<p><a href="index.jsp">回到首页</a></p>
</body>
</html>
5,登录失败,loginFailed.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录失败</title>
</head>
<body>
<h1>登录失败!</h1>
<p><a href="login.jsp">重新登录</a></p>
</body>
</html>
四,页面展示
1,首页
2,注册
3,登录
4,登录失败
5,登录成功