编程自学指南:java程序设计开发,内置对象的属性范围详解,四大作用域的生命周期与作用范围,作用域优先级,不同作用域中存储、读取、删除数据的方法

编程自学指南:java程序设计开发,内置对象的属性范围详解

一、课程信息

学习目标

  1. 理解四大作用域生命周期作用范围
  2. 掌握在不同作用域中存储、读取、删除数据的方法
  3. 能根据业务场景选择合适的作用域
  4. 理解作用域与其他 Web 技术的协作关系

二、课程导入:数据存储的 “抽屉”

🌰 生活类比

作用域存储位置可见性范围典型用途
page单页抽屉当前页面临时计算结果
request单请求信封一次请求内表单提交数据
session个人储物柜整个会话登录状态、购物车
application公共储物柜整个应用全局配置、计数器

三、四大作用域核心概念

🔍 1. 作用域对比

作用域类型生命周期访问方式
pagePageContext页面响应结束后销毁pageContext.getAttribute()
requestHttpServletRequest请求处理完成后销毁request.getAttribute()
sessionHttpSession用户会话超时或关闭浏览器时销毁session.getAttribute()
applicationServletContext服务器重启时销毁application.getAttribute()

🔍 2. 作用域优先级

graph TD
    page --> request --> session --> application

查找顺序:从当前作用域依次向上查找,直到找到匹配的属性

四、作用域实战案例

🔥 案例 1:page 作用域

JSP 代码
<%-- page.jsp --%>
<%
    pageContext.setAttribute("msg", "PAGE");
    out.println("page 作用域 msg: " + pageContext.getAttribute("msg"));
%>
输出结果
page 作用域 msg: PAGE

🔥 案例 2:request 作用域

Servlet 代码
@WebServlet("/request")
public class RequestServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException {
        
        req.setAttribute("user", "john");
        req.getRequestDispatcher("/request.jsp").forward(req, resp);
    }
}
JSP 代码

jsp

<%-- request.jsp --%>
request 作用域 user: ${requestScope.user}

🔥 案例 3:session 作用域

Servlet 代码
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
        throws IOException {
        
        HttpSession session = req.getSession();
        session.setAttribute("user", "admin");
        resp.sendRedirect("/home.jsp");
    }
}
JSP 代码
<%-- home.jsp --%>
session 作用域 user: ${sessionScope.user}

🔥 案例 4:application 作用域

Servlet 代码
@WebServlet("/counter")
public class CounterServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
        throws IOException {
        
        ServletContext app = getServletContext();
        int count = (int) app.getAttribute("count");
        app.setAttribute("count", ++count);
        resp.getWriter().write("总访问量:" + count);
    }
}

五、作用域协作案例

🔥 案例:用户信息展示(MVC 模式)

Servlet(Controller)
@WebServlet("/user")
public class UserServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException {
        
        User user = userService.getUser(1);
        req.setAttribute("user", user); // request 作用域
        req.getRequestDispatcher("/user.jsp").forward(req, resp);
    }
}
JSP(View)
<%-- user.jsp --%>
用户姓名:${requestScope.user.name}

🔥 案例:全局配置读取

web.xml
<context-param>
    <param-name>appName</param-name>
    <param-value>JavaWeb 学院</param-value>
</context-param>
Servlet 代码
ServletContext app = getServletContext();
String appName = app.getInitParameter("appName");

六、关联知识:作用域与其他技术

🔗 1. 与 Filter 的协作

@WebFilter("/*")
public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, 
                        FilterChain chain) throws IOException, ServletException {
        
        req.setCharacterEncoding("UTF-8");
        res.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, res);
    }
}

🔗 2. 与 EL 表达式的协作

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:forEach items="${requestScope.students}" var="s">
    ${s.name}
</c:forEach>

七、课堂练习

练习 1:作用域实验

任务

  1. 在 A.jsp 中向四个作用域存入相同键名的数据
  2. 在 B.jsp 中通过 EL 输出各作用域的值

练习 2:购物车功能

任务

  1. 使用 session 作用域存储购物车商品
  2. 用 EL+JSTL 展示购物车列表

八、课程总结

知识图谱:

四大作用域  
   ↳ page:页面级,响应结束即销毁  
   ↳ request:请求级,转发可见  
   ↳ session:会话级,跨请求保持  
   ↳ application:应用级,全局共享  
   ↳ 选择原则:  
      ✅ 临时数据 → page/request  
      ✅ 用户数据 → session  
      ✅ 全局数据 → application  

口诀记忆:

“作用域分四级,page 请求 session 应用,
生命周期各不同,选择场景要牢记,
EL 表达式真便利,${作用域。键} 取数据,
合理运用作用域,代码结构更清晰!”

九、课后作业

必做 1:多语言切换

要求

  1. 使用 session 作用域存储用户语言偏好(中文 / 英文)
  2. 根据语言动态加载不同的资源文件

必做 2:应用级配置管理

任务

  1. 在 web.xml 中配置数据库连接参数
  2. 使用 application 作用域读取并缓存这些参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值