关于request.getRealPath()的几点疑问

本文介绍了在Servlet环境中获取项目绝对路径的几种方法,并讨论了不同方法的适用性和局限性,特别是针对ServletContext.getRealPath()方法进行了详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、此方法已过时,现在可替换的实现方法有
     request.getSession().getServletContext().getRealPath("/")   
     在Servlet 里用this.getServletContext().getRealPath("/");获得绝对路径。
     struts里用this.getServlet().getServletContext().getRealPath("/")获得绝对路径。
 
相关介绍:
    在目前最新的Java Servlet API 2.1版本中,不赞成使用request.getRealPath()这个方法,使用ServletContext.getRealPath(java.lang.String)代替它。


    在Servlet 2.4文档中对ServletContext.getRealPath(java.lang.String)是这样描述的:
    返回一个字符串,包含一个给定虚拟路径的真实路径,如果转换错误,则返回null。例如,虚拟路径“/index.html”不管在服务器文件系统上具有怎样的真实路径,使用“/index.html”总可以找到它。返回的真实路径使用了相近于servlet容器(servlet container)所在计算机或操作系统的格式,包含了适当的路径分隔符。如果servlet容器无法转换则将返回null.
 
    但是,ServletContext.getRealPath()的返回值经常返回不同的路径。
    例如:有2个文件
    exper1.txt,位于 C:\Tomcat 6.0\webapps\ROOT,
    exper2.txt,位于 C:\Tomcat 6.0\webapps,
    在C:\Tomcat 6.0\webapps\ROOT写一个.jsp文件:
    ServletContext context = getServletContext();
    context.getRealPath(“exper1.txt”)结果为C:\Tomcat 6.0\webapps\ROOT\exper1.txt;     
    context.getRealPath(“exper2.txt”)结果为C:\Tomcat 6.0\webapps\ROOT\exper2.txt;
    context.getRealPath(“exper3.txt”)结果仍为C:\Tomcat 6.0\webapps\ROOT\exper3.txt 但是exper3这个文件是不存在的。这也就说明了getRealPath()这个方法是存在一定的问题的。
 
    application.getRealPath()的用法和ServletContext.getRealPath()基本相同,当把前面例子中的context改为application,得到的结果也是相同的,它也存在着相同的问题
   
    2、request对象位于javax.servlet.http.HttpServletRequest包中,但在java API中找不到
    网上资料显示在J2EE API或Tomcat API中可找到,暂无验证,有兴趣的朋友可以去试试
   
    3、上述方法可返回项目的完整路径,包括盘符、项目名等。

### 回答1: request.getrealpath是一个Java Servlet API中的方法,用于获取请求的真实路径。它返回一个字符串,表示请求的文件在服务器上的真实路径。这个方法通常用于读取或写入文件,或者在服务器上执行其他操作。 ### 回答2: request.getRealPath()方法是一个用于获取服务器上某个文件或目录在系统中的真是路径的方法。在Java Servlet开发中,当我们需要处理服务器上的某个文件或目录时,通常需要获取这个文件或目录在操作系统中的真是路径,这样才能进行进一步的处理。 request.getRealPath()方法可以接收一个相对路径作为参数,然后返回这个相对路径所对应的真是路径。它的工作原理是将传入的相对路径解析为在服务器文件系统中的真是路径。 例如,如果我们调用request.getRealPath("/WEB-INF"),它将返回WEB-INF目录在服务器上的真实路径,比如:"C:/tomcat/webapps/yourwebapp/WEB-INF"。 这个方法的返回值通常是一个字符串,表示相对路径解析后的真实路径。通过获取文件或目录的真实路径,我们可以通过Java的文件IO操作进行文件读写,或者对目录中的文件进行遍历和操作。 需要注意的是,request.getRealPath()方法在一些最新的Servlet容器中已经被废弃,不再推荐使用。因为在一些特殊的环境下,无法正确获取到相对路径的真实路径。而且,这个方法依赖于底层的文件系统,对于一些支持热部署和集群的服务器来说,不同的服务器节点可能会对应不同的文件路径,导致获取的真实路径不一致。 为了替代request.getRealPath()方法,可以使用其他方式来获取相对路径的真实路径,比如使用ServletContext对象的getRealPath()方法,它在传入相对路径时,会自动选择合适的路径来解析,不受服务器节点和文件系统的限制。 ### 回答3: request.getRealPath()是Java Web开发中的一个方法,它可以用来获取当前web应用程序中某个文件或目录的真实路径。在Web应用程序中,通常会将一些资源文件或配置文件存放在特定的目录下,而这个方法可以返回这些文件的真实路径。 该方法的使用需要借助于Servlet中的HttpServletRequest对象。当调用request.getRealPath()方法时,需要传入一个相对于当前web应用程序的路径作为参数。该方法的返回值是一个字符串,表示该文件或目录在当前服务器文件系统中的真实路径。 这个方法在开发中经常用来读取配置文件或者加载资源文件。比如,我们可以通过request.getRealPath("/WEB-INF/config.properties")来获取配置文件config.properties的真实路径。在某些情况下,我们需要获取某个文件或目录的绝对路径,来进行一些操作,例如读取文件内容或者判断文件是否存在等。 需要注意的是,由于不同的服务器可能会有不同的文件存放结构,所以该方法的返回值可能会有所差异。因此,在使用该方法时,我们需要确保代码的兼容性,并且不能将返回的路径直接暴露给用户或者依赖于它进行敏感操作,以免造成安全问题。 总而言之,request.getRealPath()方法是Java Web开发中一个常用的方法,用于获取当前web应用程序中某个文件或目录的真实路径。通过该方法,我们可以方便地操作配置文件和资源文件,提高程序的可扩展性和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵星程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值