很明显,浏览器在渲染 html 页面之前发送了多个请求。假设用户打开一个页面,浏览器发送 3 个请求,这些请求被 servlet Filter 捕获。 :
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
saveVisitorQueue = new SaveVisitorQueue();
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
if (req.getSession().getAttrbute("name")!=null) {
req.getSession().setAttrbute("name", "helloValue" + new Date());
}
}
}
第一个请求“初始化” session 属性,但是其他请求呢?如果用户第一次访问页面,请求不会有任何带有 session ID 的 cookie。并且此 id 仅在处理第一个请求后才会设置。
那么其他发送的请求是否具有相同的 session 和相同的属性?服务器如何为多个“第一个”请求“建立” session ?
最佳答案
通常不会有多个“首次”请求。浏览器需要首先获取它正在显示的页面,然后在解析该页面时,通常会在遇到这些资源时请求该页面引用的资源(图像、样式表、JavaScript 等)(尽管有多种方法可以获取这些资源)。修改)和并行(达到某些特定于浏览器的限制)并且通常在相同的 TCP/IP 连接上(取决于浏览器和服务器)。所以第一个页面请求应该设置session ID,后续请求就会有session cookie。
关于java - servlet容器如何为多个 "first"请求实例化 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33340350/