使用MVC的实现登录注册功能
文章目录
M:代表模型层,解决问题的功能具体实现。比如向数据库添加数据、查询数据
V:代表视图,用户和机器的交互页面。用来展示信息(一般用html,js,css…)
C:控制层,用来连接用户提交的操作和调用后台功能(servlet实现)
1、视图层(View)页面的编写:
简单的html页面,这里只显示登录界面,其他的界面很容易写,简单的页面跳转。
提示。登录页面: action=“servletControll”。将登录的内容提交都处理登录的的servlet.注册页面的数据提交到处理注册页面的servelet。
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 href="register.jsp">注册新用户</a>
</form>
</body>
</html>
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>
2、控制层(Controller)的编写
servletControll:编写的servlet层,表示将提交的页面内容信息传给servletControll处理。
提交的方式:
- post:表示提交的内容不显示在浏览器文本框里
- get:提交的内容显示在URL地址栏中 比较不安全(敏感信息全部暴露出来)。
servlet层:
将前端和后端进行连接的桥梁。
servlet层主要是获得视图层提交的表单信息。调用model层提供的功能根据传入的参数进行操作。然后将操作的信息返回给前端显示。
友情提示:
放置提交的信息发生乱码:request.setCharacterEncoding(“utf-8”);还有相应的信息也需要设置响应编码。目前这里不需要用到response设置相应的信息。
通过request.getParameter(“uname”)取得值。根据uname取得姓名的值。
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);
}
}
友情提示:
在注册之前可以先调用查询有无此人,如果有此人可以编写提示信息。自己实现,很容易在注册函数调用之前先调用查询函数
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);
}
}
友情提示:
在servlet层获得的信息实际上就是一个用户的信息。可以设置一个封装了用户信息的实体类(数据库中的一张表)
Login log=new Login(name,pwd);
构造方法里的参数根据需要可以增加多个,根据需要自己定义。
然后调用Model层封装好的JavaBean功能函数
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;
}
}
3、Model层(Model)的编写
model层(处理业务逻辑的JavaBean,封装实体类信息的JavaBean)
实际上就是操作数据库的一些增删改查。这里只需要编写添加新用户的信息,和查询登录。
数据库的连接过程:
主要五个步骤
1、加载驱动。不同的数据库有不同的驱动,去官网上下载很容易的,然后导入java(我连接的数据库是sqlserver)
2、建立连接。
3、建立sql语句操作数据库。
4、处理结果集。(增删改使用的是executeupdate 查询使用的是executequery)。
5、关闭连接。
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();
}
}
}
}
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();
}
}
}
}
友情提示:在建立操作数据库sql对象时.尽量使用PreparedStatement创建对象。相比Statement容易操作
String sql="insert into admins values(?,?)";//插入数据
pstmt=connection.prepareStatement(sql);
pstmt.setString(1, login.getName());
pstmt.setString(2, login.getPassword());
4、测试效果
验证



5、数据库中的数据

基本流程:
view 将信息提交给servelt层处理,servlet调用model层。servlet层再将处理后的内容发送到view层。
还有更加高级的三层模式。和mvc很像。但是更加方便。其中数据库的连接有大量的重复代码,可以单独编写一个辅助类。进行数据库的连接和关闭。
6、可能操作不成功的原因
1、首先这部分代码是完整的、是没有坑的。这些图也都是程序运行后的截图。
2、这部分代码的运行环境:eclipse+tomcat8+sqlserver
3、使用eclipse需要确定是否导入驱动(jar)、以及导入驱动是否正确(如果驱动没有成功、肯定是无法进行数据库操作的、也就不能实现登录和注册)。一定要确保驱动成功!!!!!!!!!!!!
4、如果使用IDEA、只需要在pom文件中引入对应的驱动版本(这个需要使用Maven)
5、确保环境没有问题后、还是写不进入。就请Debug找一下原因、大致思路:首先判断数据是否传入到controller层、然后在controller层调用Model层的方法是否正确

使用MVC的实现登录注册功能的更多相关文章
- Java Spring+Mysql+Mybatis 实现用户登录注册功能
前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...
- Node.js实现登录注册功能
使用Node.js + Navicat for mysql实现的登录注册功能 数据库中存在有”user_id,user_name,password,user_img,user_number“字段,其中 ...
- SSM 实现登录注册功能
1.上一篇SSM框架搭建好了之后就要开始写功能了,现在来写一个简单的登录注册功能 这几个包是自己手动创建的,然后往里面写代码 2.代码详情 package com.maike.controller; ...
- flask 开发用户登录注册功能
flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...
- vue koa2 mongodb 从零开始做个人博客(一) 登录注册功能前端部分
0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.准备工作 1.1前端框架 前端使用了基于vue.js的nuxt.js.为什么使用nuxt.js? 首先我做的是博客的项目 ...
- JAVAEE_Servlet_20_登录注册功能
实现登录注册功能 注册功能 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import j ...
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)
1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...
- App登录注册功能,怎样做到用户体验最佳?
用户登录系统,可以细分为三项功能模块,分别是:登录.注册和密码找回.本文作者将结合自身经历,谈谈他在做这块的时候一些想法,主要是涉及业务流程. 登录和注册功能,不论是PC端还是移动端,大多数产品都会涉 ...
随机推荐
- Latex查表
- 让Python更优雅更易读(第一集)
变量和注释 1.变量 在编写变量尽量要让其清晰只给,让人清除搞清楚代码的意图 下方两段代码作用完全一样,但第二段代码是不是更容易让人理解 value = s.strip() username = in ...
- LuoguP3128 [USACO15DEC]最大流Max Flow (树上差分)
跟LOJ10131暗的连锁 相似,只是对于\(lca\)节点把它和父亲减一 #include <cstdio> #include <iostream> #include < ...
- Excel 统计函数(三):AVERAGE 和 AVERAGEA
AVERAGE 只能计算纯数值,如果引用的单元格是非数值,不会被计入总数:AVERAGEA 可以计算逻辑值.代表数字的文本等. 假如下列有一个表格,分别使用两种算术评价函数计算平均值. [过程]AVE ...
- 在 Linux 安装 Java 的流程
前言 安装流程一共为 4 个步骤,分为下载.解压.配置.检查. 下载 Oracle 官网下载 JDK. 解压 上传至 Linux 中(可使用宝塔面板上传),解压安装包: ubuntu@VM-0-6-u ...
- ettercap之dns欺骗攻击
前言:攻击机(kali)和受害机(win7)需在同一网段下 1.首先创建一个钓鱼克隆网站,这里我就利用CS来弄了 2.对Ettercap的dns文件进行编辑 3.开启ettercap 4.去受害机看看 ...
- 解决QIcon引用qrc不显示图片
引用Qrc 对于Qt来说,添加qrc之后,可以使用":"来直接访问qrc的文件,比如 QIcon icon(":/icon/red.png"); 绝对路径 当然 ...
- 微服务网关Gateway实践总结
有多少请求,被网关截胡: 一.Gateway简介 微服务架构中,网关服务通常提供动态路由,以及流量控制与请求识别等核心能力,在之前的篇幅中有说过Zuul组件的使用流程,但是当下Gateway组件是更常 ...
- 项目实践2:项目中的CSS网页布局(常用)
好家伙, 整个网页做下来,最主要的,自然是css的网页布局(菜鸟好用啊) 我需要一个大概这样的布局: 然后上代码: <!DOCTYPE html> <html> <hea ...
- 安装Windows_server_2012_r2虚拟机步骤
创建虚拟机 使用Windows_server_2012_r2镜像 网上搜索Windows产品密钥:TVNTG-VFJQ3-FQXFP-DVCP6-D3VJ8 点击完成,等待加载 选择第二个 等待安装 ...