Java的完整用户登陆系统

本文详述了一个使用Servlet+jsp+mvc+jdbc技术实现的Java用户登录系统的全过程。涵盖了从功能需求、数据库设计、代码规范到具体操作步骤的详细讲解,包括用户登录、注册、退出、查看个人信息及修改密码等功能。涉及的技术包括MyEclipse、MySQL、TomCat,以及日志规范的log4j。
摘要由CSDN通过智能技术生成

信息管理系统

用到的技术

Servlet+jsp+mvc+jdbc

其他软件(可以自行替换)

开发工具:myEclipse
数据库: mySql
服务器:TomCat

功能需求

  1. 用户登录
  2. 用户注册
  3. 用户退出
  4. 查看个人信息
  5. 修改密码
  6. 查询所有用户信息

数据库设计

创建用户表. 表名:t_user
表设计:

字段名 类型 约束
uid int(10) 主键、非空、自增
uname varchar(50) 非空
pwd varchar(50) 非空
sex char(2) 非空
age int(3)
birth date
##创建用户表
create table t_user(
	uid int(10) not null auto_increment,
	uname varchar(100) not null,
	pwd varchar(100) not null,
	sex char(2)  not null,
	age int(3),
	birth date,
	primary key(uid)
)
##添加测试数据
insert into t_user values(default,'小明','123321',1,18,'2000-10-4');
insert into t_user values(default,'小红','456789',0,18,'2000-9-8');
select * from t_user; 

代码规范

命名规范

包名:com.youdian.*
类名:首字母大写,见名知意
变量名和方法名:驼峰原则,见名知意

注释规范

  1. 方法功能注释
  2. 方法体核心位置有说明注释

日志规范

使用log4j进行日志输出
数据流转的位置必须有后台输出语句

功能设计

逻辑:用户请求登陆页面,输入用户名密码,请求发送给处理请求的Servlet,Servlet拿到数据后进行验证。根据MVC分层思想,从Servlet调Service,从Service调Dao,完成数据库操作。如果验证正确,则重定向到主页面,如果验证失败,则显示“用户名或密码错误”,返回登陆页面。

登陆页面的jsp,其中placeholder浏览器识别,编译器不能识别

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>欢迎登录后台管理系统</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" src="js/jquery.js"></script>
<script src="js/cloud.js" type="text/javascript"></script>

<script language="javascript">
	$(function(){
    
    $('.loginbox').css({
    'position':'absolute','left':($(window).width()-692)/2});
	$(window).resize(function(){
      
    $('.loginbox').css({
    'position':'absolute','left':($(window).width()-692)/2});
    })  
});  
</script> 

</head>

<body style="background-color:#df7611; background-image:url(images/light.png); background-repeat:no-repeat; background-position:center top; overflow:hidden;">



    <div id="mainBody">
      <div id="cloud1" class="cloud"></div>
      <div id="cloud2" class="cloud"></div>
    </div>  


<div class="logintop">    
    <span>欢迎登录后台管理界面平台</span>    
    </div>
    
    <div class="loginbody">
    
    <span class="systemlogo"></span> 
    <br />
    <%
    	//声明java代码块进行错误提示语的逻辑校验
    	Object obj=request.getAttribute("flag");
    	if(obj!=null){
    %>
	    <div style="text-align: center;">
	     <span style="font-size: 15px;color:darkred;font-weight: bold;">用户名或者密码错误</span>
	    </div>
    <%} %>
   <%
    	//声明java代码块进行密码修改提示语
    	Object pwd=session.getAttribute("pwd");
    	if(pwd!=null){
    %>
	    <div style="text-align: center;">
	     <span style="font-size: 15px;color:darkred;font-weight: bold;">密码修改成功</span>
	    </div>
    <%}
    	session.removeAttribute("pwd");
    %>
       <%
    	//声明java代码块进行注册提示语
    	Object reg=session.getAttribute("reg");
    	if(reg!=null){
    %>
	    <div style="text-align: center;">
	     <span style="font-size: 15px;color:darkred;font-weight: bold;">注册成功</span>
	    </div>
    <%}
    	session.removeAttribute("reg");
    %>
    <div class="loginbox loginbox1">   
    <form action="user" method="post">
    	<input type="hidden" name="oper" value="login" />
    	<ul>
    	<li></li>
	    <li><input name="uname" type="text" placeholder="用户名" class="loginuser"  /></li>
	    <li><input name="pwd" type="password" placeholder="密码" class="loginpwd"  /></li>
	    <li class="yzm">
	    <span><input name="" type="text" value="验证码" onclick="JavaScript:this.value=''"/></span><cite>X3D5S</cite> 
	    </li>
	    <li><input name="" type="submit" class="loginbtn" value="登录"  onclick="javascript:window.location='main.html'"  /><label><a href="user/reg.jsp">注册</a></label><label><a href="#">忘记密码?</a></label></li>
	   </ul>
    </form>
    </div> 
    </div>   
    <div class="loginbm">版权所有 练习 <a href="http://www.uimaker.com">uimaker.com</a> 用于学习交流</div>
</body>
</html>

操作步骤:

  1. 设置请求编码格式
  2. 设置响应编码格式
  3. 获取请求信息
  4. 处理请求信息
  5. 响应处理结果
    5.1直接响应
    5.2请求转发
    5.3重定向

分析:

1和2是公共代码部分,其余部分根据功能不同调用不同的方法

		//设置请求编码格式
		req.setCharacterEncoding("utf-8");
		//设置响应编码格式
		resp.setContentType("text/html;charset=utf-8");

让用户在请求时发送自己要干什么,在form标签下面:

<input type="hidden" name="oper" value="login" />

可以用这个操作符来判断用户干什么:

if("login".equals(oper))//调用登录处理方法
else if("out".equals(oper))//调用退出功能
else if("pwd".equals(oper))//调用密码修改功能
else if("show".equals(oper))//调用显示所有用户功能
else if("reg".equals(oper))//调用注册功能
logger.debug("没有找到对应的操作符:"+oper);

再根据MVC的分层思想:先是控制器层servlet,再是service,dao,实体类

数据的流转都需要实体类参与,所以先创建实体类User

在User类中,声明私有属性后,加入get()和set()方法,toString(),hashCode和equals(),有参构造器,无参构造器

package com.youdian.pojo;

public class User {
   
	private int uid;
	private String uname;
	private String pwd;
	private String sex;
	private int age;
	//mysql查出来的时间可以是String,oracle不可以
	private String birth;
	public int getUid() {
   
		return uid;
	}
	public void setUid(int uid) {
   
		this.uid = uid;
	}
	public String getUname() {
   
		return uname;
	}
	public void setUname(String uname) {
   
		this.uname = uname;
	}
	public String getPwd() {
   
		return pwd;
	}
	public void setPwd(String pwd) {
   
		this.pwd = pwd;
	}
	public String getSex() {
   
		return sex;
	}
	public void setSex(String sex) {
   
		this.sex = sex;
	}
	public int getAge() {
   
		return age;
	}
	public void setAge(int age) {
   
		this.age = age;
	}
	public String getBirth() {
   
		return birth;
	}
	public void setBirth(String birth) {
   
		this.birth = birth;
	}
	@Override
	public String toString() {
   
		return "User [uid=" + uid + ", uname=" + uname + ", pwd=" + pwd
				+ ", sex=" + sex + ", age=" + age + ", birth=" + birth + "]";
	}
	@Override
	public int hashCode() {
   
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((birth == null) ? 0 : birth.hashCode());
		result = prime * result + ((pwd == null) ? 0 : pwd.hashCode());
		result = prime * result + ((sex == null) ? 0 : sex.hashCode());
		result = prime * result + uid;
		result = prime * result + ((uname == null) ? 0 : uname.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
   
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (age != other.age)
			return false;
		if (birth == null) {
   
			if (other.birth != null)
				return false;
		} else if (!birth.equals(other.birth))
			return false;
		if (pwd == null) {
   
			if (other.pwd != null)
				return false;
		} else if (!pwd.equals(other.pwd))
			return false;
		if (sex == null) {
   
			if (other.sex != null)
				return false;
		} else if (!sex.equals(other.sex))
			return false;
		if (uid != other.uid)
			return false;
		if (uname == null) {
   
			if (other.uname != null)
				return false;
		} else if (!uname.equals(other.uname))
			return false;
		return true;
	}
	public User(int uid, String uname, String pwd, String sex, int age,
			String birth) {
   
		super();
		this.uid = uid;
		this.uname = uname;
		this.pwd = pwd;
		this.sex = sex;
		this.age = age;
		this.birth = birth;
	}
	public User() {
   
		super();
		 
	}
	
}

再写出service接口
其中 User checkUserLoginService(String uname,String pwd);接收两个参数,传入service层,通过service来判断是否有该用户——业务逻辑与控制器解耦

package com.youdian.service;

public interface UserService {
   
	//校验用户登陆
	User checkUserLoginService(String uname,String pwd);

}

写出dao的接口,可以查询到的用户信息

package com.youdian.dao;

import com.youdian.pojo.User;

public interface UserDao {
   
	//根据用户名密码查询用户信息,返回查询到的用户信息
	User checkUserLoginDao(String uname,String pwd);
}

写出接口的实现类
其中查询数据库信息步骤如下:
声明JDBC对象
声明变量
加载驱动
获取连接
创建sql命令
创建sql命令对象
给占位符赋值
执行sql
遍历结果
关闭资源
返回结果

package com.youdian.dao.impl;


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



import java.sql.SQLException;

import com.youdian.dao.UserDao;
import com.youdian.pojo.User;

public class UserDaoImpl implements UserDao
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值