java初探(1)之登錄初解


初識登錄

登錄的應用場景

登錄比較常見,大多數網站都有登錄的操作。然后登錄本身也從簡單到復雜有着漫長的發展歷史。本文記錄博主對登錄的應用場景的剖析,深究不在於學習如何實現,主要關注其編碼思想,過程中用到的技術,以及改進的可能。

搭建環境

本文使用SSM框架構建登錄的場景,網頁不采用jsp技術,而是用thymeleaf來構建模板。

  • 簡單的網頁login.html

    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>登錄</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    
        <!-- jquery -->
        <script type="text/javascript" th:src="@{/js/jquery.min.js}"></script>
        <!-- jquery-validator -->
        <script type="text/javascript" th:src="@{/jquery-validation/jquery.validate.min.js}"></script>
        <script type="text/javascript" th:src="@{/jquery-validation/localization/messages_zh.min.js}"></script>
    
    
    </head>
    <body>
    
    <form name="loginForm" id="loginForm" method="post"  style="width:30%; margin:0 auto;">
    
        <h2 style="text-align:center; margin-bottom: 20px">用戶登錄</h2>
    
        <div>
            <div>
                <label>請輸入手機號碼</label>
                <div >
                    <input id="mobile" name = "mobile"  type="text" placeholder="手機號碼"/>
                </div>
            </div>
        </div>
    
        <div>
            <div>
                <label>請輸入密碼</label>
                <div>
                    <input id="password" name="password" type="password"  placeholder="密碼"/>
                </div>
            </div>
        </div>
    
        <div style="margin-top:40px;">
            <div >
                <button type="submit" onclick="login()">登錄</button>
            </div>
        </div>
    
    </form>
    </body>
    <script>
        //此處增加驗證代碼
        // function login(){
        //     $("#loginForm").validate({
        //
        //         submitHandler:function(form){
        //             doLogin();
        //         }
        //     });
        // }
        function login(){
    
            $.ajax({
                url: "/login/do_login",
                type: "POST",
                data:{
                    mobile:$("#mobile").val(),
                    password: $("#password").val()
                },
                success:function(data){
                    alert(data)
                    //邏輯判斷代碼,暫時不寫
                }
            });
        }
    </script>
    </html>

    網頁做了個及其簡陋的頁面,但對於登錄的邏輯判斷已然足夠。在springboot環境下,該html頁面一定要放在resource目錄下的templates子目錄下,才會被視圖解析器拿到。

  • 搭建依賴包環境-pom文件

   

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.mybatis.spring.boot</groupId>-->
            <!--<artifactId>mybatis-spring-boot-starter</artifactId>-->
            <!--<version>1.3.1</version>-->
        <!--</dependency>-->

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--<dependency>-->
            <!--<groupId>com.alibaba</groupId>-->
            <!--<artifactId>druid</artifactId>-->
            <!--<version>1.0.5</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>redis.clients</groupId>-->
            <!--<artifactId>jedis</artifactId>-->
        <!--</dependency>-->

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.38</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.6</version>
        </dependency>
        <!-- 參數校驗工具 -->
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-validation</artifactId>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-amqp</artifactId>-->
        <!--</dependency>-->
    </dependencies>

這里主要導入spring相關的包,spring-boot-starter-web以及spring-boot-starter-thymeleaf,因為springboot可以一鍵搭建環境,此處暫時不做配置,如需配置,只需要在resource下創建application.yml文件即可。

  • 創建實體類domain

  對於登錄功能而言,需要的一定是一個用戶的實體類,因為我們網頁只有手機號和密碼兩個屬性,因此用戶實體類也只有這兩個屬性

public class Person {

//    @NotNull
    private String mobile;

    private String password;

    @Override
    public String toString() {
        return "Person{" +
                "mobile='" + mobile + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

實體類的屬性上可以添加驗證標簽,但現在先跳過。

  • 創建springboot的啟動類

  

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class);
    }
}

該類要放在所有類的父包之上,保證能掃描到所有的類。

  • 創建LoginController類

  

@Controller
@RequestMapping("/login")
public class LoginController {


@RequestMapping("/to_login")
public String tologin(){
return "login";
}

@RequestMapping("/do_login")
@ResponseBody
public String dologin(HttpServletResponse response, Person person){

System.out.println(person);
return person.toString();
}
}
  • 測試

  做到這里,已經完成了SSM環境的搭建,啟動MyApplication類的main方法,springboot會自動的加載各種資源,並開啟tomcat。

  打開瀏覽器,輸入網址:http://localhost:8080/login/to_login  即可跳轉到login.html頁面上

 

 輸入手機號碼和密碼點擊登錄,實現登錄請求。

 

以上就是環境搭建的全過程


搭建完環境以后,會發現此刻點登陸按鈕,會在頁面彈出用戶的信息。基本的功能已經實現,假設現在已經做好了數據庫查詢的功能,則需要對controller類做進一步的改進,來實現真正的登陸操作

此時,需要對controller類中的response返回對象做一些要求,最好是帶有一定的規則約束,比如{code:xx,msg:xx,date:xx}這種類型。

  • 創建Result<>類,泛型類

  

public class Result<T> {

    private Integer code;
    private String Msg;
    private T date;

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", Msg='" + Msg + '\'' +
                ", date=" + date +
                '}';
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return Msg;
    }

    public void setMsg(String msg) {
        Msg = msg;
    }

    public T getDate() {
        return date;
    }

    public void setDate(T date) {
        this.date = date;
    }
}

上述結果類的定義比較簡單,可以在后面逐漸完善

 

  • 建立Service類,來提供登陸驗證的方法

  因為之前沒有建立與數據庫的連接,因此,這里先模擬數據庫的連接。

@Service
public class UserService {

    //1.登錄

    public Result<Boolean> login(Person person){

        Result<Boolean> re=new Result<Boolean>();

        Person persondb=personByMobile(person.getMobile());

        if(persondb==null){
            re.setCode(0);
            re.setMsg("查無此人");
            re.setDate(false);
        }else if(!persondb.getPassword().equals(person.getPassword())){
            re.setCode(01);
            re.setMsg("密碼錯誤");
            re.setDate(false);
        }else{
            re.setCode(1);
            re.setMsg("登錄成功");
            re.setDate(true);
        }

        return re;
    }

    //2.根據用戶手機查詢用戶
    public Person personByMobile(String mobile){

        Person person=new Person();
        person.setMobile("123");
        person.setPassword("123");

        if(mobile.equals(person.getMobile())){
            return person;
        }else
        {
            return null;
        }
    }

}

以上代碼,仍然是一個比較簡單,只用來實現功能的代碼,后期需要不斷修改。

 

  • 修改LoginController類如下:

  

@Controller
@RequestMapping("/login")
public class LoginController {

    @Autowired
    UserService userService;

    @RequestMapping("/to_login")
    public String tologin(){
        return "login";
    }

    @RequestMapping("/do_login")
    @ResponseBody
    public Result<Boolean> dologin(HttpServletResponse response, Person person){

        System.out.println(person);

        Result<Boolean> result = userService.login(person);


        return result;
    }
}

此時返回的數據data就是Result<Boolean>類型的數據格式。啟動項目,在瀏覽器中按F12對response回來的數據進行查看,但此時頁面已經刷新,無法看到,可以通過修改ajax的success處代碼,將code,msg。data都打印出來觀看。

 

 以上,登錄的驗證功能用提升了一下。

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM