1. 程式人生 > >初學JavaWeb-利用session登陸以及資料讀取

初學JavaWeb-利用session登陸以及資料讀取

今天想做這麼一個功能,當用戶A登陸時候,顯示A內容。當用戶B登陸時,顯示B內容。於是又學到了點新知識。

session物件:

      session 物件是由伺服器自動建立的與使用者請求相關的物件。伺服器為每個使用者都生成一個session物件,用於儲存該使用者的資訊,跟蹤使用者的操作狀態。session物件內部使用Map類來儲存資料,因此儲存資料的格式為 “Key/value”。 session物件的value可以使複雜的物件型別,而不僅僅侷限於字串型別。

前端程式碼:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<html>
<head>
    <title>mmp</title>
    <script src="../static/js/jquery-3.3.1.min.js"></script>
</head>
<body>

//利用session進行登陸和登出
<form id="Login_form">
    <input placeholder="請輸入使用者名稱" name="user" id="user" type="text">
    <input placeholder="請輸入密碼" name="password" id="password" type="password" maxlength="8">
    <a id="Login_form_btn" href="javascript:void(0);">login</a>
    <a id="Login_exit_btn" href="javascript:void(0);">exit</a>
</form>

//JSTL以及EL表示式
<c:if test="${login eq 1}">
    ${username}請看這裡
</c:if>
<script>
    
    //退出方法
    $('#Login_exit_btn').click(function () {
        $.ajax({
            url:'/demo4/demo/exit',
            success:function (data) {
                alert("退出成功");
                window.location.href="/demo4/demo/index";
            }
        })
    })
    
    //登陸方法
    $('#Login_form_btn').click(function () {
        $.ajax({
            url:'/demo4/demo/login',
            data:$('#Login_form').serialize(),
            success:function (data) {
                if(data=="success"){
                    alert("登陸成功");
                }else{
                    alert("登陸失敗");
                }
                window.location.href="/demo4/demo/index";
            }
        })
    })

</script>

</body>

</html>

後端程式碼:
package com.xudan.demo4.controller;

import com.xudan.demo4.mapper.UserMapper;
import com.xudan.demo4.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.HttpRequestHandlerServlet;
import org.springframework.web.servlet.support.RequestContextUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.security.Signature;
import java.util.List;
import java.util.UUID;

@Controller
@RequestMapping("/demo")        //控制器對映
public class DemoController {
    @Autowired          //自動裝配
    private UserMapper userMapper;

    //重定向指向的方法,用來進行跳轉到INF內的index.jsp
    @RequestMapping("index")
    public String index(Model model) {
        List<User> userList = userMapper.selectAll(new User());
        model.addAttribute("userList", userList);
        return "index";
    }

    @RequestMapping("exit")
    @ResponseBody
    public String exit(HttpServletRequest request){
        request.getSession().removeAttribute("login");
        request.getSession().removeAttribute("username");
        return "success";
    }

    @RequestMapping("login")
    @ResponseBody
    public String login(User user,HttpServletRequest request){
        String username = user.getUser();
        String password = user.getPassword();
        if(username==null || username.equals("") || password==null || password.equals("")){
            return "fail";
        }
        if(userMapper.selectAll(user).size()>0){
            request.getSession().setAttribute("login","1");
            request.getSession().setAttribute("username",username);
            return "success";
        }else {
            request.getSession().setAttribute("login","0");
            return "fail";
        }
    }

}

所學到的幾個新知識:

 (一)HttpServletRequest

  HttpServletRequest物件代表客戶端的請求,當客戶端通過HTTP協議訪問伺服器時,HTTP請求頭中的所有資訊都封裝在這個物件中,通過這個物件提供的方法,可以獲得客戶端請求的所有資訊。

(二)request.getSession().setAttribute

 getSession()是返回當前使用者的會話物件。

而serAttribute就是往session作用域中存值. setAttribute(key,value.) key代表變數名稱,value代表具體的值

 (三)EL表示式

${username}

       通過上面的例子我們可以知道,EL表示式的語法非常簡單,它以”${”開頭,以”}”結束,中間為合法的表示式,具體的語法格式為:

       ${expression}

       expression用於指定要輸出的內容,可以使字串,也可以是由EL運算子組成的表示式。

備註:包括之前的查詢,${userList}也是EL表示式 前端中的eq代表== 而ne代表!= 還有具體其它的下次去系統學習一次。

 (四)request.getSession().removeAttribute()

 removeAttribute() 這個方法代表銷燬session變數,括號裡填變數名稱