javaWeb中详细解读登录和注册功能(一)

31 篇文章 2 订阅
31 篇文章 2 订阅

项目结构:
在这里插入图片描述
com.db. DBConnection:

package com.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

//封装数据连接类
public class DBConnection {
	private Connection conn=null;//数据库连接对象
	private Statement sta=null;//sql执行对象
	private ResultSet rs=null;//结果集对象
	
	//获取数据库连接
	public Connection getConn(){
		String dbDriver="com.mysql.jdbc.Driver";//mysql驱动名
		String url="jdbc:mysql://localhost:3306/tb_user";//访问数据库地址
		String us="root";//数据库账号
		String pw="123456";//数据库密码
		try {
			Class.forName(dbDriver);//通过反射加载mysql驱动
			conn=DriverManager.getConnection(url, us, pw);//获取数据库连接
		} catch (Exception e) {
			e.printStackTrace();//打印异常栈信息
		}
		return conn;
	}
	
	//执行查询语句的方法
	public ResultSet querSQL(String sql){
		conn=this.getConn();//获取数据库连接
		try {
			sta = conn.createStatement();//通过数据库连接创建mysql语句执行对象
			rs = sta.executeQuery(sql);//执行查询语句
		} catch (Exception e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	//执行非查询语句
	public int SQLUpdate(String sql){
		int x = 0;//定义一个标识来接收影响的行数
		Connection conn = getConn();
		try {
			sta = conn.createStatement();	//通过连接对象创建SQL执行对象
			x = sta.executeUpdate(sql);		//通过SQL对象执行对象执行非查询的SQL语句,并返回收影响的行数
		} catch (Exception e) {
			e.printStackTrace();
		}
			return x;
		}
	//关闭对象释放内存
	public void object(){
		try {
			if(rs!=null){rs.close();}
			if(sta!=null){sta.close();}
			if(conn!=null){conn.close();}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

com.user.User:

package com.user;
	//用户实体类
public class User {
	private int uid;//用户
	private String username;//用户名
	private String password;//用户密码
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	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;
	}
		
		
		
}

com.dao.UsreDao:

package com.dao;

import java.sql.ResultSet;

import java.util.ArrayList;

import com.db.DBConnection;

import com.user.User;

//业务数据处理类
public class UsreDao {
	
	//登录查询
	public boolean cherUser(String us ,String pw){
		boolean flag=false;//自定义标识
		DBConnection db = new  DBConnection();//实例化数据连接类
		String sql="select * from tb_user where username='"+us+"' and password='"+pw+"'";
		try {
			ResultSet rs=db.querSQL(sql);//定义一个变量来接收查询后的结果集
			if(rs!=null && rs.next()){//结果集不能为空,且有记录则表示用户存在
				flag=true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			db.object();//释放内存
		}
		return flag;
	}
	
	//注册用户信息
	public int userQuery(String us,String pw){
		int x = 0;
		DBConnection db = new  DBConnection();//实例化数据连接类
		String sql = "insert into tb_user (username,password) values('"+us+"','"+pw+"')";
		try {
			x = db.SQLUpdate(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
				db.object();
		}
			return x;
		}
	
	//查询注册用户是否存在
	public boolean userName(String us){
		boolean flag=false;//自定义标识
		DBConnection db = new  DBConnection();
		String sql = "select * from tb_user where username = '"+us+"'";
		try {
			ResultSet rs=db.querSQL(sql);//自定义变量来接收查询后的结果集
			if(rs!=null && rs.next()){//结果集不能为空,且有记录则表示用户存在
				flag=true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			db.object();
		}
		return flag;
	}
	
	//查看数据库信息
	//遍历用户的方法
		public ArrayList<User> queUser(){
			ArrayList<User> li = new ArrayList<User>();
			String sql="select * from tb_user";//查询tb_user表中的所有数据
			DBConnection db = new  DBConnection();
			ResultSet rs=db.querSQL(sql);//执行查询语句
			try {//next()读取数据库游标
				while(rs.next()){//while循环每循环一次就把tb_user表的一条数据封装给User用户实体类
				User u=new User();
				u.setUid(rs.getInt(1));//用户id
				u.setUsername(rs.getString("username"));//用户名字
				u.setPassword(rs.getString("password"));//性别
				li.add(u);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return li;
		}
}

登录页面(login.jsp):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>登录</title>
    
  </head>
  
  <body>
  		<form action="login" method="post"  onsubmit="return cherk()">
  			账号:<input type="text" name="username"/><br>
  			密码:<input type="text" name="passwrod"/><br>
  			<input type="submit" value="登录">
  		</form>
  </body>
  <script type="text/javascript">
  		function cherk(){
			var odain=document.getElementsByName("username")[0].value;
			var opadn=document.getElementsByName("passwrod")[0].value;
			if(odain==null || odain==""){
				alert("账号不能为空!");
				return false;
			}else if(opadn==null || opadn==""){
				alert("密码不能为空!");
				return false;
			}
			return true;
  		}
  		
  		 var err ='<%=request.getAttribute("status")%>';
  		 if(err=='on'){
  		 	alert("账号或者密码有误,请重新登录");
  		 }else if(err=='yes'){
  		 	alert("注册成功!");	
  		 }
  </script>
 
</html>

登录Servlet类:

package com.servlet;

import java.io.IOException;

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 com.dao.UsreDao;
@WebServlet(name="Login",urlPatterns="/login")
public class Login extends HttpServlet{
	
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req,resp);//生成doPost方法,针对doGet方法请求
	}
	
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");//设置请求编码格式
		resp.setContentType("text/html;charset=utf-8");//设置响应编码格式
		//声明两个变量,来接收用户输入的账号和密码
		String username=req.getParameter("username");
		String password=req.getParameter("passwrod");
		UsreDao dao=new UsreDao();//实例化UserDao类
		boolean flag=dao.cherUser(username, password);
		if(flag){//如果数据库中有数据则跳转显示页面
			req.getRequestDispatcher("/index.jsp").forward(req, resp);
		}else{
			req.setAttribute("status", "on");
			req.getRequestDispatcher("/login.jsp").forward(req, resp);
		}
	}
}

显示页面(index.jsp)

<%@ page language="java" import="java.util.*,com.user.User,com.dao.UsreDao" pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>显示界面</title>
	
  </head>
  
  <body>
   <%
   	UsreDao dao=new UsreDao();
   	ArrayList<User> listUser =dao.queUser();
    %>
   <div align="center">
   <table border="1">
   	<caption>用户列表</caption>
   	<tr>
   		<td>用户名</td>
   		<td>密码</td>
   	</tr>
   	<%
   		for(User user:listUser){
   	%>
   	<tr>
   		<td><%=user.getUsername() %></td>
   		<td><%=user.getPassword()%></td>

   	</tr>	
   	<% 
   		}
   	 %>
   </table>
   </div>
  </body>
</html>

注册页面(insert.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>注册</title>

  </head>
  
  <body>
   <form action="insert" method="post"  onsubmit="return cherk()">
  			账号:<input type="text" name="username"/><br>
  			密码:<input type="text" name="passwrod"/><br>
  			<input type="submit" value="注册">
  		</form>
  </body>
  <script type="text/javascript">
  		function cherk(){
			var odain=document.getElementsByName("username")[0].value;
			var opadn=document.getElementsByName("passwrod")[0].value;
			if(odain==null || odain==""){
				alert("账号不能为空!");
				return false;
			}else if(opadn==null || opadn==""){
				alert("密码不能为空!");
				return false;
			}
			return true;
  		}
  		
  		 var err ='<%=request.getAttribute("status")%>';
  		 if(err=='on'){
  		 	alert("用户已存在,请重新注册!");
  		 }else if(err=='yo'){
  		 	alert("注册失败,请重新注册!");
  		 }
  </script>
</html>

注册Servlet类

package com.servlet;

import java.io.IOException;


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 com.dao.UsreDao;

@WebServlet(name="Insert",urlPatterns="/insert")
public class Insert extends HttpServlet {
	
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}
	
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");//设置请求编码格式
		resp.setContentType("text/html;charset=utf-8");//设置响应编码格式
		//声明两个变量,来接收用户输入的账号和密码
		String username=req.getParameter("username");
		String password=req.getParameter("passwrod");
		UsreDao dao=new UsreDao();//实例化UserDao类
   		boolean flag =dao.userName(username);
   		if(flag){
			req.setAttribute("status","on");
   			req.getRequestDispatcher("insert.jsp").forward(req,resp);
   		}else{
   			int x=dao.userQuery(username, password);
   			if(x>0){//如果注册成功就跳转到登录页面上
   				req.setAttribute("status","yes");
   				req.getRequestDispatcher("/login.jsp").forward(req,resp);
   			}else{//如果注册失败就跳转到失败页面上
   				req.setAttribute("status","yo");
   				req.getRequestDispatcher("/insert.jsp").forward(req,resp);
   			}
   		}
	}
}

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值