使用MVC实现简单的用户登录

1、数据表结构与内容

在这里插入图片描述
在这里插入图片描述

2、代码实现

注意:
(1)表单的提交地址为“lgServlet”。这在我们之后的Servlet的配置中需要用到。
(2)提交的方式是“post”方式。这决定了调用Servlet的哪个方法。
(3)2个文本框控件的name属性为“username”、“password”。这
(4)我们还需要2个简单的成功"result_succ.jsp"、登陆失败"result_err.jsp"画面

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login</title>
</head>
<body>
<form action="lgServlet" method="post">
    用户名:<input type="text" name="username"/>&emsp;码:<input type="password" name="password"/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

result_err.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>error</title>
</head>
<body>
<p>${info}</p>
<%
    PrintWriter pat = response.getWriter();
    pat.println("<html>");
    pat.println("<head>");
    pat.println("<body>");
    pat.println("<a href='./login.jsp'>返回</a>");
    pat.println("</body>");
    pat.println("</head>");
    pat.println("</html>");
%>
</body>
</html>

result_succ.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>result</title>
</head>
<body>
<p>${info}</p>
</body>
</html>

DbPreparedUtil.java

package com.example.MVC_test;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DbPreparedUtil {
    private Connection connection;
    private PreparedStatement statement;

    /**
     * 初始化和获取connection
     * @return
     * @throws Exception
     */
    public Connection getConnection() throws Exception{
        if (this.connection==null){//赋值
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("成功执行第一步");
            //第二步,获取连接
            this.connection=
                    DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC",
                            "root",
                            "123456");
            System.out.println("成功执行第二步");
        }
        return this.connection;
    }

    /**
     * 初始化和获取statement
     * @return
     * @throws Exception
     */
    public PreparedStatement getStatement(String sql)
            throws Exception{

        this.closeStatement();
        if(this.statement==null){
            this.statement=
                    this.getConnection().prepareStatement(sql);
        }
        return this.statement;
    }

    /**
     * 执行查询的方法
     * @param sql
     * @return
     * @throws Exception
     */
    public List executeQuery(String sql, Object...parameters) throws Exception{
        PreparedStatement statement=this.getStatement(sql);
        int index=1;
        for(Object param:parameters){
            statement.setObject(index,param);
            index++;
        }
        ResultSet rs=statement.executeQuery();

        List res=this.getResult(rs);
        rs.close();
        this.closeStatement();
        System.out.println("成功执行第三步");
        return res;
    }

    /**
     * 执行更新,插入,删除的方法
     * @param sql
     * @return
     * @throws Exception
     */
    public int executeUpdate(String sql,Object...parameters) throws Exception{

        PreparedStatement statement=this.getStatement(sql);
        int index=1;
        for(Object param:parameters){
            statement.setObject(index,param);
            index++;
        }
        System.out.println("成功执行第四步");
        return statement.executeUpdate();
    }

    /**
     * 关闭statement
     */
    public void closeStatement() throws Exception{
        if(this.statement!=null){
            this.statement.close();
            this.statement=null;
        }
    }

    /**
     * 关闭连接
     */
    public void close() throws Exception{
        try {
            this.closeStatement();
        }catch (Exception e){
            e.printStackTrace();
        }

        if(this.connection!=null){
            this.connection.close();
        }
        System.out.println("成功执行第五步");
    }

    /**
     * 讲resultset转化为list
     * @param rs
     * @return
     */
    public List getResult(ResultSet rs)throws Exception{
        ResultSetMetaData metaData=rs.getMetaData();
        List trs=new ArrayList();
        while (rs.next()){
            Map temp=new HashMap();
            for(int i=1;i<=metaData.getColumnCount();i++){
                String key=metaData.getColumnName(i);
                Object val=rs.getObject(i);
                temp.put(key,val);
            }
            trs.add(temp);
        }
        return trs;
    }
}

Model.java

package com.example.MVC_test;

import java.util.List;

public class Model {
    public List selectUserWithUtil(String username) throws Exception{
        DbPreparedUtil dbPreparedUtil = new DbPreparedUtil();
        String sql = "select * from username_pwd where username=?";

        try {
            List res = dbPreparedUtil.executeQuery(sql,username);
            return res;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                dbPreparedUtil.close();
            }catch (Exception e){
                e.printStackTrace();
            }

        }
        return null;
    }
}

LoginServlet.java

package com.example.MVC_test;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class LoginServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        super.init();
    }


    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException{
        // 设置中文字符集
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        // 获取表单提交的元素
        String username = req.getParameter("username");
        String password = req.getParameter("password");


        // 调用Model
        Model model = new Model();
        List users = null;
        try {
            users = model.selectUserWithUtil(username);
            if(users==null||users.isEmpty()){
                req.setAttribute("info","用户不存在");
                req.getRequestDispatcher("result_err.jsp").forward(req,resp);
            }else if(users.size()>1){
                req.setAttribute("info","用户存在多条");
                req.getRequestDispatcher("result_err.jsp").forward(req,resp);
            }else{
                Map user = (Map)users.get(0);
                String dbUserName = (String)user.get("username");

                System.out.println("该用户输入的用户名和密码:"+user);
                System.out.println("数据库中获取到的该用户的用户名:"+dbUserName);
                String dbUserPwd = (String)user.get("pwd");
                System.out.println("数据库中获取到的该用户的用户密码:"+dbUserPwd);
                // 当用户名和密码都相等是登成功
                if(dbUserName.equals(username)&&dbUserPwd.equals(password)){
                    req.setAttribute("info","登录成功");
                    req.getRequestDispatcher("result_succ.jsp").forward(req,resp);
                }else{
                    req.setAttribute("info","密码出错了");
                    req.getRequestDispatcher("result_err.jsp").forward(req,resp);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

需要注意的是在LoginServlet类中通过String dbUserPwd = (String)user.get(“pwd”);获取数据表中该用户的密码时,数据表中pwd的类型必须是varchar型,不能是整型(int),否则即使输入正确的用户名名和密码也会应该类型错误导致登录不成功。
web.xml中的配置

<servlet>
        <servlet-name>mvc_res</servlet-name>
        <servlet-class>com.example.MVC_test.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc_res</servlet-name>
        <url-pattern>/lgServlet</url-pattern>
    </servlet-mapping>

3、效果图

在这里插入图片描述

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MVC是一种常用的软件架构模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。在这种模式下,模型表示应用程序的核心业务逻辑、数据和状态。视图是用户界面,负责展示数据。控制器处理用户输入、调用模型和更新视图。 下面是一个使用MVC模式实现用户登录的示例: 1. 模型层:定义用户对象和相关业务逻辑,如验证用户信息是否正确。 ```java public class User { private String username; private String password; public User(String username, String password) { this.username = username; this.password = password; } public boolean isValid() { // 验证用户信息是否正确 return "admin".equals(username) && "123456".equals(password); } } ``` 2. 视图层:展示登录界面,接收用户输入的用户名和密码。 ```html <form action="/login" method="post"> <label for="username">Username:</label> <input type="text" id="username" name="username"><br><br> <label for="password">Password:</label> <input type="password" id="password" name="password"><br><br> <input type="submit" value="Login"> </form> ``` 3. 控制器层:处理用户输入,调用模型层进行验证,更新视图层。 ```java public class LoginController { public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); User user = new User(username, password); if (user.isValid()) { // 登录成功,跳转到成功页面 response.sendRedirect("/success"); } else { // 登录失败,跳转到失败页面 response.sendRedirect("/failure"); } } } ``` 在这个示例中,用户在视图层输入用户名和密码,控制器层接收用户输入并创建User对象,调用User对象的isValid方法进行验证。如果验证通过,则跳转到成功页面,否则跳转到失败页面。 需要注意的是,控制器层需要接收并处理来自视图层的HTTP请求,因此需要实现javax.servlet.http.HttpServlet类,并将其映射到相应的URL上。在本示例中,可以在web.xml文件中添加如下配置: ```xml <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.example.LoginController</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> ``` 以上就是一个使用MVC模式实现用户登录的示例,其中模型层负责处理业务逻辑,视图层负责展示界面,控制器层负责处理请求和更新视图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值