${id}表示会从作用域中取得数据。如果没有在EL表达式中指明它会默认的从【JavaWeb中的四个Scope】由小到大寻取,即按照page、request、session、application的顺序寻取。
作用域对象 | 描述 |
---|---|
pageScope | 从当前页面获取值 |
requestScope | 从当前请求中获取属性值 |
sessionScope | 从当前会话中获取属性值 |
applicationScope | 从当前应用获取全局属性值 |
// 从session获取
Student stu = new Student();
stu.setName("孔子");
String grade = "A";
HttpSession session = request.getSession();
session.setAttribute("student",stu);
session.setAttribute("grade",grade);
request.getRequestDispatcher("/el.jsp").forward(request,response);
使用:
// 使用
${student.name}
${requestScope.student.name}
${sessionScope.student.name}
requestScope和param的区别:
开发过程中经常要在服务端和客户端之间请求或回写某个参数。
在我的使用过程中,一般客户端发起请求时input了某个参数,在jsp页面中可以通过${param.id}拿到这个参数,在servlet中可以通过request.getParameter(“id”)拿到这个参数。
而服务端回写数据时,通常在servlet程序中把数据通过request.setAttribute(“id”, “value”)设置参数值,在jsp页面中通过${requestScope.id}拿到这个回写的数据。
小节:
带有param的EL表达式用于jsp拿到客户端input的数据,
带有requestScope的EL表达式用于jsp拿到服务端回写的数据。
JavaWeb的四个Scope
【英文科普:scope 范围、域】
1.page里的变量没法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。【以页面为单位】
2.request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。【以请求为单位】
3.session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。【以浏览器(缓存)为单位】
4.application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。【以服务器为单位】