背景
初次接触javaweb是在大二的软件系统开发实训,当时老师给我们培训了几节课,一些路径啥的也都是模模糊糊就那么跟着些了,对一些相对路径的理解就是:我也不知道,我也没地方问。为了加深对相对路径的理解,也方便后来人,总结了一下javaweb中的一些相对路径。还有一个重点:就是希望能通过这一篇文章,举一反三,以后能大概推导相对路径大概是怎样?为什么是那样?
总概
- 页面跳转的相对路径
- class文件的相对路径
- 重定向中网页的相对路径
页面跳转的相对路径
我们在做第一个servlet和网页的交互时,一般就是如下的登录界面。在action那填的login代表什么?为什么是这样写了?
<form action="LoginServlet" method="get">
账号:<input type="text" name="username"/><br>
密码:<input type="text" name="password"/><br>
<input type="submit" value="登录"/>
</form>
有从基础学servlet的同学应该知道下面这段代码是干什么的(没学过的自行百度servlet的配置,这里就不说了哈)
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.hy.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
看到这可能很多人就会想,第一段代码的会不会是第二段代码中的那个了?那到底是哪个了?是servlet-name?还是servlet的类名?还是url-pattern? 揭晓谜底的时候到了,其实第一段代码的LoginServlet的绝对路径 http://localhost:8080/Demo4/LoginServlet 在我们学习servlet定义和配置时一定有直接访问过这样的地址,不知道你们有没有了解到,访问这个地址会在Demo4的web.xml查找/LoginServlet的,有则找到它的servlet-name,然后通过servlet-name找到servlet-class,最终找到servlet类所在。
class文件的相对路径
首先创建了一个file文件夹和文件夹下的config.properties文件,如下所示
不知道有没有用getClassLoader加载过文件资源了?如下代码是getClassLoader加载config.properties文件的代码,还没用过的可以先不看。
/**
* 使用ClassLoad加载资源
* @return InputStream
*/
private InputStream read01() {
return
this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");
}
这里为什么我们要用../../了?看tomcat下的项目文件可知,class的所在路径为D:\tomcat7\webapps\demo4\WEB-INF\classes
而config.properties所在路径为D:\tomcat7\webapps\demo4\file。到这基本就可以看出了。在this.getClass()的路径下,要想访问config.properties,首先就得退出两个文件夹(classes和WEB-INF),然后再访问file文件夹,然后才能访问file文件夹下的文件。
重定向中网页的相对路径
req.getRequestDispatcher("WEB-INF/showAll.jsp").forward(req, resp);
showAll.jsp文件的路径如下图
在tomcat发布项目的文件夹中, 则是这样的
可以看出,servlet请求转发时,是从stu路径下开始找的