`
Vince_Lee
  • 浏览: 62582 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

路径问题 解决 ${pageContext.request.contextPath} <%=request.getContextPath()%>

阅读更多

 

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

 

三、注意

 

今天在写一个struts的时候遇到路径问题最后用了这条语句解决<form action="${pageContext.request.contextPath}/login.do"> 

这里要注意的是如果用了上面的 ${pageContext.request.contextPath} 表达式的の时候那么你的web.xml要保证头是这样的

<?xml version="1.0" encoding="gbk"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

确保是2.4的schema ,2.5的也可以,也有人说:

2.2 以上的都行吧!主要是使用jstl标签

 

 

分享到:
评论

相关推荐

    JavaScript中${pageContext.request.contextPath}取值问题及解决方案

    在JavaScript中,${pageContext.request.contextPath}是一个特殊表达式,它源于JavaServer Pages (JSP) 的Expression Language (EL),用于获取当前请求的应用上下文路径。应用上下文路径是Web应用程序在服务器上的根...

    ext时间控件,可以选择时分秒

    link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/extjs/pulgins/datetime/datetime.css" /&gt; [removed][removed] [removed][removed] [removed][removed] [removed]...

    jsp运行时的问题集合

    开发者需要理解`&lt;%=request.getContextPath()%&gt;`获取应用的根路径,以及如何正确引用静态资源如CSS、JavaScript文件和图片。 3. **jdbc连接sqlserver2005.txt** 连接SQL Server 2005需要合适的驱动,如Microsoft ...

    mybatis分页绝对路径写法过程详解

    第一种方法是使用&lt;a href="${pageContext.request.contextPath }/abc.jsp“&gt;abc&lt;/a&gt;,第二种方法是使用&lt;% pageContext.setAttribute("APP_PATH", request.getContextPath()); %&gt;,然后再引用他,如:&lt;script type=...

    超市管理系统

    ②&lt;%=request.getContextPath()%&gt; ③&lt;c:set var="path" value="${pageContext.request.contextPath }"/&gt; 可以使用${path}来获取 相对路径时相对于url(不建议) 统一: /admin/user/* /admin/provider/* ....

    javaweb中路径问题

    &lt;img src="${pageContext.request.contextPath}/img/aa.jpg"&gt; ``` 这样可以确保无论应用部署在哪个虚拟目录下,都能够正确加载所需的静态资源。 #### 总结 JavaWeb项目中的路径问题虽然看似简单,但实际操作中很...

    Web开发中的路径问题

    &lt;link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/resources/css/style.css"&gt; ``` 此外,使用绝对路径还有助于防止跨站脚本攻击(Cross-Site Scripting, XSS),因为它们限制了...

    web路径1

    &lt;a href="${pageContext.request.contextPath}/c.jsp"&gt;Go to C&lt;/a&gt; ``` 这里的`${pageContext.request.contextPath}`用于获取Web应用的上下文路径,加上`/c.jsp`就形成了完整的绝对路径。 在Java Web开发中,"/"有...

    由sun公司提供的动态web资源开发技术

    在EasyMall应用中,可以通过EL表达式`${pageContext.request.contextPath}`替换`&lt;%=request.getContextPath()%&gt;`来获取Web应用的上下文路径,同时引入JSTL库,提高代码的可读性和可维护性。 总结,JSP作为Sun公司...

    java开发获取网页当前位置的代码

    String contextPath = request.getContextPath(); out.println("当前上下文路径: " + contextPath); %&gt; ``` 2. **获取请求URL**:请求URL包含了用户实际请求的完整路径,包括上下文路径、Servlet映射路径以及查询...

    el表达式 写入bootstrap表格数据页面的实例代码

    &lt;c:set var="ctx" value="${pageContext.request.contextPath}"/&gt; &lt;%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+...

    js 获取站点应用名的简单实例

    一直用EL表达式${pageContext.request.contextPath}来传递应用名,在用到JS中时,很麻烦,虽然也可以用,但是加大了代码复杂度,因此这里推荐用JS获取应用名 function getContextPath() { var contextPath = ...

    javaweb用户注销后点击浏览器返回刷新页面重复登录问题的解决方法

    &lt;form action="${pageContext.request.contextPath}/servlet/ClientServlet?operation=login" method="post"&gt; &lt;!-- ... --&gt; &lt;input type="hidden" name="token" value="${sessionScope.token}"&gt; &lt;/form&gt; ``` 2. *...

    JavaWeb项目音频资源播放实现方法详解

    &lt;param name='url' value='${pageContext.request.contextPath}/player/bestduanxin.wav' /&gt; &lt;param name='volume' value='100' /&gt; &lt;param name='uiMode' value='mini' /&gt; &lt;/object&gt; &lt;/div&gt; ``` 在js脚本里调用...

    用iframe实现不刷新整个页面上传图片的实例

    &lt;form method="post" id="upload_form" action="${pageContext.request.contextPath }/servlet/IframeTestImageServlet" enctype="multipart/form-data"&gt; &lt;input type="file" name="pic"/&gt; &lt;br/&gt; &lt;input type=...

    Java web开发中加载图片路径的两种方式

    &lt;img src="${pageContext.request.contextPath}/image/1_it.jpg"&gt; ``` 这样,无论你的Web应用部署在哪里,只要`1_it.jpg`在正确的目录下,图片都能被正确加载。 ### 注意事项 - **资源目录配置**:确保IDEA的...

Global site tag (gtag.js) - Google Analytics