【JavaWeb】保存作用域
保存作用域,像之前讲的session保存作用域
1.page
页面级别,现在几乎不用
2.request
一次请求响应范围有效
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
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的值,服务器内转发只发生了一次请求,浏览器地址没有改变
3.session
一次会话范围有效。
请求重定向或服务器转发都能获取到,只要session没有过期就可以有效。
两个客户端的session不同
(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作用域中的值
4.application
一次应用程序范围有效
(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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!