request.getcontextPath() 详解

<%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径。
html

 但不用也能够,好比<a href="<%=request.getContextPath()%>/catalog.jsp">,能够直接用<a href="catalog.jsp">也行,这两个文件是在同一个目录下的。好比你要生成一个文件放在服务器上得一个目录下,能够使用request.getContextPath()+/dir,组成一个完整得目录结构! web

 

但在JSP文件里,有时经过request.getContextPath()获得的路径却为空,为何? 浏览器

context中没有配置path属性,因此你的工程文件就是在根目录下,至关于path=""; tomcat

便是你直接在浏览器中输入你的服务器ip就会到你的jsp页面,而不是tomcat的默认页面;因此你经过request.getContextPath()获得的字符串是为空的;它是得到虚目录的; 服务器

 

若是你想获得工程文件的实际物理路径,可经过:<%=request.getRealPath("/")%>,这样页面就会输出:d:/web。参考servlet中的接口: app

 

request.getScheme();
返回的协议名称,默认是http jsp

 

request.getServerName()
返回的是你浏览器中显示的主机名,你本身试一下就知道了 测试

 

getServerPort()
获取服务器端口号  spa

 

request.getContextPath()应该是获得项目的名字,若是项目为根目录,则获得一个"",即空的字条串。若是项目为abc, <%=request.getContextPath()% > 将获得abc,服务器端的路径则会自动加上,<a href="XXXX.jsp"> 是指当前路径下的这个xxx.jsp页面,有时候也能够在head里设置html:base来解决路径的问题,不过用的最多的仍是request.getContextPath。 htm

 

在js文件中获得request.getContextPath()的值,不想在JSP中写太多的Javascript代码:

一种方法是用hidden:

<input type=hidden name=contextPath value=<%= request.getContextPath()>

 

 

再就是在本页面的js里面也是能够使用Scriptlet来赋值的:
var a = '<%= request.getContextPath()>'


或者你赋值给一个hidden的控件都是能够的,而后js取,这样js能够不用写在jsp里。

 

实际应用中,通常用来解决jsp测试和生产环境路径不一样的问题: 

<%  String appContext = request.getContextPath();  String basePath = request.getScheme()+"://"+request.getServerName()+":"+ request.getServerPort() + appContext;  %>

相关文章
相关标签/搜索