A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马王宁 中级黑马   /  2012-12-4 16:01  /  1822 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

之前好长时间都纳闷,明明jsp的内置对象有request,为啥jsp页面上,不能用${request.contextPath},非得用${pageContext.request.contextPath},原来el也有内置对象啊。今天刚找到的,贴出来共享下。{:soso__10299032130424652329_2:}

JSP内置对象与EL内置对象
  JSP内置对象类型映射表

对象名                    类型                         作用域

request        javax.servlet.ServletRequest           RequestScope

response       javax.servlet.ServletResponse          PageScope

pageContext     javax.servlet.jsp.PageContext          PageScope

session        javax.servlet.http.HttpSession         SessionScope

application    javax.servlet.ServletContext           ApplicationScope

out            javax.servlet.jsp.JspWriter            PageScope

config         javax.servlet.ServletConfig            PageScope

page           java.lang.Object                       PageScope
exception      javax.lang.Throwable                   PageScope
  至于九大内置对象(也叫隐式对象)如何应用,我想我在此无须多说,这方面文章一搜一大片。我想提一下pageContext这个对象。
  pageContext这个对象比较特殊,由它的类型可知它是jsp特有的,servlet中没有此对象。pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的session,也可以取本页面所在的 application的某一属性值,他相当于页面中所有功能的集大成者。
再说一下EL内置对象:
  EL
为了方便输出一些表达式的值,自己也定义了一些内置对象,应用这些内置对象方便的获取想要输出的值
JSP EL的内置对象和JSP的内置对象是两回事,不能互用,即JSPEL内置对象只能在EL中表达式中使用,
JSP的内置对象也只能在JSP中使用而不能在EL中直接用

但是两种有个对应关系,即EL的内置对象可以调用JSP对应内置对象的保存数据,从而方便的显示

JSP EL的内置对象:
pageContext
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
cookie
initParam
可以分为以下三类:
1.与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和applicationScope;
它们基本上就和JSP的pageContext、request、session和application一样;
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(Stringname),却不能取得其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
    session.getAttribute("username") 取得username的值,
在EL中则使用下列方法
    ${sessionScope.username}
2.与输入有关的隐含对象
与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。
例如我们要取得用户的请求参数时,可以利用下列方法:
    request.getParameter(String name)
    request.getParameterValues(String name)
在EL中则可以使用param和paramValues两者来取得数据。
    ${param.name}
    ${paramValues.name}
3.其他隐含对象
cookie
JSTL
并没有提供设定cookie的动作,
例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}来取得它。
header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。
initParam
initParam取得设定web站点的环境参数(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
    可以使用 ${initParam.userid}来取得名称为userid
pageContext
pageContext取得其他有关用户要求或页面的详细信息。
   ${pageContext.request.queryString}        取得请求的参数字符串
   ${pageContext.request.requestURL}        取得请求的URL,但不包括请求之参数字符串
    ${pageContext.request.contextPath}        服务的web application 的名称
   ${pageContext.request.method}          取得HTTP 的方法(GET、POST)
   ${pageContext.request.protocol}        取得使用的协议(HTTP/1.1、HTTP/1.0)
   ${pageContext.request.remoteUser}        取得用户名称
    ${pageContext.request.remoteAddr}         取得用户的IP地址
   ${pageContext.session.new}            判断session 是否为新的
   ${pageContext.session.id}              取得session 的ID
    ${pageContext.servletContext.serverInfo}   取得主机端的服务信息

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览
沙发         
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马