一.问题
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}是一个特殊表达式,它源于JavaServer Pages (JSP) 的Expression Language (EL),用于获取当前请求的应用上下文路径。应用上下文路径是Web应用程序在服务器上的根...
link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/extjs/pulgins/datetime/datetime.css" /> [removed][removed] [removed][removed] [removed][removed] [removed]...
开发者需要理解`<%=request.getContextPath()%>`获取应用的根路径,以及如何正确引用静态资源如CSS、JavaScript文件和图片。 3. **jdbc连接sqlserver2005.txt** 连接SQL Server 2005需要合适的驱动,如Microsoft ...
第一种方法是使用<a href="${pageContext.request.contextPath }/abc.jsp“>abc</a>,第二种方法是使用<% pageContext.setAttribute("APP_PATH", request.getContextPath()); %>,然后再引用他,如:<script type=...
②<%=request.getContextPath()%> ③<c:set var="path" value="${pageContext.request.contextPath }"/> 可以使用${path}来获取 相对路径时相对于url(不建议) 统一: /admin/user/* /admin/provider/* ....
<img src="${pageContext.request.contextPath}/img/aa.jpg"> ``` 这样可以确保无论应用部署在哪个虚拟目录下,都能够正确加载所需的静态资源。 #### 总结 JavaWeb项目中的路径问题虽然看似简单,但实际操作中很...
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/resources/css/style.css"> ``` 此外,使用绝对路径还有助于防止跨站脚本攻击(Cross-Site Scripting, XSS),因为它们限制了...
<a href="${pageContext.request.contextPath}/c.jsp">Go to C</a> ``` 这里的`${pageContext.request.contextPath}`用于获取Web应用的上下文路径,加上`/c.jsp`就形成了完整的绝对路径。 在Java Web开发中,"/"有...
在EasyMall应用中,可以通过EL表达式`${pageContext.request.contextPath}`替换`<%=request.getContextPath()%>`来获取Web应用的上下文路径,同时引入JSTL库,提高代码的可读性和可维护性。 总结,JSP作为Sun公司...
String contextPath = request.getContextPath(); out.println("当前上下文路径: " + contextPath); %> ``` 2. **获取请求URL**:请求URL包含了用户实际请求的完整路径,包括上下文路径、Servlet映射路径以及查询...
<c:set var="ctx" value="${pageContext.request.contextPath}"/> <%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+...
一直用EL表达式${pageContext.request.contextPath}来传递应用名,在用到JS中时,很麻烦,虽然也可以用,但是加大了代码复杂度,因此这里推荐用JS获取应用名 function getContextPath() { var contextPath = ...
<form action="${pageContext.request.contextPath}/servlet/ClientServlet?operation=login" method="post"> <!-- ... --> <input type="hidden" name="token" value="${sessionScope.token}"> </form> ``` 2. *...
<param name='url' value='${pageContext.request.contextPath}/player/bestduanxin.wav' /> <param name='volume' value='100' /> <param name='uiMode' value='mini' /> </object> </div> ``` 在js脚本里调用...
<form method="post" id="upload_form" action="${pageContext.request.contextPath }/servlet/IframeTestImageServlet" enctype="multipart/form-data"> <input type="file" name="pic"/> <br/> <input type=...
<img src="${pageContext.request.contextPath}/image/1_it.jpg"> ``` 这样,无论你的Web应用部署在哪里,只要`1_it.jpg`在正确的目录下,图片都能被正确加载。 ### 注意事项 - **资源目录配置**:确保IDEA的...