欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用MVC设计模式实现简单的JavaWeb登录注册功能

程序员文章站 2024-02-26 09:53:22
...

MVC

全称Model(模型)-View(视图)-Controller(控制器),这是一种开发模式,他的好处是可以将界面和业务逻辑分离。
Model(模型),是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据。
View(视图),是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在View视图层输入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理。
Controller(控制器),Controller是用来处理用户输入数据,已经更新业务模型的部分。控制器中接收了用户与界面交互时传递过来的数据,并根据数据业务逻辑来执行服务的调用和更新业务模型的数据和状态。
MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。实现人机数据之间的交互;

开发环境

工具:Intellij IDEA,Tomcat,MySQL,Navicat premium
用到的jar包:mysql-connector-java-5.1.46-bin.jar
确保开发环境搭建无误,并且已经创建好了test数据库和user表。

项目结构

用MVC设计模式实现简单的JavaWeb登录注册功能

数据库名test,表名user,表结构如下

用MVC设计模式实现简单的JavaWeb登录注册功能

User

package com.lala.bean;

/**
 * Created by 20901 on 2018/4/17.
 */
public class User {
    private Integer id;
    private String name;
    private String password;
    private int role;
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    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;
    }
    public int getRole() {
        return role;
    }
    public void setRole(int role) {
        this.role = role;
    }
}

UserDAO

package com.lala.dao;

/**
 * Created by 20901 on 2018/4/17.
 */

import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;


import com.lala.bean.User;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;




public class UserDAO {
    public static final String DBurl = "jdbc:mysql://127.0.0.1/test?characterEncoding=utf8&useSSL=true";
    public static final String DBname = "com.mysql.jdbc.Driver";
    public static final String DBuser = "root";
    public static final String DBpassword = "root";


    public  User  login(int id,String password) {

        User u = null;
        Connection connection =null;
        PreparedStatement pstmt=null;
        ResultSet resultSet=null;

        //赋值
        try {
            try {
                Class.forName(DBname);//指定连接类型
                connection = (Connection)DriverManager.getConnection(DBurl, DBuser, DBpassword);//获取连接
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

            //静态sql语句
            String sql = "select * from user where id=? and password=?";
            pstmt = (PreparedStatement) connection.prepareStatement(sql);
            pstmt.setInt(1, id);
            pstmt.setString(2, password);
            resultSet = pstmt.executeQuery();

            if(resultSet.next()){
                u=new User();
                u.setId(resultSet.getInt("id"));
                u.setName(resultSet.getString("name"));
                u.setPassword(resultSet.getString("password"));
                u.setRole(resultSet.getInt("role"));
                System.out.println("登录成功!");
            }else{
                System.out.println("用户名或者密码错误!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(pstmt !=null){
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if(connection !=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
        return u;

    }
    public boolean addUser(User u) {
        Connection connection = null;
        PreparedStatement psmt = null;
        boolean boo = false;

        try {
            try {
                Class.forName(DBname);//指定连接类型
                connection = (Connection)DriverManager.getConnection(DBurl, DBuser, DBpassword);//获取连接
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

            String sql  ="insert into user(id,name,password,role)values(?,?,?,?);";

            psmt = (PreparedStatement) connection.prepareStatement(sql);

            //运用实体对象进行参数赋值
            psmt.setInt(1, u.getId());
            psmt.setString(2, u.getName());
            psmt.setString(3,u.getPassword());
            psmt.setInt(4, u.getRole());

            int result = psmt.executeUpdate();
            if(result > 0){
                boo = true;
                System.out.println("插入数据成功");
            }else{
                System.out.println("未插入数据");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                connection.close();
                psmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return boo;
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 20901
  Date: 2018/3/5
  Time: 20:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>主页</title>
  </head>
  <body>
  <a href=LoginPageServlet?url=WEB-INF/pages/Login.jsp>登录页</a>
  <a href=RegisterPageServlet?url=WEB-INF/pages/Register.jsp>注册页</a>
  </body>
</html>

LoginPageServlet

package com.lala.dispatcherServlet;

import java.io.IOException;

/**
 * Created by 20901 on 2018/4/17.
 */
public class LoginPageServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request, response);
}

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        String url=request.getParameter("url");
        request.getRequestDispatcher(url).forward(request, response);
    }
}

RegisterPageServlet

package com.lala.dispatcherServlet;

import java.io.IOException;

/**
 * Created by 20901 on 2018/4/17.
 */
public class RegisterPageServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        String url=request.getParameter("url");
        request.getRequestDispatcher(url).forward(request, response);
    }
}

Login.jsp

<%--
  Created by IntelliJ IDEA.
  User: 20901
  Date: 2018/4/17
  Time: 16:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页</title>
</head>
<div style="text-align:center;margin-top:120px">
    <form action="LoginServlet" method="post">
        <table style="margin-left:40%">
            <marquee width="200"scrolldelay="250">用户登录</marquee>

            <tr>
                <td>登录id:</td>
                <td><input name="id" type="text" size="21"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input name="password" type="password" size="21"></td>
            </tr>
        </table>
        <input type="submit" value="登录">
        <input type="reset" value="重置">
    </form>
    <br>
    <a href=RegisterPageServlet?url=WEB-INF/pages/Register.jsp>注册页</a>
</div>
</body>
</html>

LoginServlet

package com.lala.service;

/**
 * Created by 20901 on 2018/4/17.
 */

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.lala.bean.User;
import com.lala.dao.UserDAO;

public class LoginServlet extends  HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }


    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        int id = Integer.parseInt(request.getParameter("id"));
        String password = request.getParameter("password");
        UserDAO userDAO = new UserDAO();
        User user = userDAO.login(id, password);

        if (user != null) {
            request.getRequestDispatcher("WEB-INF/pages/Lsuccess.jsp").forward(request, response);
        } else {
            request.getRequestDispatcher("WEB-INF/pages/Lerror.jsp").forward(request, response);
        }
    }
}

Lsuccess.jsp

<%--
  Created by IntelliJ IDEA.
  User: 20901
  Date: 2018/4/17
  Time: 20:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功页</title>
</head>
<body>
恭喜你,登录成功了!!
<a href="index.jsp">注册</a>
</body>
</html>

Lerror.jsp

<%--
  Created by IntelliJ IDEA.
  User: 20901
  Date: 2018/4/18
  Time: 10:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录错误页</title>
</head>
<body>
用户名或密码错误!!
<a href="Login.jsp">重新登录</a>
</body>
</html>

Register.jsp

<%--
  Created by IntelliJ IDEA.
  User: 20901
  Date: 2018/4/17
  Time: 18:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册页</title>
</head>
<body>
<div style="text-align:center;margin-top:120px">
    <h1 >请注册</h1>
    <form action="RegisterServlet" method="post">
        <table style="margin-left:40%">
            <caption>用户注册</caption>
            <tr>
                <td>ID:</td>
                <td><input name="id" type="text" size="20"></td>
            </tr>
            <tr>
                <td>登录名:</td>
                <td><input name="name" type="text" size="20"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input name="password" type="password" size="20"></td>
            </tr>
            <tr>
                <td>角色:</td>
                <td><input name="role" type="text" size="20"></td>
            </tr>
        </table>
        <input type="submit" value="注册">
        <input type="reset" value="重置">
    </form>
    <br>
    <a href=LoginPageServlet?url=WEB-INF/pages/Login.jsp>登录页</a>
</div>
</body>
</html>

RegisterServlet

package com.lala.service;

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 java.io.IOException;

import com.lala.bean.User;
import com.lala.dao.UserDAO;

/**
 * Created by 20901 on 2018/4/18.
 */
@WebServlet(name = "RegisterServlet")
public class RegisterServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        int role = Integer.parseInt(request.getParameter("role"));

        User u = new User();
        u.setId(id);
        u.setName(name);
        u.setPassword(password);
        u.setRole(role);

        UserDAO userdao = new UserDAO();
        boolean boo = userdao.addUser(u);

        if (boo == true) {
            request.getRequestDispatcher("WEB-INF/pages/Rsuccess.jsp").forward(request, response);
        } else {
            request.getRequestDispatcher("WEB-INF/pages/Rerror.jsp").forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

Rsuccess.jsp

<%--
  Created by IntelliJ IDEA.
  User: 20901
  Date: 2018/4/18
  Time: 16:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册成功页</title>
</head>
<body>
恭喜你,注册成功了!!
<a href="index.jsp">注册</a>
</body>
</html>

Rerror.jsp

<%--
  Created by IntelliJ IDEA.
  User: 20901
  Date: 2018/4/18
  Time: 16:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册失败页</title>
</head>
<body>
注册失败了
<a href="register.jsp">重新注册</a>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>LoginPageServlet</servlet-name>
        <servlet-class>com.lala.dispatcherServlet.LoginPageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginPageServlet</servlet-name>
        <url-pattern>/LoginPageServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>RegisterPageServlet</servlet-name>
        <servlet-class>com.lala.dispatcherServlet.RegisterPageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RegisterPageServlet</servlet-name>
        <url-pattern>/RegisterPageServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.lala.service.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>com.lala.service.RegisterServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>/RegisterServlet</url-pattern>
    </servlet-mapping>

</web-app>

总结

自己学习总结,也希望对大家有帮助,如有疑问,可联系我
邮箱aaa@qq.com。