证明session基于cookie
前言:
关于一些结论的整理
1.javaweb的四大作用域
四个作用域: pageContext、request、session、application
作用范围大小为:从左往右,依次为从小到大
2.session、request、和ServletContext的区别
从作用范围来说,
session的作用范围是针对一个客户端,session对象和客户端是一一对应的。
request的作用范围是一个客户端的一次请求。
ServletContext的作用范围是服务器启动全程,并且针对所有的客户端。
引入这个话题的原因:
我之前写一个验证码登录的demo示例,但是不知道把需要验证码放到那个作用域中
两个选择:
- 验证码信息放到Session中
- 验证码信息放到ServletContext中
然后我就想这两者的区别,因为这是好久之前的知识有点忘了,所以写这篇博客是为了复习javaweb中的相关知识
证明session时针对于客户端的
测试步骤
为了复习javaweb,所以我使用springboot和servlet分别证明以上结论
1.servlet的方式
补充知识
使用ide工具创建动态的web工程步骤(也可以说是使用ide工具写一个servlet的步骤)
- 使用idea创建java-web的动态工程步骤
参考网址:
https://blog.csdn.net/TZB10000/article/details/101156547?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
- 使用eclipse创建java-web的动态工程的步骤
参考网址:
https://blog.csdn.net/IBLiplus/article/details/81211400?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160665793719724818032955%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160665793719724818032955&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-4-81211400.first_rank_v2_rank_v28p2&utm_term=eclipse%E5%88%9B%E5%BB%BAservlet&spm=1018.2118.3001.4449
引入servlet模板
说明:
这套servlet模板可以直接使用,省的每次还要对已有的代码删删减减
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*servlet模板直接使用,只需要改变类名即可
*/
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//>>处理POST请求参数乱码
request.setCharacterEncoding("utf-8");
//>>处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
//TODO...
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
我是用的是idea
在idea中进行测试
1.写一个设置session的servlet
package com.shaoming.session;
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;
/**
* @Auther: shaoming
* @Date: 2020/11/28 15:53
* @Description:
测试session正对于浏览器而言
这个servlet用户设置session
*/
//@WebServlet(name = "SetSessionServlet")
public class SetSessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//在session里面设置值
request.getSession().setAttribute("mysession","我在Session里面设置的值");
}
}
2.写一个获取session的servlet
package com.shaoming.session;
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.PrintWriter;
/**
* @Auther: shaoming
* @Date: 2020/11/28 15:55
* @Description:
*/
//@WebServlet(name = "GetSessionServlet")
public class GetSessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//>>处理POST请求参数乱码
request.setCharacterEncoding("utf-8");
//>>处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
String mysession = (String) request.getSession().getAttribute("mysession");
PrintWriter writer = response.getWriter();
writer.println("我获取到的session中的数据为: "+mysession);
}
}
3.配置xml
重点推荐
我是推荐servlet的配置不要用注解,就是用xml配置的方式,因为更接近原生的servlet,注解的方式是版本高的时候出现的,如果都用注解,我们不如用springboot了,哈哈
配置文件的位置
web/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>SetSessionServlet</servlet-name>
<servlet-class>com.shaoming.session.SetSessionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SetSessionServlet</servlet-name>
<url-pattern>/SetSessionServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>GetSessionServlet</servlet-name>
<servlet-class>com.shaoming.session.GetSessionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GetSessionServlet</servlet-name>
<url-pattern>/GetSessionServlet</url-pattern>
</servlet-mapping>
</web-app>
4.测试
测试分三种情况
4.1正常测试
设置session的值
url:http://localhost:8080/java_web/SetSessionServlet
获取session的值
url:http://localhost:8080/java_web/GetSessionServlet
页面获取到session的值
我获取到的session中的数据为: 我在Session里面设置的值
4.2去除cookie测试
设置session的值
url:http://localhost:8080/java_web/SetSessionServlet
去除浏览器里面的cookie
获取session的值
url:http://localhost:8080/java_web/GetSessionServlet
页面获取到session的值(没有获取到session)
我获取到的session中的数据为: null
4.3更换浏览器设置
设置session的值
url:http://localhost:8080/java_web/SetSessionServlet
更换为火狐浏览器
获取session的值
url:http://localhost:8080/java_web/GetSessionServlet
页面获取到session的值(没有获取到session)
我获取到的session中的数据为: null
2.springmvc的方式
在idea中进行测试
1.建一个springboot工程,导入web依赖
省略
2.写一个Controller进行测试
package com.ckf.springbootswagger.controller;
import com.ckf.springbootswagger.pojo.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* @Auther: shaoming
* @Date: 2020/12/2 17:26
* @Description:
*/
@RestController
@Api("session测试")
public class SessionController {
@GetMapping("/setsession")//get请求
// @ResponseBody
@ApiOperation(value = "设置session", notes = "", httpMethod = "")
public R setsession(HttpServletRequest request) {
HttpSession session = request.getSession();
session.setAttribute("sessionval","root");
return R.ok().put("设置session的值为:","root");
}
@GetMapping("/getsession")//get请求
// @ResponseBody
@ApiOperation(value = "获取session", notes = "", httpMethod = "")
public R getsession(HttpServletRequest request) {
HttpSession session = request.getSession();
String sessionval = (String) session.getAttribute("sessionval");
return R.ok().put("获取sesion的值为: ",sessionval);
}
}
3.测试
参照servlet三种方式进行测试
3.1正常测试
设置session的值
url:http://localhost:8081/setsession
{
"code": 0,
"设置session的值为:": "root"
}
获取session的值
url:http://localhost:8081/getsession
{
"code": 0,
"获取sesion的值为: ": "root"
}
3.2去除cookie测试
设置session的值
url:http://localhost:8081/setsession
{
"code": 0,
"设置session的值为:": "root"
}
去除浏览器里面的cookie
获取session的值
url:http://localhost:8081/getsession
页面获取到session的值(没有获取到session)
{
"code": 0,
"设置session的值为:": null
}
3.3更换浏览器设置
设置session的值
url:http://localhost:8081/setsession
{
"code": 0,
"设置session的值为:": "root"
}
更换为火狐浏览器
获取session的值
url:http://localhost:8081/getsession
页面获取到session的值(没有获取到session)
{
"code": 0,
"设置session的值为:": null
}
结论
1.session是基于cookie的,sessionid存在cookie中
2.证明了session针对于浏览器的
个人csdn博客网址:https://blog.csdn.net/shaoming314
3.3更换浏览器设置
设置session的值
url:http://localhost:8081/setsession
{
"code": 0,
"设置session的值为:": "root"
}
更换为火狐浏览器
获取session的值
url:http://localhost:8081/getsession
页面获取到session的值(没有获取到session)
{
"code": 0,
"设置session的值为:": null
}
结论
1.session是基于cookie的,sessionid存在cookie中
2.证明了session针对于浏览器的
个人csdn博客网址:https://blog.csdn.net/shaoming314