作用域:顾名思义就是其作用的范围 在程序中就是一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。(百度的)
那么在jsp中就有四大作用域
1.application作用域(serveltContext)
其作用范围就是在整个Web程序中使用 属于大家共享的(现在还没怎么接触过 暂时放着)
2.session域
session是一次会话 这说明在一次会话中共享其数据(当我们向服务器发送第一个请求开始,只要页面不关闭,或者会话未过期(默认30分钟),或者未调用HttpSession的invalidate()方法,接下来的操作都属于同一次会话的范畴。)
应用举例:在用户登录一个系统后 获取用户的用户名
1.我们需要获取一个session会话对象(session和cookie的最明显的区别是session是存放在服务器上的 cookie是存放在客户端的 )
HttpSession session = request.getSession();
2.假设用户登录了此系统并且成功登录了 那么用户的一些信息例如他的用户名 身份 等一些信息我们可能还需要在其他页面使用 那么就将他的数据存放在session作用域中(session.setAttribute("user", user);) 我们当在其他页面时再去获取相应的数据内容。
// 获得用户的姓名 密码
String ID = request.getParameter("ID");
String password = request.getParameter("password");
// 将用户名和密码传到service层
UserService service = new UserService();
User user = service.login(ID, password);
// 判断用户是否成功的登陆
if (user != null) {
// 用户登录成功 重点看这里!!!!
session.setAttribute("user", user);
// 获得登录者的身份
int status = user.getStatus();
if (status == 0) {
// 定书者身份
// 重定向到登录成功页面
try {
response.sendRedirect(request.getContextPath() + "/admin/Buyer.jsp");
} catch (IOException e) {
e.printStackTrace();
}
3.当我们将数据存放在session域中的时候就可以在这个会话范畴内使用相应的数据了。例如:我们在用户登录了系统进入首页后需要获取用户的用户名就可以直接使用(页面为top.jsp):
用户名:<font color="blue">${user.name }</font>
(这是个人对session域的理解。)
3.request域(一次客户端请求:从客户端发起到服务器接收并响应该请求,或者将该请求forward到另一个页面或者Servlet进行处理而结束。这里可以看这个一起辅助理解https://blog.csdn.net/fulishafulisha/article/details/84949677)
其实用法和上面session的用法差不多 差别就是作用域的范围
4.page域
就是在这一个页面使用 这个就比较简单!
我个人觉得使用比较多的是session域和request域 在什么使用什么域最主要的是看实际情况来决定。