json字符串在http请求和响应中,与java对象


前端代码:login2.HTML
作用:发送Ajax请求,以及处理Ajax响应数据
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<h2>用户登录</h2>
<div id="app">
用户名:<input type="text" v-model="username">
<br><br>
密码:<input type="password" v-model="password">
<br><br>
<button v-on:click="login()">登录</button>
</div>
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
new Vue({
el: "#app",
data: {
username: "",
password: ""
},
methods: {
login: function () {
//alert("用户名:"+this.username+"\n密码:"+this.password)
let vm = this;
//发送ajax请求
axios.post("login2", {
username: vm.username,
password: vm.password
}).then(function (resp) {
//console.log(resp)
let body=resp.data;
if(body.ok){
//业务操作成功,跳转到首页
window.location.href="home.html";
}else{
//业务操作失败,显示错误信息
alert("错误码"+body.code+"\n错误信息"+body.msg);
}
}).catch(function (err) {
console.error(JSON.stringify(err))
})
}
}
});
</script>
</body>
</html>
后台交互:
package org.example.servlet.servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.example.servlet.demo.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/login2")
public class login2Servlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//ajax请求响应,比较固定的三行代码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/json");
//1.解析请求数据
//请求体数据都可以通过输入流获取,只不过表单数据使用getParameter更方便。
InputStream in = req.getInputStream();
//使用jackon框架,把json字符串反序列化为java对象
ObjectMapper mapper = new ObjectMapper();
User input = mapper.readValue(in, User.class);
//准备输出流
PrintWriter pw=resp.getWriter();
//提供一个对象,序列化为json字符串作为响应体的内容
Map<String,Object> map=new HashMap<>();
//2.业务处理
if("abc".equals(input.getUsername())
&&"123".equals(input.getPassword())){
//业务操作是否成功
map.put("ok",true);
//业务操作成功时,可能需要业务数据,
// 前端会根据响应的数据字段,来渲染网页内存
}else{
map.put("ok",false);
//业务操作失败,一般提供错误码(开发人员)
// 或错误消息(用户用)
map.put("code","LOG001");
map.put("msg","用户名或密码错误");
}
//3.返回响应数据(json字符串)
pw.println(mapper.writeValueAsString(map));
}
}
js发送Ajax请求,以及后台交互的过程


定义: Cookies 是存储在客户端计算机上的文本文件,并保留了用户的各种跟踪信息。
形式:Cookies 通常设置在 HTTP 头信息中。设置 Cookie 的http请求,会向 Servlet 会发送如下的头信息:
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT;
path=/; domain=bit.com
Connection: close
Content-Type: text/html
标准的请求头:Cookie:键=值
标准的响应头:Set-Cookie:键=值
作用:
cookie是保存信息用的(客户端本地,和浏览器相关的文件夹),会话保持,如完成用户的登录与状态保持


概念:会话。对于web系统来说,一个会话表示登录后,注销前,且最后一次操作离下一个操作没有超时(规定的会话时间)都是一个会话。
作用:标识登录的有效用户。
原理:服务端保存用户信息。(登录时校验账号密码通过,保存用户信息)
首次登录:
再次登录:
