使用MVC实现登录注册功能(数据保存到数据库)详细讲解以及代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用MVC实现登录注册功能(数据保存到数据库)详细讲解以及代码相关的知识,希望对你有一定的参考价值。
1、视图层(View)页面的编写:
简单的html页面,这里只显示登录界面,其他的界面很容易写,简单的页面跳转。 提示。登录页面: action="servletControll"。将登录的内容提交都处理登录的的servlet.注册页面的数据提交到处理注册页面的servelet。
<hr>
1.1、登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="servletControll" method="post">
用户名:<input type="text" name="uname"/>
密 码: <input type="password" name="upwd"/><br><br>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
<a rel="nofollow" href="register.jsp">注册新用户</a>
</form>
</body>
</html>
<hr>
1.2、注册页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="servletControllRegiser" method="post">
用户名:<input type="text" name="uname"/>
密 码: <input type="password" name="upwd"/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
<hr>
2、控制层(Controller)的编写
servletControll:编写的servlet层,表示将提交的页面内容信息传给servletControll处理。
提交的方式:
- post:表示提交的内容不显示在浏览器文本框里
- get:提交的内容显示在URL地址栏中 比较不安全(敏感信息全部暴露出来)。
servlet层:
友情提示: 放置提交的信息发生乱码:request.setCharacterEncoding("utf-8");还有相应的信息也需要设置响应编码。目前这里不需要用到response设置相应的信息。 通过request.getParameter("uname")取得值。根据uname取得姓名的值。
<hr>
2.1、 注册
package com.zyz.service;
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.zyz.funciton.RegisterDao;
import com.zyz.login.Login;
/**
* Servlet implementation class servletControllRegiser
*/
@WebServlet("/servletControllRegiser")
public class servletControllRegiser extends HttpServlet
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
//注册功能、、向数据库添加数据
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
Login log=new Login(name,pwd);//保存客户端输入的信息
int result=RegisterDao.register(log);
if(result>0)
//注册成功
response.sendRedirect("successRegister.jsp");
else
//注册失败重新注册
response.sendRedirect("register.jsp");
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
doGet(request, response);
==友情提示:== 在注册之前可以先调用查询有无此人,如果有此人可以编写提示信息。自己实现,很容易在注册函数调用之前先调用查询函数
<hr>
2.2 、登录
package com.zyz.service;
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.zyz.funciton.LoginDao;
import com.zyz.login.Login;
/**
* Servlet implementation class servletControll
*/
@WebServlet("/servletControll")
public class servletControll extends HttpServlet
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
//取值
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
//封装
Login log=new Login(name,pwd);
//调用业务逻辑层
int result =LoginDao.login(log);
if(result>0)
//登录成功
response.sendRedirect("success.jsp");//重定向到成功界面
else
//登录失败
response.sendRedirect("notsuccess.jsp");//定位到失败页面
//请求转发
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
doGet(request, response);
==友情提示:==
<hr>
2.3 、实体类
package com.zyz.login;
public class Login
// 封装实体类的JavaBean
private String name;
private String password;
public Login()
// 构造方法用来传入数值
public Login(String name, String password)
this.name = name;
this.password = password;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getPassword()
return password;
public void setPassword(String password)
this.password = password;
<hr>
3、Model层(Model)的编写
model层(处理业务逻辑的JavaBean,封装实体类信息的JavaBean) 实际上就是操作数据库的一些增删改查。这里只需要编写添加新用户的信息,和查询登录。
<hr>
3.1 登录
package com.zyz.funciton;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zyz.login.Login;
//处理业务逻辑的JavaBean
public class LoginDao
public static int login(Login login)
int flag = -1;
String NAME = "登录数据库的用户名";
String PASSWORD = "登录数据库的个人密码";
String URL = "jdbc:sqlserver://localhost:1433;databaseName=自己的数据库名字";
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
// 1、加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2、建立连接
connection = DriverManager.getConnection(URL, NAME, PASSWORD);
// 3、操作数据库
String sql = "select count(*) from admins where name=? and password=?";
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, login.getName());
pstmt.setString(2, login.getPassword());
// 4、执行
rs = pstmt.executeQuery();
if (rs.next())
flag = rs.getInt(1);
if (flag > 0) // 登录成功
return 1;
else
return 0;
catch (ClassNotFoundException e)
e.printStackTrace();
return -1;
catch (SQLException e)
e.printStackTrace();
return -1;
catch (Exception e)
e.printStackTrace();
return -1;
finally
try
if(rs!=null) rs.close();
if(pstmt!=null) pstmt.close();
if(connection!=null) connection.close();
catch(SQLException e)
e.printStackTrace();
catch(Exception e)
e.printStackTrace();
<hr>
3.2 注册
package com.zyz.funciton;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zyz.login.Login;
//封装注册功能业务逻辑的JavaBean
public class RegisterDao
public static int register(Login login)
int count =-1;
String NAME = "登录数据库的用户名";
String PASSWORD = "登录数据库的个人密码";
//String URL = "jdbc:sqlserver://localhost:1433;databaseName=test";
String URL="jdbc:sqlserver://localhost:1433;databaseName=test";
Connection connection=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try
//1、加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2、连接
connection=DriverManager.getConnection(URL,NAME,PASSWORD);
//操作数据库
String sql="insert into admins values(?,?)";//插入数据
pstmt=connection.prepareStatement(sql);
pstmt.setString(1, login.getName());
pstmt.setString(2, login.getPassword());
count=pstmt.executeUpdate();
return count;
catch(ClassNotFoundException e)
e.printStackTrace();
return -1;
catch(SQLException e)
e.printStackTrace();
return -1;
catch(Exception e)
e.printStackTrace();
return -1;
finally
try
if(pstmt!=null) pstmt.close();
if(connection!=null) connection.close();
catch(Exception e)
e.printStackTrace();
<hr>
==友情提示==:在建立操作数据库sql对象时.尽量使用PreparedStatement
创建对象。相比Statement容易操作
String sql="insert into admins values(?,?)";//插入数据
pstmt=connection.prepareStatement(sql);
pstmt.setString(1, login.getName());
pstmt.setString(2, login.getPassword());
<hr>
4、测试效果
验证
<hr>
5、数据库中的数据
<hr>
基本流程: view 将信息提交给servelt层处理,servlet调用model层。servlet层再将处理后的内容发送到view层。
还有更加高级的三层模式。和mvc很像。但是更加方便。其中数据库的连接有大量的重复代码,可以单独编写一个辅助类。进行数据库的连接和关闭。
<hr>
6、可能操作不成功的原因
1、首先这部分代码是完整的、是没有坑的。这些图也都是程序运行后的截图。 2、这部分代码的运行环境:eclipse+tomcat8+sqlserver 3、使用eclipse需要确定是否导入驱动(jar)、以及导入驱动是否正确(如果驱动没有成功、肯定是无法进行数据库操作的、也就不能实现登录和注册)。一定要确保驱动成功!!!!!!!!!!!! 4、如果使用IDEA、只需要在pom文件中引入对应的驱动版本(这个需要使用Maven) 5、确保环境没有问题后、还是写不进入。就请Debug找一下原因、大致思路:首先判断数据是否传入到controller层、然后在controller层调用Model层的方法是否正确
以上是关于使用MVC实现登录注册功能(数据保存到数据库)详细讲解以及代码的主要内容,如果未能解决你的问题,请参考以下文章
JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)