【JavaWeb】保存作用域

保存作用域,像之前讲的session保存作用域

1.page

页面级别,现在几乎不用

2.request

一次请求响应范围有效
image

2.1 客户端重定向

response.sendRedirect(),两次请求,demo02获取的数据为空
(1)演示
demo01Servlet

@WebServlet("/demo01")
public class Demo01Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("uname","lili");
response.sendRedirect("demo02");
}
}

demo02

@WebServlet("/demo02")
public class Demo02Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object unameObj = request.getAttribute("uname");
System.out.println(unameObj);
}
}

控制台打印null,因为发生了两次请求,此时浏览器地址已经变为demo02
image

2.2 服务器转发dispatcher

一次请求,可以获取到request作用域中的数据。
(1)演示
demo01Servlet

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("uname","lili");
request.getRequestDispatcher("demo02").forward(request,response);
}

demo02Servlet

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object unameObj = request.getAttribute("uname");
System.out.println(unameObj);
}

成功打印出uname的值,服务器内转发只发生了一次请求,浏览器地址没有改变
image

3.session

一次会话范围有效。
请求重定向或服务器转发都能获取到,只要session没有过期就可以有效。
两个客户端的session不同

image

(1)演示
demo03Servlet

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("uname","lili");
response.sendRedirect("demo04");
// request.getRequestDispatcher("demo04").forward(request,response);
}

demo04Servlet

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object unameObj = request.getSession().getAttribute("uname");
System.out.println(unameObj);
}

都能获取到session作用域中的值
image

4.application

一次应用程序范围有效
image
(1)演示
上下文:servlet程序的环境
demo05Servlet

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ServletContext :Servlet上下文
ServletContext application = request.getServletContext();
application.setAttribute("uname","lili");
response.sendRedirect("demo06");
// request.getRequestDispatcher("demo06").forward(request,response);
}

demo06Servlet

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext application = request.getServletContext();
Object unameObj = application.getAttribute("uname");
System.out.println(unameObj);
}

用谷歌访问demo05可以访问到,直接访问demo06也可以访问到
访问demo03可以访问到(session)

posted @   植树chen  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示