浅谈jsp EL表达式取值过程、page和pagecontext的区别

下面我将详细讲解“浅谈jsp EL表达式取值过程、page和pagecontext的区别”的完整攻略,希望能对你有所帮助。

什么是EL表达式

EL表达式(Expression Language)是一个用于在JSP中获取数据的表达式语言,主要用于在JSP页面中引用和显示Java Bean中的属性值、参数、方法调用等。它的语法类似于JavaScript和PHP等语言的表达式语言。

EL表达式的取值过程

EL表达式的取值过程包括以下几步:

  1. 将EL表达式转化为相应的Java语言表达式。

  2. 根据EL表达式中的变量名,在JSP中搜索相应作用域的属性值,例如,如果使用${username}从request作用域中取出username属性的值,则实际上是调用了request.getAttribute("username")方法。

  3. 如果变量名没有指明作用域,EL表达式默认从javax.servlet.jsp.PageContext类中获取相应的作用域,例如${param.username}即表示从request.getParameter("username")方法中获取username的值。

  4. 如果EL表达式中的变量名不存在,将返回null值。

page和pageContext的区别

在JSP中,page指代当前页面(也就是JSP页面),而pageContext则是JSP页面的上下文对象。它们之间的区别具体如下:

  1. page代表当前JSP页面,是一个隐式对象,可以在JSP页面中直接使用,例如${pageContext.request.method}可以写作${request.method}

  2. pageContext代表当前JSP页面的上下文对象,是一个隐式对象,可以使用pageContext.getAttribute()方法来获取指定作用域中的属性值,例如pageContext.getAttribute("username",PageContext.REQUEST_SCOPE)可以获取request作用域中的username属性值。另外,pageContext还提供了一些其他的常用方法,如pageContext.getOut()pageContext.getSession()等。

示例说明

下面是两个示例,分别说明了EL表达式的取值过程和page和pageContext的区别。

示例1:EL表达式的取值过程

在JSP页面中使用以下EL表达式:${username}

假设该JSP页面被提交到Servlet,Servlet代码如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    request.setAttribute("username", username);
    RequestDispatcher rd = request.getRequestDispatcher("result.jsp");
    rd.forward(request, response);
}

result.jsp页面中,使用以下EL表达式取出username属性的值:${username}

此时,会调用request.getAttribute("username")方法获取username属性的值,与当前页面作用域为request。

示例2:page和pageContext的区别

在JSP页面中,使用以下代码获取request作用域中的属性值:

<%
    String username = (String) request.getAttribute("username");
    out.println("username1: " + username);
%>

${requestScope.username}
${pageContext.getAttribute("username", PageContext.REQUEST_SCOPE)}

以上三行代码效果相同,都可以获取到request作用域中的username属性值。

而如果使用以下代码,则表示从pageContext中获取request作用域中的username属性值:

${pageContext.requestScope.username}
${pageContext.getAttribute("username", PageContext.REQUEST_SCOPE)}

此时,会调用request.getAttribute("username")方法获取username属性的值,与当前页面作用域为request。

希望这个完整攻略能够帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈jsp EL表达式取值过程、page和pagecontext的区别 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 详解SpringMVC解决跨域的两种方案

    下面是详解”SpringMVC解决跨域的两种方案”的完整攻略。 一、什么是跨域 跨域是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是Web应用程序中常见的安全漏洞。 二、为什么需要解决跨域 因为现在Web开发中使用的是前后端分离,分别使用不同的域名访问,一般情况下都会涉及到跨域问题。 三、SpringMVC解决跨域的两种方案 1、使用@Cr…

    Java 2023年5月16日
    00
  • Spring Boot 整合持久层之Spring Data JPA

    下面我将为你详细讲解“Spring Boot 整合持久层之Spring Data JPA”的完整攻略,并提供两个示例。 Spring Boot 整合持久层之Spring Data JPA 什么是Spring Data JPA? Spring Data JPA 是Spring框架提供的一种基于 JPA 规范的持久化框架,它通过简化持久层的开发,让开发人员更专注…

    Java 2023年5月19日
    00
  • JAVA 区分集合和数组

    区分集合和数组是 Java 编程语言中一个重要的概念,本攻略将详细讲解区分集合和数组的相关知识。 什么是数组? 数组是一种特殊的数据结构,它由一组相同类型的元素组成,这些元素以连续的方式存储在内存中。Java 数组可以是一维或多维的,每个数组都有一个固定的大小,这个大小在创建数组时就确定了。 下面是一个示例展示如何创建一个 int 类型的一维数组: int[…

    Java 2023年5月26日
    00
  • Mybatis-Plus使用ID_WORKER生成主键id重复的解决方法

    下面为您提供详细的 “Mybatis-Plus使用ID_WORKER生成主键id重复的解决方法”攻略。 问题背景 Mybatis-Plus是一款高效便捷的持久层框架,它支持多种主键生成策略,包括UUID、雪花算法、自增、ID_WORKER等。其中,ID_WORKER是默认的主键生成策略,它通过Twitter的snowflake算法生成64位的唯一id,具有性…

    Java 2023年5月26日
    00
  • Java日常练习题,每天进步一点点(48)

    该题目是一道Java语言的练习题,侧重于帮助学习者通过自我练习提高Java编程能力,增强对Java知识的掌握和理解。 本题主要包含以下几个部分: 题目描述:阐述了本题需要实现的功能要求以及细节要求,一般以文字的形式呈现。 代码说明:该部分通常提供的是代码的框架,可能包含已经定义好的变量、方法和类等基本的代码结构,需要学习者根据题目要求进行补充和完善。 解题思…

    Java 2023年5月23日
    00
  • ASP.NET微信公众号添加菜单

    下面我将为您详细讲解“ASP.NET微信公众号添加菜单”的完整攻略。 1. 准备工作 首先,在进行微信公众号开发之前,我们需要准备以下工作: 申请微信公众号账号,并获取到对应的AppID和AppSecret。 下载微信公众号开发者工具,该工具可帮助我们进行调试和预览。 创建一个ASP.NET项目,并引入微信公众平台SDK。 2. 添加菜单 在准备工作完成后,…

    Java 2023年5月23日
    00
  • mybatis-plus读取JSON类型的方法实现

    下面是关于mybatis-plus读取JSON类型的方法实现的完整攻略: 1. 添加依赖 在pom.xml文件中添加mybatis-plus和fastjson的依赖: <dependencies> <!–mybatis-plus–> <dependency> <groupId>com.baomidou&lt…

    Java 2023年5月27日
    00
  • java中的static{}块的实例详解

    Java中的static{}块的实例详解 概述 在Java中,可以使用static关键字定义的静态代码块static {},这个静态代码块在类被加载时执行,且只执行一次。可以用于在类加载时进行一些必要的初始化操作等。 示例说明一 public class StaticTest { static { System.out.println("静态代码块…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部