如何通过Java代码获取tomcat服务器的绝对路径

有时候我们可能会有这样的需求:获取tomcat的绝对路径,以便于进行一些其他的操作,看过很多老哥的方式大多都类似于这种:

①:

Test.class.getResource("/") 

②:

System.getProperty("user.dir")

上述两种方式的呢我先说第一种:第一种是获取Classpath的绝对路径。一般情况下是也可以间接获取到tomcat服务器的路径,但是有一种情况例外,当我们改变tomcat下面的配置文件server.xml的appBase地址时,情况就会发生变化。默认情况下为<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">这个属性表示当我们启动Tomcat时加载tomcat下面的工程项目。这个我们可以自定义,比如我们改成appBase="D:\webapps",这样当启动服务器时便会加载我们定义目录下的工程项目。所以如果自定义了appBase属性值的Test.class.getResource("/") 虽然还是可以定位到classpath的路径,但是已经很tomcat的路径没有什么关联了。

第二种方式呢,表示获取用户的当前工作目录,web项目中默认情况获取的值为/tomcat_home/bin/,我在windows和centos中测试的都没有什么问题,但是在Redhat中测试的结果却不是这样的,尤其是在我改了appBase属性之后。偏偏我的项目又需要在Redhat操作系统中跑,所以这一种方式只有放弃了。


最后呢,经过我的苦苦寻找,终于让找到一种比较合适的方式:

System.getProperty("catalina.home")

能够帮你准确的定位到tomcat绝对路径。注意在在windows和*inux中路径分隔符不一样,在window是\,在*inux中是/,千万需要注意这点。网络上许多老哥说最好不要用第二种方式,不然很可能会出现一些致命的错误,我们这些后车之师就不要再次犯错了.


希望这篇文章能够帮助到大家,谢谢~

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
你可以使用Java的Servlet来实现获取表单文件。以下是一个简单的示例代码: ```java import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/upload") @MultipartConfig public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传的文件 Part filePart = request.getPart("file"); String fileName = filePart.getSubmittedFileName(); // 指定保存路径 String savePath = "YOUR_SAVE_PATH" + File.separator + fileName; // 将文件保存到指定路径 try (InputStream inputStream = filePart.getInputStream(); FileOutputStream outputStream = new FileOutputStream(savePath)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } catch (IOException e) { // 处理异常 } response.getWriter().println("文件上传成功!"); } } ``` 在上面的代码中,`doPost`方法用于处理POST请求,通过`request.getPart("file")`获取表单中名为"file"的文件部分。然后通过`getSubmittedFileName`获取文件名,并指定保存路径。接下来,使用输入流从文件部分中读取数据,并使用输出流将数据写入指定路径。最后,返回一个成功的响应。 请注意,你需要将"YOUR_SAVE_PATH"替换为你想要保存文件的实际路径。 此代码需要在Java EE环境中运行,因此你需要使用支持Servlet的Web服务器(如Apache Tomcat)来运行此代码。 希望能对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值