模式分析:

对于Jsp来说:

Model层:实现系统的业务逻辑,即javaBean部分

View层:负责与用户交互,即在界面上展示数据对象给用户,即html,jsp

Control层:Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作,当然就是Servlet的职责了。


Model层代码:

User.Java

package JavaBean;

public class User {
    private String UserName;//User表用户名
    private String Password;//User表用户密码

    public void setPassword(String password) {
        Password = password;
    }

    public void setUserName(String userName) {

        UserName = userName;
    }

    public String getUserName() {

        return UserName;
    }

    public String getPassword() {

        return Password;
    }
}

UserSQL.Java

package JavaBean;

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

public class UserSQL {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    //数据库驱动(需将下载好后的jar包放入../web/WEB-INF/lib文件中)
    public static final String DBURL = "jdbc:mysql://127.0.0.1/DataBaseName?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
    public static final String DBUser = "username";
    public static final String DBPassword = "password";
    private Connection conn = null;
    //用于数据库连接
    private PreparedStatement pStat = null;
    //用于执行SQL语句
    private ResultSet resultSet = null;
    //用于获取SQL语句的执行结果

    public UserSQL(){//对数据库所需操作初始化
        try {
            Class.forName(DRIVER);
            //加载JDBC驱动程序
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Connection getConn(){
        try{
            return DriverManager.getConnection(DBURL, DBUser, DBPassword);
            //连接数据库,并将该连接返回
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    public void close(){
        try {
            if(resultSet != null)
                resultSet.close();
            if(pStat != null)
                pStat.close();
            if(conn != null)
                conn.close();
            //关闭数据库的连接
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public boolean isUserNameExists(String username){
        conn = getConn();
        //获取数据库的连接
        if(conn != null){
            try {
                pStat = conn.prepareStatement("select * from User where User=?");
                pStat.setString(1, username);
                //执行SQL语句
                resultSet = pStat.executeQuery();
                //获取SQL语句执行结果
                if(resultSet.next())
                    return true;
                    //如果结果集中有元素,则说明该UserName存在
                return false;
            }catch (Exception e) {
                e.printStackTrace();
                return false;
            }finally {
                close();
            }
        }
        return false;
    }

    public boolean findUser(String username, String password){
        conn = getConn();
        //获取数据库的连接
        if(conn != null){
            try {
                pStat = conn.prepareStatement("select * from User where User=? and Password=?");
                pStat.setString(1, username);
                pStat.setString(2, password);
                //执行SQL语句
                resultSet = pStat.executeQuery();
                //获取SQL语句执行结果
                if(resultSet.next())
                    return true;
                    //如果结果集中有元素,则说明该UserName存在
                return false;
            }catch (Exception e) {
                e.printStackTrace();
                return false;
            }finally {
                close();
            }
        }
        return false;
    }

    public boolean addUser(User user){
        conn = getConn();
        //获取数据库的连接
        if(conn != null){
            try {
                pStat = conn.prepareStatement("insert into User values(?, ?)");
                pStat.setString(1, user.getUserName());
                pStat.setString(2, user.getPassword());
                //执行SQL语句
                int cnt = pStat.executeUpdate();
                //将更新结果commit
                if(cnt > 0)
                    return true;
                    //成功commit,返回true
                return false;
            }catch (Exception e) {
                e.printStackTrace();
                return false;
            }finally {
                close();
            }
        }
        return false;
    }
}

Controler层代码:

Login.java

package Servlet;

import JavaBean.UserSQL;

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;

@WebServlet("/login")//此行代码后,可不用在web.xml中手动部署
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        //获取表单中name=username的值
        String password = req.getParameter("password");
        //获取表单中name=password的值
        UserSQL userSQL = new UserSQL();
        //创建userSQL对象
        boolean flag = userSQL.findUser(username, password);
        //判断对应的用户名和密码是否正确
        if(flag){
            req.getSession().setAttribute("username", username);
            resp.sendRedirect("JSP/Welcome.jsp");
            //若正确,则设置相应session,并跳转到欢迎界面
        }else{
            req.getSession().setAttribute("err", "用户名或密码错误");
            resp.sendRedirect("JSP/Login.jsp");
            //若不正确,则设置相应错误信息,并返回登录界面
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
Register.java
package Servlet;

import JavaBean.User;
import JavaBean.UserSQL;
import com.sun.deploy.net.HttpResponse;

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;

@WebServlet("/register")//此行代码后,可不用在web.xml中手动部署
public class Register extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        //获取表单中name=username的值
        String password = req.getParameter("password");
        //获取表单中name=password的值
        User user = new User();
        //创建User对象
        user.setPassword(password);
        user.setUserName(username);
        //设置User对象属性
        UserSQL userSQL = new UserSQL();
        //创建userSQL对象
        if(userSQL.isUserNameExists(username)){//判断数据库中用户名是否存在
            req.getSession().setAttribute("err", "用户名已存在");
            resp.sendRedirect("JSP/Register.jsp");
            //若该用户已存在,设置相应错误信息,并返回Register页面
        }
        else {
            boolean flag = userSQL.addUser(user);
            //数据库中该用户不存在;在数据库中添加该用户,判断是否成功添加
            if (flag) {
                req.getSession().setAttribute("username", username);
                resp.sendRedirect("JSP/Welcome.jsp");
                //若成功添加,设置相应session,并跳转到欢迎页面
            } else {
                req.getSession().setAttribute("err", "注册失败,请重试");
                resp.sendRedirect("JSP/Register.jsp");
                //若添加失败,设置相应错误信息,并返回注册界面
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

View层代码

Register.jsp

<%--
  Created by IntelliJ IDEA.
  User: vina
  Date: 18-4-7
  Time: 下午3:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>register</title>
</head>
<body>
    <%
        String errMsg = (String)session.getAttribute("err");
        if(errMsg != null){
            out.println("<div style=\"color:red;\">" + errMsg + "</div>");
            session.removeAttribute("err");
        }
    %>
    <form action="/register">
        用户名:<input type="text" name="username">
        密码:<input type="password" name="password">
        <br>
        <input type="submit" value="注册">
        <input type="reset" value="重填">
    </form>
</body>
</html>
Login.jsp
<%--
  Created by IntelliJ IDEA.
  User: vina
  Date: 18-4-7
  Time: 下午3:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <%
        String errMsg = (String)session.getAttribute("err");
        if(errMsg != null){
            out.println("<div style=\"color:red;\">" + errMsg + "</div>");
            session.removeAttribute("err");
        }
    %>
    <form action="/login">
        用户名:<input type="text" name="username">
        密码:<input type="password" name="password">
        <br>
        <input type="submit" value="登录">
        <input type="reset" value="重填">
    </form>
    <a href="Register.jsp">注册</a>
</body>
</html>
Welcome.jsp
<%--
  Created by IntelliJ IDEA.
  User: vina
  Date: 18-4-7
  Time: 下午3:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>welcome</title>
</head>
<body>
    <%
        String username = (String)session.getAttribute("username");
        if(username != null && !username.isEmpty())
            out.print("你已登录,欢迎");
        else {
            out.print("你还没有登录,3秒后自动跳往登录页面");
            response.setHeader("refresh", "3;url=Login.jsp");
        }
    %>
</body>
</html>

以上就是本简易登录模型的全部代码.

记录在此,加深自己这几天对JSP,Servlet,JavaBean和JDBC学习的理解.希望也能帮助到你.共勉!