1. 程式人生 > >基於Servlet的MVC模式用戶登錄實例

基於Servlet的MVC模式用戶登錄實例

dsta trac att 簡單 判斷 ping 分享 return jquery

關於MVC模式的簡單解釋

M Model,模型層,例如登錄實例中,用於處理登錄操作的類;
V View,視圖層,用於展示以及與用戶交互。使用html、js、css、jsp、jQuery等前端技術實現;
C Controller,控制器,接受視圖層的請求,將請求跳轉到對應的模型進行處理,模型層處理完畢後,再將結果返回給請求處。這裏用Servlet實現控制器。

實現過程分析

用戶再視圖層輸入用戶名以及密碼點擊提交,向控制器發出請求
控制器(Servlet)接受請求,將接受到的用戶名以及密碼轉給模型層
模型層依據用戶名和密碼在數據庫中進行查詢,將操作結果返回給控制器
控制器經過判斷返回給用戶登錄結果。

代碼實現

項目結構圖

技術分享圖片

視圖層實現(index.jsp)


    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>Login</title>
        </head>
        <body>
            <form action="LoginServlet" method="post">
                Name:<input type="text" name="uname"><br>
                Pass:<input type="password" name="upwd"><br>
                <input type="submit" value="Login"><br>
            </form>
        </body>
    </html>

控制器層實現(LoginServlet)


    package com.ajy.Servlet;
    
    import com.ajy.Model.LoginDao;
    import com.ajy.Entity.User;
    
    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.io.PrintWriter;
    
    //控制器層
    public class LoginServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //處理post方式登錄請求
            request.setCharacterEncoding("utf-8");
            String uname = request.getParameter("uname");
            String upwd = request.getParameter("upwd");
            User user = new User(uname,upwd);
    
            response.setContentType("text/html;charset=utf-8");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            int rs = LoginDao.Login(user);
            if(rs==-1){
                out.println("系統錯誤");
            }else if(rs==0){
                out.println("用戶名或密碼錯誤");
            }else{
                out.println("登錄成功");
            }
        }
    }

模型層實現(LoginDao)


    package com.ajy.Model;
    
    import com.ajy.Entity.User;
    
    import java.sql.*;
    
    //模型層,用於處理登錄操作
    public class LoginDao {
        private static String DBUname = "root";
        private static String DBUpwd = "121181";
        private static String URL="jdbc:mysql://localhost:3306/anjiyubase?&serverTimezone=UTC&useSSL=false";
    
        public static int Login(User user){
    
            Connection con = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            int count = 0;
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                con = DriverManager.getConnection(URL,DBUname,DBUpwd);
                pstmt = con.prepareStatement("select count(*) from users where uanme = ? and upwd = ?");
                pstmt.setString(1,user.getUserName());
                pstmt.setString(2,user.getUserPassword());
                rs = pstmt.executeQuery();
                if(rs.next()){
                    count = rs.getInt(1);
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                return -1;
            } catch (SQLException e) {
                e.printStackTrace();
                return -1;
            }finally {
                try {
                    if (rs!=null)rs.close();
                    if (pstmt!=null)pstmt.close();
                    if (con!=null)con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    return -1;
                }
            }
    
            if (count==0){
                return 0;
            }else{
                return 1;
            }
        }
    }

用戶實例(User)


    package com.ajy.Entity;
    
    public class User {
        private int id;
        private String UserName;
        private String UserPassword;
    
        public User(String UserName, String UserPassword){
            this.UserName=UserName;
            this.UserPassword=UserPassword;
        }
    
        public User(int id, String UserName, String UserPassword){
            this.id=id;
            this.UserName=UserName;
            this.UserPassword=UserPassword;
        }
        public String getUserName() {
            return UserName;
        }
    
        public void setUserName(String userName) {
            UserName = userName;
        }
    
        public String getUserPassword() {
            return UserPassword;
        }
    
        public void setUserPassword(String userPassword) {
            UserPassword = userPassword;
        }
    }

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_4_0.xsd"
             version="4.0">
        <welcome-file-list>
            <welcome-file>login.jsp</welcome-file>
        </welcome-file-list>
        
        <servlet>
            <servlet-name>LoginServlet</servlet-name>
            <servlet-class>com.ajy.Servlet.LoginServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>LoginServlet</servlet-name>
            <url-pattern>/LoginServlet</url-pattern>
        </servlet-mapping>
    </web-app>

數據庫

技術分享圖片

基於Servlet的MVC模式用戶登錄實例