`

${pageContext.request.contextPath}和<%=request.getContextPath()%> 的区别

 
阅读更多

       做的一个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表达式来替代类似有“<%%>”这样的代码格式。

分享到:
评论

相关推荐

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

    当JSP引擎处理页面时,由于`jqGrid.js`是外部文件,它不会被JSP引擎解析和替换`${pageContext.request.contextPath}`,因此在客户端浏览器加载`jqGrid.js`时,`t`将被赋值为字符串"${pageContext.request.context...

    jsp页面中${pageContext.request.contextPath}介绍

    例如,如果你有一个样式表 `style.css`,在JSP中引入它的正确方式是 `&lt;link rel="stylesheet" href="${pageContext.request.contextPath}/style.css"&gt;`。 2. 统一资源定位:在使用Action或者Controller进行重定向或...

    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/* ....

    由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()+...

    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开发中,"/"有...

    Web开发中的路径问题

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

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

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

    javaweb中路径问题

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

    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