今天想做这么一个功能,当用户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()