前言
JSP全称Java Server Pages(中文名叫Java服务器页面),是一种动态网页开发技术。有经验的开发人员应该清楚JSP有9大内置对象和4大作用域,初学者可能不了解。在这里,进修者不讲9大内置对象,只讲JSP的4大作用域。
进入正文之前,先给大家准备一道面试题,每天积累一点点面试经验。
JSP四大作用域分别是什么?
问题分析:考官主要考察点在JSP,目的是检查面试者有没有实际开发经验。
答案:这里先不给大家答案,读者可以通过正文的学习来总结归纳出答案。当然我也会给出答案的,关键看你们能否找到了。
正文
四大作用域
为什么JSP中要引入4大作用域呢?其主要原因是为了解决在页面、请求以及用户之间传递和共享数据问题。JSP的4种作用域分别为:page、request、session、application。这些作用域规定了数据可以传递和共享的范围以及数据存活的时间。
page
JSP默认的作用域是page,它是页面级的,就是说它只在当前页面有效。如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前JSP页面里。 从把变量pageContext开始,到JSP页面结束,你都可以使用这个变量。不过在开发中使用的不多。
1 <%
2 out.print(pageContext.getAttribute("userName"));
3 pageContext.setAttribute("userName", "孙悟空");
4 %>
如果是从其他页面forward跳转过来的,上面获取userName的值就是空的。如果本页面中前面有对这个属性赋值,那么当前页面获取这个userName是可以拿到的。
request
request是请求作用域。如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。它在开发中使用是非常多的。
session
session是会话作用域。如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里用。它也是使用比较多的,如:存放用户登录信息,购物车功能等。
application
application是应用作用域。如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户使用。这在其他scope中都是不会发生的,page, request, session都是完全隔离的,无论如何修改都不会影响其他人的数据。因为application的范围过大,实际开发中应尽量少用。
小结
通过阅读正文内容,我想大家大概了解了JSP的4种作用域。随着现在技术的不断更新,虽然后面会使用的越来越少,不过对于底端学习还是有帮助的。
面试题答案见评论区哦!