首先jsp页面如果想使用el表达是需要在jsp页面引入核心库jstl标签,具体引入方法参考如下链接
https://blog.csdn.net/a_newbird/article/details/103690171
1.先来介绍下jsp的四大作用域page,request,session,application
①page page是指当前页面。只在当前的jsp页面有效
②request 存在于一次请求的对象,它是指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里用到的request是同一个对象
③session。 session是指当前会话 。只要客户端Cookie中传递的Jsessionid不变,Session不会重新实例化(不超过默认时间.)
其中session的实际有效时间指:
<1浏览器未关闭,cookie未失效;
<2 默认时间.在时间范围内无任何交互.其中在 tomcat 的web.xml 中配置
30
④application。它的范围是整个应用,在 服务器 启动项目时实例化.关闭 服务器时销毁
2.EL表达式的取值过程
el表达式取值是取出某一范围中名称为的变量。所以它会依序从Page、Request、Session、Application范围查找。
如果Page、Request、Session、Application这四个作用域中都有该变量名,则取Page中的值。
另外如果用的是springmvc model对象中也设置了相同的变量名,则取值顺序为model->request->session->application
代码实例如下
控制器代码
@RequestMapping("scope")
public String scopeValue(HttpServletRequest req,Model model){
req.setAttribute("scopeValue", "req值");
req.getServletContext().setAttribute("scopeValue", "appcliation值");
req.getSession().setAttribute("scopeValue", "appcliation值");
//model.addAttribute("scopeValue", "model值");
return "scope";
}
jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Insert title here
pageScope:${pageScope.scopeValue }
requestScope:${requestScope.scopeValue }
sessionScope:${sessionScope.scopeValue }
applicationScope:${applicationScope.scopeValue }
${scopeValue }
结果如下:
如果控制器的代码加上model,则jsp页面去到的值为model中设置的值
@RequestMapping("scope")
public String scopeValue(HttpServletRequest req,Model model){
req.setAttribute("scopeValue", "req值");
req.getServletContext().setAttribute("scopeValue", "appcliation值");
req.getSession().setAttribute("scopeValue", "appcliation值");
model.addAttribute("scopeValue", "model值");
return "scope";
}
结果如下: