Jsp内置对象及EL表达式及相关问题讲解

一、JSP的内置对象(9个JSP内置对象)

JSP的内置对象引用名称   对应的类型

request          HttpServletRequest
response          HttpServletResponse
session          HttpSession(有开关的:page指令的session属性的取值)
application         ServletContext
config            ServletConfig
page            this(当前Servlet对象)
exception         java.lang.Throwable(有开关:page指令的isErrorPage属性改为true)
out              JspWriter
pageContext         javax.servlet.jsp.PageContext非常重要

pageContext对象有三大作用:

1、本身是一个域对象,表示的域范围是本页面。

   同时还能操作其他三个域对象(PageContext ,ServletRequest, HttpSession,ServletContext)

  设置属性:

    void setAttribute(String name,Object value)

    void removeAttribute(String name)

    Object getAttribute(String name)

  操作其他的三个域对象,设置属性:

    void setAttribute(String name,Object value,int scope)

    void removeAttribute(String name,int scope)

    Object getAttribute(String name,int scope)

    参数int scope是由PageContext类提供的静态变量规定的。

    PageContext.PAGE_SCOPE:页面范围(是PageContext本身中的那个Map,代号page)

    PageContext.REQUEST_SCOPE:请求范围(是ServletRequest中的那个Map,代号request)

    PageContext.SESSION_SCOPE:请求范围(是HttpSession中的那个Map,代号session)

    PageContext.APPLICATION_SCOPE:请求范围(是ServletContext中的那个Map,代号application)

Object findAttribute(String name):依次按照page,request, session ,application范围搜索指定名称的对象,找到为止。

                 EL表达式便是调用了此方法(非常有用)

2、获取其他8个隐式对象

3、提供了转发和包含的方便方法 

 若不用pageContext对象:

  RequestDispatcher rd = request.getRequestDispatcher("/url");

  rd.forward(request,response);

 用pageContext对象:
  pageContext.forward("url");

  pageContext.include("url");

四大域对象(两个资源之间互传数据)

JSP中隐式对象的名称   范围名称       具体的类型

pageContext      page       javax.servlet.jsp.PageContext
request          request       javax.servlet.ServletRequest
session             session        javax.servlet.http.HttpSession
application        application     javax.servlet.ServletContext (如果使用,必须同步处理)

二、EL表达式

它只是JSP中的表达式,不是一种开发语言。

基本语法:${EL表达式}

1. 获取数据

EL表达式只能获取四大域中的数据。

EL表达式获取的对象如果是null,页面不会显示数据。因此,EL表达式中永远不会出现空指针异常

"."运算符:

${p.name}:调用域中名称为p对象的getName方法,点运算符是用于获取属性的取值的。

[]运算符:

(.运算符能做的,[]也能做。[]能做的,.不一定能做)

比如${p.name}===${p['name']}==${p["name"]}

优秀在可以取不符合Java命名规范的东东。

2. 数学逻辑运算:

empty运算符:如果判断的对象是null或者空字符串,都返回true。

       对于集合,即使集合对象本身不是null,没有任何元素,也返回true。

EL表达式不支持字符串连接操作。

 
三、EL内置对象(11大EL内置对象)

 获取JSP的内置对象(11大EL内置对象):难点,不要与JSP的内置对象和范围名称搞混

11大EL隐式对象中,其中一个是表示自身对象外,其余都是表示的Map结构

EL隐式对象名称      Java类型              备注

pageContext    javax.servlet.jsp.PageContext   与JSP中的内置对象完全相同

剩余的都是代表的Map集合

pageScope        java.util.Map       代表着PageContext页面范围域那个Map
requestScope      java.util.Map       代表着ServletRequest请求范围域那个Map
sessionScope       java.util.Map       代表着HttpSession会话范围域那个Map
applicationScope     java.util.Map       代表着ServletContext应用范围域那个Map
param           java.util.Map       代表着请求参数。key:请求参数的名称。value:请求参数的值,它是一个字符串。
paramValues        java.util.Map       代表着请求参数。key:请求参数的名称。value:请求参数的值,它是一个字符串数组。
header           java.util.Map      代表着请求消息头。key:头名称。value:头值,它是一个字符串。
headerValues       java.util.Map       代表着请求消息头。key:头名称。value:头值,它是一个字符串数组。
cookie         java.util.Map      代表客户端提交的Cookie的Map。key:cookie的name。value:cookie对象本身
initParam         java.util.Map       代表着全局初始化参数(web.xml中context-param).key:参数名称。value:参数值

EL表达式与JSP内置对象问题
 
问:

${pageContex.request}和${request}有区别吗?这里的request都是HttpServletRequest类吗?
我在Action中有request.setAttribute("key",key);
key变量是集合时在jsp用${key}能拿到,但是key是个字符串时${key}就是null,为什么呢?
还有Attribute和Parameter有什么区别?可以分别有同名的吗?(比如Parameter中有个"key",Attribute也有个"key")
可以的话,EL中区分吗?先找哪个?

回复一:

有区别吧
request对象有若干个内部信息,其中一个是attribute(key, value)队列。
${pageContex.request}表示的是request对象本身,能取得request的所有信息。
${request}表示的是request对象内部的attribute(key, value)队列,只能取得该队列内的信息

回复二:

key变量是集合时在jsp用${key}能拿到,但是key是个字符串时${key}就是null,为什么呢?
你在页面<%request.getparameter(‘key’)>可以取到!

Attribute和Parameter有什么区别:
getParameter(String  name)获得客户端传送给服务器的参数值,该参数是由name指定的,通常是表单中的参数.
getAttribute(String  name):返回有name 指定的属性值,如果指定的属性值不存在,则会返回一个null值.

时间: 2024-10-30 09:18:34

Jsp内置对象及EL表达式及相关问题讲解的相关文章

JavaWeb学习----JSP内置对象详解

[正文] 呼~~~花了一下午的时间,终于把JSP的内置对象的内容学完了,并做好了笔记,方便以后回顾. 今天是10月的最后一天,小小地总结一下吧,这个月共发表博客25篇(排版好麻烦的说),所有内容均由生命壹号本人敲键盘码起.基本是一天一篇,包括国庆的时候也是独霸教研室在学习,学习的大致内容也是和数据库.JavaWeb有关.毕竟以后搞开发不可能是单机吧,网络的部分是多么的重要.下个月要提高学习效率,学习任务要加大,争取早日进入工程实践,嘿嘿~~~ 菜鸟加油,恩,说我自己呢! 骚年矜持,恩,在说你咧!

实例详解JSP内置对象

js|对象|内置对象|详解 jsp九种内置对象:request, reponse, out, session, application, config, pagecontext, page, exception. 一.request对象:该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交信息. 1.Request对象可以使用getParameter(string s)方法获取该表单通过text提交的信息.如: Request.getParamet

jsp内置对象入门(7) pageContext对象详解

我们已经学完了jsp内置对象的最主要的四种对象----page.request.response.session和application,在内置对象中有一个pageContext也是很重要的,因为它在某些程度上是全能的,因为它的一些方法能够代替四种内置对象的方法. pageContext对象简介 pageContext对象是javax.servlet.jsp.PageContext类的实例,主要表示的是一个jsp页面的上下文,此类中除了之前讲解过的属性操作之外,还定义了以下的一些方法,正是这些方

jsp内置对象入门(4) response对象详解

jsp内置对象[03]中学完了request对象,现在学习response对象,request是客户端对服务器端的请求,而response是服务器端对客户端的回应. response对象简介 response对象主要作用是用于对客户端的请求进行回应,将WEB服务器处理后的结果发回给客户端. response对象属于javax.servlet.http.HttpServletResponse接口的实例 HttpServletResponse接口的定义格式与HttpServletRequest接口的

jsp内置对象入门(3) request对象详解【02】

关于request对象的方法有很多,在jsp内置对象[03]request详解[01]中,我们一起学习了request对象中的参数接受问题,那么现在再来看一下request的其他方法: 乱码解决( setCharacterEncoding()) 乱码可是WEB开发中的问题老大哥了,我相信有不少接触过这个东西的人都对其相当的头疼. 什么是乱码? 在运行程序的时候,本来应该显示的中文竟然变成了莫名其妙的其他看不懂的字符,那我们说就碰到乱码了.我们以下面的程序为例: Request_01.jsp <%

jsp内置对象入门(3) request对象详解【01】

在jsp内置对象[02]中我们简单的学习了page.request.session.application四种对象的属性范围.那么从这篇文章开始我们共同来具体学习request.response.session和application的用法.先从request讲起 request内置对象介绍: request内置对象时使用最多的一个对象了,其主要作用是用来接收客户端发送而来的请求信息,例如:请求的参数.发送的头信息等都属于客户端发来的信息,request是javax.servlet.HttpSe

jsp内置对象入门(2) 【02】session、application

我们继续来学习,上一篇文章中说到了request属性,那么既要想客户端和服务端都都能实现跳转的话,就用到了session. 第三种:session属性 我们接着修改一下上一篇文章中的代码来对比一下: Session_01.jsp <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <html> <head> <t

jsp内置对象入门(2) 【01】page、request

内置对象是jsp的核心部分,可以说内置对象贯穿WEB的始终,即使在后续的开发中也依然频繁的用到. 在"jsp内置对象[01]"中的表格介绍了9中内置对象,真正常用到的就四种:page.request和response.session.application. 这四种内置对象各自都有自己的用途和方法.但都有一个相同的目的:就是都是用来接受参数的,都有如下的属性操作方法: 那么四种对象不同的地方就在于四种内置对象有四种不同的属性操作范围.我和大家一起来详细看一下四种属性范围个作用在什么范围

jsp内置对象入门(1) 内置对象概览

jsp内置对象可以说已经接触到了jsp最核心的部分了.其实我们之前就已经接触过这一方面的知识了,大家还记得以前接受参数的时候有个request.getParameter();了吗.没错,这就是我们所讲的内置对象的一种对象里的一个方法. jsp内置对象: 在jsp之中,已经专门为用户的使用提供了许多的内置对象,所谓的内置主要指所有的对象不用再由用户自己进行对象的实例化操作,而可以直接进行使用. 例如,之前学习的request,有一个接受参数的方法,public String getParamete