**
- 项目需求
**
- 实现用户登录
- 实现用户登出
- 实现用户注册
- 功能分析:
- 实现用户注册:根据用户名和密码查询用户信息,查有则登录成功,查无则登录失败;
- 用户退出:销毁session;
- 用户注册:将用户信息录入数据库;
- 数据库设计:
- 表名:t_user;
- 用户id:uid;
- 用户名:uname;
- 用户密码:pwd;
- 性别:sex;
- 年龄:age;
- 出生日期:birthday;
- 数据库命令设计:
- 用户登录:select * from t_user where uname=? and pwd=?;
- 用户注册:insert into t_user values (default,?,?,?,?,?)
**
MVC模式:
**
- M:model, 包含service层、Dao层和实体类层;
- V:view,视图jsp页面等;
- C:controller, 控制层,servlet层等
一、用户登录的实现
- 项目环境
1)页面源码(不要只复制jsp,其他的一些也要复制进来);
2)my-sql.connector jar包,这里用的是mysql-connector-java-5.1.30;
3)jdbc操作工具类,DBUtil类放在util包里,db.properties;
2.实现步骤
1)用户点击登录发送请求到UserServlettomcat服务器收到请求后调用UserServlet中的service方法进行请求处理;并将封存了相关数据的request对象和response对象作为实参传递给service方法
2) 在UserServlet中调用业务层方法进行登录业务处理,在业务层方法中调用Dao层方法完成数据库操作
3)完成功能跳转
C层:
1)UserSerlvet
package com.facai.user;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.facai.pojo.User;
import com.facai.service.UserService;
import com.facai.service.impl.UserServiceImpl;
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
String uname=req.getParameter("uname");
String pwd=req.getParameter("pwd");
System.out.println(uname+":"+pwd);
//处理请求信息
//创建业务层
UserService us=new UserServiceImpl();
User u=us.getUserInfoService(uname,pwd);
System.out.println("用户登录查询结果为:"+u);
//响应处理结果
//重定向
//创建session对象
HttpSession session=req.getSession();
if(u!=null){
//登录成功
//重定向到main.jsp
resp.sendRedirect("/project/main.jsp");
session.setAttribute("uname",uname);
}else{
//登录失败
//将登录失败的标记添加到session中
session.setAttribute("flag", "LoginFalse");
//重定向到login.jsp
resp.sendRedirect("/project/login.jsp");
}
}
}
M层:
1)User
package com.facai.pojo;
public class User {
private int uid;
private String uname;
private String pwd;
private String sex;
private int age;
private String birthday;
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 getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public User(int uid, String uname, String pwd, String sex, int age,
String birthday) {
super();
this.uid = uid;
this.uname = uname;
this.pwd = pwd;
this.sex = sex;
this.age = age;
this.birthday = birthday;
}
public User() {
super();
}
@Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + ", pwd=" + pwd
+ ", sex=" + sex + ", age=" + age + ", birthday=" + birthday
+ "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result
+ ((birthday == null) ? 0 : birthday.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 (birthday == null) {
if (other.birthday != null)
return false;
} else if (!birthday.equals(other.birthday))
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;
}
}
2)UserService接口和UserServiceImpl实现类
UserService
package com.facai.service;
import com.facai.pojo.User;
public interface UserService {
/**
* 用户登录
* @param uname
* @param pwd
* @return
*/
User getUserInfoService(String uname, String pwd);
}
UserServiceImpl
package com.facai.service.impl;
import com.facai.dao.UserDao;
import com.facai.dao.impl.UserDaoImpl;
import com.facai.pojo.User;
import com.facai.service.UserService;
public class UserServiceImpl implements UserService {
//创建Dao层对象
UserDao ud=new UserDaoImpl();
@Override
public User getUserInfoService(String uname, String pwd) {
// TODO Auto-generated method stub
return ud.getUserInfoService(uname,pwd);
}
}
3)UserDao接口和UserDaoImpl实现类
UserDao接口
package com.facai.dao;
import com.facai.pojo.User;
public interface UserDao {
/**
* 根据用户名和密码查询用户信息
*/
User getUserInfoService(String uname, String pwd);
}
UserDaoImpl实现类
package com.facai.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.facai.dao.UserDao;
import com.facai.pojo.User;
import com.facai.util.DBUtil;
public class UserDaoImpl implements UserDao{
@Override
public User getUserInfoService(String uname, String pwd) {
// 声明jdbc对象
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
//声明变量
User u=null;
try {
//创建连接
conn=DBUtil.getConnection();
//创建SQL语句
String sql="select * from t_user where uname=? and pwd=?";
//创建SQL语句对象
ps=conn.prepareStatement(sql);
//给占位符赋值
ps.setString(1,uname);
ps.setString(2,pwd);
//执行SQL命令
rs=ps.executeQuery();
//遍历
while(rs.next()){
u=new User();
u.setUid(rs.getInt("uid"));
u.setUname(rs.getString("uname"));
u.setPwd(rs.getString("pwd"));
u.setSex(rs.getString("sex"));
u.setAge(rs.getInt("age"));
u.setBirthday(rs.getString("birthday"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭资源
DBUtil.closeAll(rs,ps, conn);
}
//返回结果
return u;
}
}
V层:
1)login.jsp(登录页面)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<base href="<%=basePath %>>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="renderer" content="webkit">
<title>登录</title>
<link rel="stylesheet" href="css/pintuer.css">
<link rel="stylesheet" href="css/admin.css">
<script src="js/jquery.js"></script>
<script src="js/pintuer.js"></script>
</head>
<body>
<div class="bg"></div>
<div class="container">
<div class="line bouncein">
<div class="xs6 xm4 xs3-move xm4-move">
<div style="height:150px;"></div>
<div class="media media-y margin-big-bottom">
</div>
<form action="user" method="post">
<div class="panel loginbox">
<div class="text-center margin-big padding-big-top"><h1>后台管理中心</h1></div>
<!-- 声明java代码块 -->
<%
//获取session 标记
Object obj=session.getAttribute("flag");
if(obj!=null){
%>
<div style="text-align:center;color:red">用户名或密码错误</div>
<%
}
session.invalidate();
%>
<div class="panel-body" style="padding:30px; padding-bottom:10px; padding-top:10px;">
<div class="form-group">
<div class="field field-icon-right">
<input type="text" class="input input-big" name="uname" placeholder="登录账号" data-validate="required:请填写账号" />
<span class="icon icon-user margin-small"></span>
</div>
</div>
<div class="form-group">
<div class="field field-icon-right">
<input type="password" class="input input-big" name="pwd" placeholder="登录密码" data-validate="required:请填写密码" />
<span class="icon icon-key margin-small"></span>
</div>
</div>
<div class="form-group">
<div class="field">
<input type="text" class="input input-big" name="code" placeholder="填写右侧的验证码" data-validate="required:请填写右侧的验证码" />
<img src="images/passcode.jpg" alt="" width="100" height="32" class="passcode"