JSP中的数据作用域
2021-01-25 14:15
标签:cat contex 表达式语言 取数 account 获取 details 一个 浏览器 数据作用域,Scope,也就是指代数据共享的范围,数据存储在合适的范围,在需要的地方取到 参考来源:https://blog.csdn.net/phoxe_bai/article/details/2812417 首先设定一个情景,一个客人(浏览器)去饭馆(服务器),客人要求点菜(发出HTTP请求),接受点菜信息(数据)的服务员(Servlet或JSP),再将点菜单送给厨师(另一个Servlet或者JSP),菜做好后,服务员上菜(服务器的响应),客人从进店到离开饭店(一个HTTP会话) Web交互的最基本单位是HTTP请求(客人点菜),一个服务器的运行过程中会有多个用户访问,也就是多个HTTP会话 作用域是服务器启动到停止这段时间(饭馆从开张到打烊),这个作用域内设置信息,比如饭馆设置一下特色菜,那么这个数据会被所有用户给拿到,所有客人一进来都能看到特色菜是什么,再有,饭馆的一张张菜单都保存了点菜的数据,不会随着客人的流动而丢失,在计算收入的时候,可以拿出来用。 实现方式:通过ServetContext接口实现 方法:Object getAttribute(String name) //从application中获取信息; void setAttribute(String name, Object value) //向application作用域中设置信息。 与会话有关,同一个浏览器访问多次,多次访问之间传递信息,比喻为一个客人可能会多次呼叫服务员,加菜,加酒,服务员则将信息都记录下来,这些数据在客人离开饭店(结束会话)之前都有效,这就是session的作用域 实现方式:通过HttpSession接口实现 方法:Object HttpSession.getAttribute(String name) //从session中获取信息。 void HttpSession.setAttribute(String name, Object value)//向session中保存信息。 HttpSession HttpServletRequest.getSession() //获取当前请求所在的session的对象。 3.request 一个HTTP请求的处理可能需要多个Servlet,Jsp合作,客人点菜(请求)到上菜(响应),需要有服务员把点菜信息告诉给厨师,在上完菜之后,这件事就算完成了,信息也就没用了。 实现方式:通过HttpServletRequest接口实现 方法:void setAttribute(String name, Object value) //将对象value以name为名称保存到request作用域中。 Object getAttribute(String name) //从request作用域中取得指定名字的信息。 转发数据: RequestDispatcher ServletContext.getRequestDispatcher(String path) //取得Dispatcher以便转发,path为转发的目的Servlet或JSP。 void RequestDispatcher.forward(ServletRequest request, ServletResponse response)//将request和response转发 4.page 把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里,也就是说page里的变量只要页面跳转了,它们就不见了。 语法:${expression} 特点:从作用域范围由小到大取值,可以使用pageScope,requestScope,sessionScope、applicationScope限定从哪个作用域中获取数据 不指定范围:${user},这个时候如果不同作用域中有同名的数据名name,则数据值value在最小的那个范围内取 指定范围:${sessionScope.user},在指定了范围后,数据只能在指定的地方找,有同名数据的不影响 另:使用EL内置对象param取值,${param.user}相当于 JSP中的数据作用域 标签:cat contex 表达式语言 取数 account 获取 details 一个 浏览器 原文地址:https://www.cnblogs.com/liyanglin/p/13227421.html一.什么是数据作用域
二.JSP四大数据作用域
作用域分为四种,分别为:
关于request,seesion,application形象解释:
作用范围从大到小:
1.application
@WebServlet(value = "/init",loadOnStartup = 1)
public class InitServlet extends HttpServlet {
@Override
public void init() {
String path=getServletContext().getContextPath();
//application作用域
getServletContext().setAttribute("contextPath",path);
getServletContext().setAttribute("sitename","图书商城");
}
}
2.session
//得到需要保存的数据
User user = userService.login(account, password);
//得到HttpSession对象
HttpSession session = req.getSession();
//将数据存在session作用域中
session.setAttribute("user", user);
//Servlet中
//请求中保存数据
req.setAttribute("goods", goods);
req.setAttribute("pagebean", goodsService.getByPage(page, goods));
// 使用RequestDispatcher 接口的 forward 方法,将请求转发给其他Servlet或JSP
req.getRequestDispatcher("goods_list.jsp").forward(req, resp);
三.使用表达式语言 Expression Language从作用域获取数据