【转】request.getcontextPath() 详解

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

但不用也可以吧,比如<a href="<%=request.getContextPath()%>/catalog.jsp">
我就直接用<a href="catalog.jsp">也行啊,这两个文件是在同一个目录下的

比如你要生成一个文件放在服务器上得一个目录下,你可以使用request.getContextPath()+/dir,组成一个完整得目录结构!

但在JSP文件里,通过request.getContextPath()得到的路径却为空,为什么?

 

 

你在context中没有配置path属性,所以你的工程文件就是在根目录下,相当于path="";即是你直接在浏览器中输入你的服务器ip就会到你的jsp页面,而不是tomcat的默认页面;所以你通过request.getContextPath()得到的字符串是为空的;它是获得虚目录的;
如果你想得到工程文件的实际物理路径,可通过:<%=request.getRealPath("/")%>,这样页面就会输出:d:/web

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

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

getServerPort()
获取服务器端口号

 

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

 

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

一种方法是用hidden

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

 

再就是在本页面的js里面也是可以使用Scriptlet来赋值的
var a = '<%= request.getContextPath()>'
或者你赋值给一个hidden的控件都是可以的,然后js取,这样js可以不用写在jsp里

<think>好的,用户想了解Java中HttpServletRequest的getRequestURI、getContextPath以及字符串替换方法的作用。首先,我需要回忆这些方法的具体功能和用法。 首先,getContextPath()返回的是应用的上下文路径,也就是web应用的虚拟目录。比如,如果应用部署在http://localhost:8080/myapp/下,那么getContextPath()就是/myapp。这在处理路径时很重要,因为不同的应用可能有不同的上下文路径。 接下来是getRequestURI(),这个方法返回的是从上下文路径开始到请求参数之前的URI部分。例如,如果用户访问的是http://localhost:8080/myapp/servlet/demo?name=zhangsan,那么getRequestURI()会返回/myapp/servlet/demo。而getRequestURL()则返回完整的URL,包括协议、主机名、端口等信息,但用户可能不需要这个,所以重点在URI。 用户还提到了字符串替换方法,比如replace。在引用[2]中,看到有uri.replace(req.getContextPath(), "")这样的代码,这可能是为了去掉上下文路径,得到相对于应用根目录的路径。比如,如果URI是/myapp/servlet/demo,替换掉上下文路径/myapp后,就变成了/servlet/demo,这在某些路由处理或权限校验时很有用。 现在需要将这些信息组织起来,按照用户的要求分点解释。注意要使用中文,并且确保行内公式用$...$,独立公式用$$...$$,不过这里可能不太涉及数学公式,但如果有的话需要注意。同时,用户需要生成相关问题,所以得考虑可能的相关问题,比如这些方法的使用场景、区别,或者如何处理路径中的动态部分。 还需要检查是否有引用需要标注。引用[1]提到了getRequestURI()getContextPath()的具体返回值示例,引用[2]展示了替换方法的应用场景,引用[3]可能不太相关,但用户提到了三个引用,可能需要确认是否用到了所有引用。看起来引用[3]是关于JDK的,可能用户误贴了,但问题中并未涉及,可以忽略。 在回答结构上,要分点详细说明每个方法的作用,给出示例代码,并解释字符串替换的用途。最后生成相关问题,比如如何获取完整的请求URL,或者如何处理路径中的动态参数等。</think>### Java HttpServletRequest 路径方法详解 #### 1. `getRequestURI()` 方法 - **作用**:返回客户端请求的URI(统一资源标识符),包含应用上下文路径(Context Path)和资源路径 示例:若请求URL为 `http://localhost:8080/servlet/demo?name=zhangsan`,则返回值为 `/servlet/demo`[^1] - **格式特点**:不包含协议、域名、端口和查询参数,仅保留路径部分 #### 2. `getContextPath()` 方法 - **作用**:返回Web应用的虚拟目录(即上下文路径),通常对应项目部署时的根路径 示例:若项目部署在 `http://localhost:8080/myapp/`,则返回 `/myapp` - **应用场景**:用于动态生成资源路径(如重定向、链接拼接) #### 3. 字符串替换方法 `replace()` - **典型用法**:移除URI中的上下文路径以获取相对路径 示例代码: ```java String uri = request.getRequestURI(); // 例如返回 "/myapp/api/user" String relativePath = uri.replace(request.getContextPath(), ""); // 结果 "/api/user" ``` 此操作常用于权限验证、路由匹配等场景[^2] --- ### 关键区别对比 | 方法 | 返回值示例 | 包含协议/域名 | 包含查询参数 | |--------------------|-------------------------------|--------------|--------------| | `getRequestURI()` | `/myapp/servlet/demo` | 否 | 否 | | `getRequestURL()` | `http://localhost/myapp/demo` | 是 | 否 | | `getQueryString()` | `name=zhangsan&age=20` | 否 | 是 | --- ### 综合应用示例 ```java protected void doGet(HttpServletRequest req, HttpServletResponse resp) { // 获取完整请求信息 String contextPath = req.getContextPath(); // "/myapp" String requestURI = req.getRequestURI(); // "/myapp/api/v1/users" String queryString = req.getQueryString(); // "page=2&size=10" // 路径处理:提取API版本 String cleanPath = requestURI.replace(contextPath, ""); // "/api/v1/users" String[] pathSegments = cleanPath.split("/"); // ["", "api", "v1", "users"] } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值