${pageContext.request.contextPath}

* 应用举例

       我们在项目中,有几处用到${pageContext.request.contextPath}的情况,我们举例描述一下~

1. ${pageContext.request.contextPath}/css/common.css
2. <img src="${pageContext.request.contextPath}/image/header.jpg"/>
3. <a href="${pageContext.request.contextPath}/product_findByPid.action?pid=<s:property></a>
4. <form id="loginForm"action="${pageContext.request.contextPath}/user_login.action"  method="post" novalidate="novalidate"></form>

      其实1,2是一种情况,3,4是另一种。这里${pageContext.request.contextPath}的意思是取出部署的应用程序名称或当前项目的名称。例如我的部署文件的名称是shopend_war_expload,${pageContext.request.contextPath}/css/common.css等价于/shopend_war_expload/css/common.css。
     3,4是结合struts的配置而来的,在struts中我们配置的包文件和相关信息如下:

<package name="shop" extends="struts-default" namespace="/"></package>

       而这里的${pageContext.request.contextPath}相当于/shop,而/是localhost:8080于是我们通过地址访问action可以写成:${pageContext.request.contextPath}/product_findByPid.action,我们访问的时候便可以通过localhost:8080/shop/product_findByPid.acton来访问。


* 相对路径 VS 绝对路径

       我们知道随着不同的Web应用发布方式,绝对路径的值也不同。这样很容易出现问题,但是${pageContext.request.contextPath}的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。

       相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。 如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。这样无疑对工作量带来了考验。


* EL表达式

       EL(Expression Language) 是为了使JSP写起来更加简单。它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。他的语法结构是:${expression}。
    EL存取变量数据的方法很简单,如果我们没有指定参数,它会依序从Page、Request、Session、Application范围查找。假如途中找到,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传”“,这里是一个空字符串。

       特别强调一下:

  • 1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
  • 2、 注意 <%@ page isELIgnored=”true” %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。

* pageContext对象了解

       页面上下文,该对象主要用于访问 JSP 之间的共享数据。使用 pageContext 可以访问 page、request、session、application 范围的变量。方法如下:

getAttribute(String name)  //取得 page 范围的 name 属性。(默认为 page 范围内)
getAttribute(String name, int scope) // 取得指定范围的 name 属性,其中scope 可以是以下4个值。
pageContext.PAGE_SCOPE //对应于 page 范围。
pageContext.REQUEST_SCOPE //对应 request 范围。
pageContext.SESSION_SCOPE //对应  session 范围。
pageContext.APPLICATION_SCOPE  //对应 application 范围。

       对应还有两个 setAttribute()方法,用于将指定变量放入 page、request、session、application 范围内。
例子如下 :

pageContext.setAttribute("page1" , "hello1");    // 该属性默认为 page 范围内。
//使用 pageContext 设置属性到 request 范围。
pageContext.setAttribute("page2", "hello2" ,pageContext.REQUEST_SCOPE);
//使用 request 设置属性。
request.setAttribute("page2", "hello2");

       这两条相等,都是设置 page2 到 request 范围。

     还可以获取各属性所在的生存范围,这些范围获取的都是整形变量, 方法为:pageContext.getAttributesScope(“page2”); 范围如下:

1 : 对应 page 生存范围。
2 : 对应 request 生存范围。
3 : 对应 session 生存范围。
4 : 对应 application 生存范围。
不仅如此,pageContext 还可用于获取其他内置对象, pageContext 对象包含如下方法:
ServletRequest getRequest()   :获取 request 对象 。
ServletResponse getResopnse()  :获取 response 对象 。
ServletConfig getServletConfig()  :获取 config 对象 。
ServletContext getServletContext()  :获取 application 对象 。
HttpSession getSession()   : 获取 session 对象 。

       注意:一旦在 JSP、Servlet 编程中获取了 pageContext 对象 ,就可以通过它提供的上面方法来获取其他内置对象。


* END

       对于jsp的内置对象也是一知半解,学习不就是这样吗?我们见的多了,自然会有更深刻的体会,和一种莫名的亲切感。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值