Java Web實現用戶登錄功能

来源:https://www.cnblogs.com/hjk-airl/archive/2022/04/28/15643617.html
-Advertisement-
Play Games

java web 學習記錄一下 mvc結構實現mysql 連接 什麼是mvc MVC是模型(model)、視圖(view)、控制(controller)這三個單詞上的首字母組成。它是一種應用模型,它的目的是實現Web系統的職能分工。避免all in one 所有代碼全部寫在一個文件里的一種分工模型。 ...


java web 學習記錄一下

  • mvc結構實現mysql 連接

  • 什麼是mvc

    • MVC是模型(model)、視圖(view)、控制(controller)這三個單詞上的首字母組成。它是一種應用模型,它的目的是實現Web系統的職能分工。避免all in one 所有代碼全部寫在一個文件里的一種分工模型。
  • 實現簡單登錄功能

    • 登錄成功,進入sccess.jsp界面,失敗返迴首頁,並輸出密碼錯誤

資料庫簡單編寫

  • 創建資料庫
create database student;
  • 創建表
create table tbl_user(
    userId   varchar(11)  not null
        primary key,
    passWord varchar(255) not null
);
  • 導入數據
insert into tbl_user (userId,passWord) values ('admin','1234');
insert into tbl_user (userId,passWord) values ('張三','1234');

idea上準備工作

  • 創建一個乾凈的meavn項目

image

  • 把該項目添加web項目

導入依賴

  • junit 是為了便於測試
  • 其他是一些基礎包
    • mysql 連接資料庫
    • servlet-api servlet服務
    • jsp-api
    • jstl 寫el表達式
<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2.1-b02</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

連接資料庫

  • 使用idea連接本地資料庫
    image

編寫實體類User

public class User {
    private String userId;
    private String passWord;
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}

UserDao層介面

public interface UserDao {
    public boolean getUser(String userID,String userPassWord);
}

UserDaoImpl實現類

public class UserDaoImpl implements UserDao{

    private String driver = "com.mysql.cj.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/student";
    private String root = "root";
    private String password = "123456";

    @Override
    public boolean getUser(String userID,String userPassWord) {
        boolean flag = false;
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        String sql = "select * from tbl_user where userId = ? and passWord = ?";
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url,root,password);
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,userID);
            pstm.setString(2,userPassWord);
            rs = pstm.executeQuery();
            if(rs.next()){
                flag = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                rs.close();
                pstm.close();
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return flag;
    }
}

UserService層介面

public interface UserService {

    public boolean Login(String userId,String userPassWord);
}

UserServiceImpl實現類

public class UserServiceImpl implements UserService{
    @Override
    public boolean Login(String userId, String userPassWord) {
        boolean flag = false;
        UserDao userDao = new UserDaoImpl();
        flag = userDao.getUser(userId,userPassWord);
        return flag;
    }
}

編寫LoginServlet服務層

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        boolean flag = false;
        String userId = req.getParameter("userName");
        String userPassWord = req.getParameter("userPassWord");
        UserService userService = new UserServiceImpl();
        flag = userService.Login(userId,userPassWord);
        if(flag){
            User user = new User();
            user.setUserId(userId);
            user.setPassWord(userPassWord);
            req.getSession().setAttribute("user",user);
            resp.sendRedirect("jsp/success.jsp");
        }else{
            req.setAttribute("msg","用戶錯誤");
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }

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

配置web.xml文件

  • servlet3.0之後可以使用註解,不用配置這個文件,但是是初學者,還是先學會配置web.xml文件
<servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>com.hjk.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

編寫login.jsp 界面

  • 簡單的寫了一下,一個表單的提交功能
<form action="login" method="post">
    <table>
        <tr><span style="color: aquamarine">${requestScope.msg}</span></tr>
        <tr>
            <td>用戶名:</td><td><input type="text" name="userName"/></td>
        </tr>
        <tr>
            <td>密碼</td><td><input type="password" name="userPassWord"/></td>
        </tr>
        <tr>
            <td></td>
            <td>
            <input type="submit" value="submit"/>
            <input type="reset" value="reset">
            </td>
        </tr>
    </table>
</form>
  • 寫一個登錄成功界面sccess.jsp
    -這個文件在web問價夾下麵,本來想寫一個攔截器,沒有登錄不能直接訪問後面的界面,現在還沒有寫
<h1><span style="text-align: center"><span style="color: deeppink" >歡迎您,${sessionScope.user.userId}登錄成功</span></span></h1>
  • 如果登錄失敗就返回登錄界面

idea預設會先訪問index.jsp界面,這裡在web.xml配置一下,讓他直接訪問login.jsp

    <welcome-file-list>
        <welcome-file>/login.jsp</welcome-file>
    </welcome-file-list>

已經可以登錄了,但是還是存在中文亂碼,編寫一個過濾器CharacterEncoding,讓它處理中文亂碼

  • 這個包必須導入import javax.servlet.*;
public class CharacterEncoding implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        servletRequest.setCharacterEncoding("utf-8");
        servletRequest.setCharacterEncoding("utf-8");
		//不執行filterChain就會一直卡在這裡,相當於一直攔截
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}
  • 為過濾文件配置web.xml
    <filter>
        <filter-name>characterEncoding</filter-name>
        <filter-class>com.hjk.filter.CharacterEncoding</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>characterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

結果展示

  • 初始界面
    image

  • 登錄失敗界面
    image

  • 登錄成功;不加過濾器張山是不能登錄成功的

  • admin
    image

  • 張三
    image

文件的整體結構

image

image

一些註意點

  • 導包的時候一定要到對
  • idea有可能在測試的時候沒有lib包這個時候需要自己添加lib問價夾,並且把相應的依賴都添加進去

image

  • 伺服器報404 一般是路徑錯誤(比較好解決)
  • 500 可能是一些代碼錯誤,或者jar沒到入

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. 對原型、原型鏈的理解 在JavaScript中是使用構造函數來新建一個對象的,每一個構造函數的內部都有一個 prototype 屬性,它的屬性值是一個對象,這個對象包含了可以由該構造函數的所有實例共用的屬性和方法。當使用構造函數新建 ...
  • 一、一體化運營平臺前端請求部分 1.介面封裝 一體化運營平臺採用的是封裝axios的方式來簡化請求介面的使用,在添加新介面時只要調用封裝好的方法就可以發出請求並直接得到解析後的數據 2.整個過程解析 (1)請求方法調用request方法並傳需要的參數 sync_collect_diff_data(d ...
  • 大家好,我是半夏👴,一個剛剛開始寫文的沙雕程式員.如果喜歡我的文章,可以關註➕ 點贊 👍 加我微信:frontendpicker,一起學習交流前端,成為更優秀的工程師~關註公眾號:搞前端的半夏,瞭解更多前端知識! 點我探索新世界! 原文鏈接 ==>http://sylblog.xin/archi ...
  • 微服務概覽 微服務是圍繞業務領域建模可獨立發佈的服務。服務封裝了對應功能並可以通過網路被其他服務訪問。 從外部來看,單個微服務被視為一個黑盒子。它使用最合適的協議在一個或多個網路端點(例如,隊列或REST API)上承載業務功能。消費者,無論他們是其他微服務還是其他類型的程式,都通過這些聯網的端點來 ...
  • 在Java 18中,將UTF-8指定為標準Java API的預設字元集。有了這一更改,依賴於預設字元集的API將在所有實現、操作系統、區域設置和配置中保持一致。 做這一更改的主要目標: 當Java程式的代碼依賴於預設字元集時,使其更具可預測性和可移植性。 闡明標準Java API在哪裡使用預設字元集 ...
  • python 學習筆記 變數、運算符與數據類型 變數 在使用變數前,需要現對其賦值 變數名可以包括字母、數字、下劃線,但不能以字母開頭 python 變數名大小寫是敏感的 first = 2 second = 3 third = first + second print(third) # 5 運算符 ...
  • Spring Boot 1 Spring Boot入門 1.1 Spring Boot特性: 能夠快速創建基於 Spring 的應用程式 能夠直接使用 java main 方法啟動內嵌的 Tomcat 伺服器運行 Spring Boot 程式,不需 要部署 war 包文件 提供約定的 starter ...
  • R ggplot2 繪製 PCA 主成分分析圖,每個繪圖像素都自己掌控的感覺倍兒爽~ ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...