EL的11个内置对象

EL的内置对象

EL表达式它也有自己的内置对象可以直接在EL表达式中使用:

注意:如果jsp中既有html代码也有java代码,会很麻烦,所以我们用EL表达式和JSTL标签代替java代码,

但是EL表达式和JSTL标签的底层调用的还是java代码,所以在jsp中注释时不可以使用html注释和java注释,而是使用jsp的注释;

 

5.1. 从不同的域中取值的四个内置对象

${XXXScope.key}

  pageScope

  requestScope

  sessionScope

  applicationScope   

 

准备工作:

   <%

     pageContext.setAttribute("address", "北京1"); // page

     pageContext.setAttribute("address", "北京2", PageContext.REQUEST_SCOPE); // request

     pageContext.setAttribute("address", "北京3", PageContext.SESSION_SCOPE); // session

     pageContext.setAttribute("address", "北京4", PageContext.APPLICATION_SCOPE); // application(ServletContext)

   %>

 

<body>

   <!-- 从四大域中取出数据  -->

   <%

     //pageContext.setAttribute("address", "北京1");//默认page

     //pageContext.setAttribute("address", "北京2",PageContext.REQUEST_SCOPE);

     //pageContext.setAttribute("address", "北京3",PageContext.SESSION_SCOPE);

     //pageContext.setAttribute("address", "北京4",PageContext.APPLICATION_SCOPE);

   %>

     <%=pageContext.getAttribute("address") %>

     <%=pageContext.getAttribute("address",PageContext.REQUEST_SCOPE) %>

     <%=pageContext.getAttribute("address",PageContext.SESSION_SCOPE) %>

     <%=pageContext.getAttribute("address",PageContext.APPLICATION_SCOPE) %>

   <hr/>

  ${pageScope.address }  

  ${requestScope.address }  

  ${sessionScope.address }  

  ${applicationScope.address }

 <hr/>

 java获取的简化方式: <%=pageContext.findAttribute("address") %> <br/>

   el获取的简化方式: ${address}

 

演示注意:

1.pagerequest域从浏览器访问时重写输入地址既可以显示效果,session域需要重启浏览器,application域需要重启服务器才会显示效果;

2.使用Java代码的方式如果获取不到数据输出nullEL表达式的方式则什么都不会显示;

 

5.2. 专门获取浏览器请求服务器时携带参数的2个内置对象:

param         获取用户提交的某个数据,针对一keyvalue   可以理解成:  request.getParameter(name)

paramValues   获取用户提交的某个数据,针对一keyvalue    可以理解成: request.getParameterValues(name)

<body>

  <%--

     <h4>param对象的使用</h4>

     <%=request.getParameter("username") %>

     ${param.username }

  --%>

  

   <h4>paramValues对象的使用(多选)</h4>

   <%

      String[] hobbys = request.getParameterValues("hobby");

      out.println(hobbys[0]);

      out.println(hobbys[1]);

   %>

   <hr/>

       ${paramValues.hobby[0]}

       ${paramValues.hobby[1]}

       ${paramValues.hobby[2]}

  </body>

 

 

5.3. 专门获取浏览器请求服务器时请求头中数据的2内置对象:

header      获取请求头中的信息,针对一keyvalue

headerValues    获取请求头中的信息,针对一keyvalue

 

注意:有特殊字符的使用EL表达式时不可以使用“.”的方式,而要使用“[‘ str ’]”的方式;

 

5.4. cookie它获取到的一个cookie数组

cookie

  获取cookie对象: ${cookie.cookie的名称}, 如 ${cookie.username}

  获取cookie对象的名称: ${cookie.cookie的名称.name} : ${cookie.username.name}

  获取cookie对象的值  : ${cookie.cookie的名称.value} : ${cookie.username.value}

 

需求JSP页面向浏览器发送cookie, 在访问时获取cookie中的数据

02.jsp

 <%

    // 创建cookie

    Cookie cookie = new Cookie("username","fengjie");

    // 设置有效路径

    cookie.setPath("/");

    // 设置最大生存时间

    cookie.setMaxAge(60 * 30);

    // 给浏览器发送cookie

    response.addCookie(cookie);

 %>

 

03.jsp

<body>

 <h4>获取cookie的内容</h4>

 <%

     Cookie[] cookies = request.getCookies();

     if(cookies!=null){

       for(Cookie cookie : cookies){

         String name = cookie.getName();

         String value = cookie.getValue();

         if("username".equals(name)) {

              out.println(name +"::::"+ value);

         }

       }

     }

%>

 <hr/>

     ${cookie.username }

     ${cookie.username.name }

     ${cookie.username.value }

</body>

 

注意:

${cookie.username } 获取的是Cookie("username","fengjie")对象;显示出来为对象的地址值;

${cookie.username.name }  获取的是Cookie("username","fengjie")对象的nemeusername

${cookie.username.value }  获取的是Cookie("username","fengjie")对象的valuefengjie

 

5.5. 其他对象

pageContext   它就和JSP内置对象pageContext功能一致(重点)

initParam        获取的项目的全局配置参数,类似于ServletContext中的getInitParameter(String name)方法功能(它只能获取到web.xml配置的全局参数,每个servlet单独配置的无法使用initParam获取)。

 

<h3>pageContext对象的使用</h3>

   <a href="/d13/03.jsp">03页面</a>

   <%--注意:以后的项目都使用下面这种方式,因为实际开发中项目名会变动 --%>

   <a href="${pageContext.request.contextPath }/03.jsp">03页面</a>

   <%--注意:这种方式不可以,在EL表达式中不可以直接使用request对象,EL表达式中的11个内置对象中没有request内置对象 --%>

   <a href="${request.contextPath }/03.jsp">03页面</a><br/>

   <%=request.getContextPath() %>

   <hr/>

   <%

      HttpServletRequest r = (HttpServletRequest)pageContext.getRequest();

      out.println(r.getContextPath());

   %>

    <hr/>

    el表达式获取项目名:${pageContext.request.contextPath }<br/>

    <%--注意:这种方式不可以,在EL表达式中不可以直接使用request对象 --%>

    el表达式获取项目名:${request.contextPath }

 

   <h3>initParm对象的使用</h3>

   <%= pageContext.getServletContext().getInitParameter("company") %><br/>

   ${initParm.company }

 

web.xml文件中配置全局参数

<context-param>

<param-name>company</param-name>

<param-value></param-value>

</context-param>

 

注意:

1.jsp中内置九大对象,所以在<%>java代码中可以直接使用这九大对象,但是el表达式虽然也在jsp页面中却不可以使用jsp中的九大对象,

而是使用el表达式中的11个内置对象;

Jsp中九大内置对象: page request   session applicationServletContext pageContext   response   config    out    exception

EL表达式11大对象: pageScope requestScope   sessionScope applicationScope   param   paramValues   header   headerValues   cookie  pageContext   initParam

猜你喜欢

转载自blog.csdn.net/qq_35232663/article/details/80501023