JavaWeb开发中的文件访问路径

本文详细阐述了服务器端和客户端对于相对路径的不同解析方式,包括JSP、Servlet中的路径处理,以及HTML和JavaScript中的相对路径使用场景。

服务器端地址

服务端的地址指的是相对于你的Web应用的地址,这个地址是在服务器端解析的(不同于HTML和JavaScript中的地址,他们是在浏览器端解析的),也就是说这时候在JSP和Servlet中的相对地址应该是相对于你的Web应用,即相对于http://localhost:8080/WebApp/的。

其用到的地方有:forward

Servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以如果要forward到login.jsp应该这样写:request.getRequestDispatcher("/user/login.jsp");其绝对地址是http://localhost:8080/WebApp/user/login.jsp。

在Servlet中,“/”表示Web应用根目录,和物理路径的相对表示。“./”表示当前目录,“../”表示上级目录,以此类推。

此外,Servlet和JSP中获得文件路径:1. JSP中获得当前应用的相对路径和绝对路径

根目录所对应的绝对路径:request.getRequestURI();
文件的绝对路径:application.getRealPath(request.getRequestURI());
当前web应用的绝对路径:application.getRealPath("/");
取得请求文件的上层目录:newFile(application.getRealPath(request.getRequestURI())).getParent();

2. Servlet中获得当前应用的相对路径和绝对路径

根目录所对应的绝对路径:request.getServletPath();
文件的绝对路径:request.getSession().getServletContext().getRealPath();
当前web应用的绝对路径:servletConfig.getServletContext().getRealPath("/");

客户端的地址

所有的HTML页面中的相对地址都是相对于服务器跟目录(http:localhost:8080/)的,而不是根目录下的Web应用目录http://localhost:8080/WebApp/。

HTML中的form表单的action属性的地址应该是相对于服务器根目录http://localhost:8080/的,所以提交到loginjsp的路径应该为:action="/WebApp/user/login.jsp"。

JavaScript也是在客户端解析的,所以其相对路径和form表单一样。

所以一般情况下,在HTML页面中引用的CSS和JS还有表单的action属性前面都最好加上应用的名称。另外,尽量避免使用'./'和".//"等相对路径。


### Java Web 中读取 TXT 文件路径的方法 在 Java Web 开发中,通常会遇到需要读取 `webapp` 下某个目录中的文件的情况。以下是通过代码实现读取 `webapp` 路径下 `.txt` 文件的具体方法。 #### 使用 ServletContext 获取文件路径 可以通过 `ServletContext` 对象获取项目的根路径,并结合相对路径定位到目标文件的位置: ```java import javax.servlet.ServletContext; import java.io.File; import java.io.FileInputStream; public String readFileFromWebApp(ServletContext servletContext, String filePath) { try { // 构建完整的文件路径 String realPath = servletContext.getRealPath(filePath); // 打开文件输入流 File file = new File(realPath); FileInputStream fis = new FileInputStream(file); // 处理文件内容... byte[] data = new byte[fis.available()]; fis.read(data); fis.close(); return new String(data); // 返回文件内容作为字符串 } catch (Exception e) { e.printStackTrace(); return null; // 如果发生异常则返回null } } ``` 上述代码展示了如何利用 `servletContext.getRealPath()` 方法找到相对于 `webapp` 的实际物理路径[^3]。此方式适用于运行于服务器环境的应用程序。 #### 动态替换路径的方式 如果项目打包成 WAR 或 JAR 文件部署,则可以采用动态替换路径的方式来构建文件访问逻辑: ```java public String getWebappFilePath(String classpath) { // 替换掉 WEB-INF/classes 部分以获得 webapp 根路径 String webappRoot = classpath.replaceAll("WEB-INF/classes/", ""); // 假设我们要加载名为 demo.txt 的文件 String fullPath = webappRoot + "/resources/demo.txt"; return fullPath; } ``` 这里的关键在于正则表达式的运用,它能够帮助我们从当前类所在的 ClassLoader 加载路径中提取出应用的根目录位置。 #### 注意事项 - 当前工作目录可能因容器不同而有所变化,在某些情况下直接依赖绝对路径可能会失败。 - 推荐始终优先考虑基于上下文对象 (`ServletContext`) 来解析资源的真实存储地址,而不是硬编码固定值[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值