做的一个web项目,需要在jsp页面中获取js、css和图片等资源,本想采用相对路径来写,但是发现可移植性太差,在自己电脑上还好使,但辛辛苦苦调好代码后,放到其他电脑上又得再次辛辛苦苦修改相关路径。于是决定采用绝对路径来写。然后在网上找寻相关方法,发现用的比较多的两个:${pageContext.request.contextPath}和<%=request.getContextPath()%>,但具体用哪个我也不大清楚,于是继续查找两者的区别,但让我郁闷的是,网上“抄袭”的真多啊!而且说了一大堆!尽是些不痛不痒的专业名词,关键的真没几个!所以我决定靠自己理解,现在明白了!我想用一种比较通俗的语言分享一下我对此的认识!
可以说${pageContext.request.contextPath}等价于<%=request.getContextPath()%>!它们的意思就是取得当前项目名称(或者是--取出部署的应用程序名,不过这么说太官方了,试问有多少人知道“取出部署的应用程序名”的义)
那么什么是当前的项目名称呢?
假定你的web应用名称为hotel,这个hotel就是当前的项目名称,不过你在浏览器中输入请求路径时,例如输入http//:localhost:8080/hotel/login.jsp
${pageContext.request.contextPath}或<%=request.getContextPath()%>就是从这个请求路径(URL)上截取(是截取) /hotel ,看清楚,前面是有"/",而这个“/”代表的是"http//:localhost:8080",看清楚这里是没有"/"的!
对应到真是的物理地址,即为图中WebContent目录!
另外,如果你是在Tomcat的server.xml文件中配置了虚拟目录,例如
那么我们在对应的物理目录F:\javaweb中创建test_jsp.jsp文件,内容为
开启Tomcat,进行测试,发现输出结果为
可以看到,此时输出为虚拟目录,并且二者完全等价!
因此,在表单<formaction="${pageContext.request.contextPath}/hotel/login.jsp">中,这样写路径永远对,翻译过来${pageContext.request.contextPath}/hotel/login.jsp其中的含义,就是http//:localhost:8080/hotel/login.jsp,相当于你写了一全路径!当然前提是你的JSP页面等等必须放置的位置正确才可以,所以才说明路径永远正确。
为什么这么要做呢?因为学过一些MVC模式的程序员都知道,JSP的作用是用来显示的(表现的),其他的作用最好不要在这个页面上显示,尤其是Java代码!所以就用EL表达式来替代类似有“<%%>”这样的代码格式。
相关推荐
当JSP引擎处理页面时,由于`jqGrid.js`是外部文件,它不会被JSP引擎解析和替换`${pageContext.request.contextPath}`,因此在客户端浏览器加载`jqGrid.js`时,`t`将被赋值为字符串"${pageContext.request.context...
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/* ....
在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()+...
<a href="${pageContext.request.contextPath}/c.jsp">Go to C</a> ``` 这里的`${pageContext.request.contextPath}`用于获取Web应用的上下文路径,加上`/c.jsp`就形成了完整的绝对路径。 在Java Web开发中,"/"有...
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/resources/css/style.css"> ``` 此外,使用绝对路径还有助于防止跨站脚本攻击(Cross-Site Scripting, XSS),因为它们限制了...
一直用EL表达式${pageContext.request.contextPath}来传递应用名,在用到JS中时,很麻烦,虽然也可以用,但是加大了代码复杂度,因此这里推荐用JS获取应用名 function getContextPath() { var contextPath = ...
<img src="${pageContext.request.contextPath}/img/aa.jpg"> ``` 这样可以确保无论应用部署在哪个虚拟目录下,都能够正确加载所需的静态资源。 #### 总结 JavaWeb项目中的路径问题虽然看似简单,但实际操作中很...
<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的...