${pageContext.request.contextPath} JSP取得绝对路径

一.问题 
    JSP中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决。 
1)采用相对路径遇到的问题 
     相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。 
如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。 
如果采用Struts的Action返回页面,那么由于页面路径与Action路径不同,使得浏览器无法正确解释页面中的路径,如页面为/pages/cust/cust.jsp,图片所有目录为/images/title.gif,这时在/pages/cust/cust.jsp中的所用的路径为”http://images.cnblogs.com/title.gif”,但是如果某一个Action的Forward指向这个JSP文件,而这个Action的路径为/cust/manage.do,那么页面内容中”http://images.cnblogs.com/title.gif”就不再指向正确的路径了。 
解决以上问题似乎只有使用绝对路径了。

2)采用绝对路径遇到的问题 
     随着不同的Web应用发布方式,绝对路径的值也不同。如Web应用发布为MyApp,则路径”/MyApp/images/title.gif”是正确的,但发布为另一应用时如MyApp2,这个路径就不对了,也许这个情况比较少,但以default方式发布Web应用时以上绝对路径也不同:”/images/title.gif”。

二.解决方案 
1)采用绝对路径,但为了解决不同部署方式的差别,在所有非struts标签的路径前加${pageContext.request.contextPath},如原路径为: 
”/images/title.gif”,改为 
“${pageContext.request.contextPath}/images/title.gif”。 
代码” ${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。

 
缺点: 
操作不便,其他工具无法正确解释${pageContext.request.contextPath} 
2) 采用相对路径,在每个JSP文件中加入base标签,如: 
<base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" /> 
这样所有的路径都可以使用相对路径。
缺点: 
对于被包含的文件依然无效。 
    真正使用时需要灵活应用1)和2),写出更加健壮的代码。

在使用的时候可以使用${pageContext.request.contextPath},也同时可以使用<%=request.getContextPath()%>达到同样的效果,同时,也可以将${pageContext.request.contextPath},放入一个JSP文件中,将用C:set放入一个变量中,然后在用的时候用EL表达式取出来。

如:

<c:set var="ctx" value="${pageContext.request.contextPath}" />

随机推荐

  1. 一起学 Java(二)面向对象

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...

  2. msdn上wcf的介绍

    https://msdn.microsoft.com/zh-cn/library/dd456779(v=vs.110).aspx Windows Communication Foundation Ar ...

  3. 推荐几个对Asp&period;Net开发者比较实用的工具 2

    推荐几个对Asp.Net开发者比较实用的工具.大家有相关工具也可以在评论区留言,一起努力学习. 作为程序员要有挑战精神,大家可以尝试一下这些工具. 已经有篇文章写到了vs的扩展工具,这里不再累赘,请查 ...

  4. 漫游Ruby

    Ruby是一门完全面向对象的编程语言,Ruby中的每个值都是对象(nil是Ruby总的特殊值代表null),以下是在irb中的案例. 在Ruby中,圆括号通常都是可选的而且一般都被省略掉. Ruby中 ...

  5. OpenGL与vs编程——error C2440&colon; &OpenCurlyDoubleQuote;glMaterialfv”&colon; 无法从&OpenCurlyDoubleQuote;GLfloat”转换为&OpenCurlyDoubleQuote;const GLfloat &ast;”

    void setMaterial(const GLfloat mat_diffuse[4],GLfloat mat_shininess){static const GLfloat mat_specul ...

  6. Nginx 开启gzip压缩&lpar;图片&comma;文件&comma;css&rpar;

    1.Vim打开Nginx配置文件 vim /usr/local/nginx/conf/nginx.conf 2.找到如下一段,进行修改 gzip on; gzip_min_length 1k; gzi ...

  7. POJ-2031 Building a Space Station---MST &plus; 空间距离

    题目链接: https://vjudge.net/problem/POJ-2031 题目大意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通.如果两个球有重叠的部分则 ...

  8. 手机微博&lpar;weibo&period;cn&rpar;模拟登录及页面解析

    package com.laudandjolynn.test; import java.io.IOException; import java.io.OutputStream; import java ...

  9. img图片不存在显示默认图

    在项目中,我们使用img标签加载图片,有时候图片地址有可能失效,获取路径问题,导致图片加载失败,img标签就会显示alt内容.这时候用户体验不是很好,所以就需要显示一张默认图片. 第一种方式:使用jq ...

  10. GVIM 设置 vimrc

    set expandtab set nobackup set nosmartindent set noautoindent set ruler au BufRead,BufNewFile *.sv s ...

上一篇:[LeetCode] 796. Rotate String_Easy **KMP


下一篇:jsp编写页面时常见错误提示