一、四大作用域
1、应用域(application/servletContext)
(1)应用域的生命周期
- 在容器启动的时候就创建
- 在容器关闭的时候就销毁
- 存活时间比较长
(2)什么样的数据适合放在应用域
- 所有servlet共享的数据
————————————— 因为应用域的特性就是所有servlet共享
- 比较小的数据
————————————— 因为应用域存活时间很长,如果放在里面长期不使用,就会导致浪费空间
- 不经常被修改的数据
————————————— 共享的数据在多线程的情况下可能会导致数据不安全
(3)如何向应用域中存放数据
//向应用域存放数据
ServletContext servletContext = getServletContext();
//第一个参数:标识符
//第二个参数:具体存放的数据
servletContext.setAttribute("username","admin");
(4)从应用域中获取数据
Object username = servletContext.getAttribute("username");
2、请求域(request)
(1)请求域的生命周期
- 一个service方法结束了,请求域的生命周期就结束了
- 一次请求结束,请求域的生命周期就结束了
(2)不同servlet共享数据
- 把数据放在应用域中
- 把数据放在请求域中,通过请求转发共享数据
(3)向请求域中添加数据
request.setAtrribute("username","admin");
(4)从请求域中获取数据
Object username = request.getAtrribute("username");
3、会话域(Session)
(1)会话域的生命周期
- 在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存 中创建一个session并返回。
- 一次会话从开始到结束,超过默认(设定)保存时间,就清除
(2)向会话域中添加数据
HttpSession session = req.getSession();
session.setAttribute("username", "admin");
(3)从会话域中获取数据
Object username = session.getAttribute("username");
4、前三个域的总结
大小关系 | 请求域 < 会话域 < 应用域 |
使用频率 | 请求域 > 会话域 > 应用域 |
五、pageContext
- 最小的域,只在当前的jsp页面中存活
- 存取数据也和上面的三个域一样,使用setAtrribute()和getAtrribute()方法
六、jsp中的el表达式
1、el表达式出现的目的
- 方便我们从域中获取对象
2、格式
- ${}
3、默认规则
- 如果没有指定从哪个域中取,就默认先从最小的域中取出来。如果没有就再取大一点的域中去找
4、如何指定域
- pageScope表示从pageContext域中寻找
- requestScope表示从请求域中寻找
- sessionScope表示从会话域中寻找
- applicationScope表示从应用域中寻找
${pageScope.username}
${requestScope.username}
${sessionScope.username}
${applicationScope.username}
5、使用el表达式获取java对象
<%--
使用el表达式获取java对象。
--%>
<%
Person person = new Person();
person.setName("zs");
person.setAge(17);
person.setAddress("成都市金牛区");
//把java对象放在请求域中
request.setAttribute("person",person);
%>
<%--使用el表达式获取对象 底层依据。依赖的get方法 --%>
${person.name}
${person.age}
${person.address}
${person.salary}