Web开发中的路径问题

文章转自:https://blog.csdn.net/fran_maomao/article/details/50450502

路径主要分别两种,绝对路径和相对路径

1 绝对路径

绝对路径比较好理解,就是该页面在这个应用的具体详细地址。如http://localhost:8080/webapp/jsp/path

2 相对路径

相对路径有两种写法,一个是前面带/ 的,一个是不带/ 的

不带/ 的为相对于当前目录的路径:  

jsp/helloWorld.jsp

如果当前目录的路径为http://localhost:8080/webapp/path,那么绝对路径为http://localhost:8080/webapp/path/jsp/helloWorld.jsp

带/ 的路径为相对于根目录的路径:

/jsp/helloWorld.jsp

在服务器端解析绝对路径为:http://localhost:8080/webapp/jsp/helloWorld.jsp

在客户端解析为绝对路径为:http://localhost:8080/jsp/helloWorld.jsp

3 对于前面提到的根路径,主要是要清楚这个页面是在客户端解析还是会在服务器端解析

  服务器的根路径:http://localhost:8080/webapp

  客户端的根路径:http://localhost:8080

如果这个页面是在服务器端解析,那么这个相对地址就是相对于服务器的根路径,即相对于http://localhost:8080/webapp/

如果这个页面是在客户端解析,那么这个相对地址就是相对于客户端的根路径,即相对于http://localhost:8080/

那么,哪些地址是在服务器端解析,哪些是在客户端解析呢?(假设有一页面a.jsp,它的绝对路径为http:// localhost:8080/webapp/user/a.jsp)

1  html, css, Javascript都是在客户端解析

所有的html中的带/的相对地址都是相对于客户端的,包括form表单的action属性的地址,即相对http://localhost:8080/ 的。所以,如果form表单要提交到a.jsp,则action路径可写为:action="/webapp/user/a.jsp ";

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

2 重定向的路径问题    

2.1 forward跳转:

servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,要forward到a.jsp应该这么写:request.getRequestDispatcher("/user/a.jsp")这个/相对于当前的web应用webapp,其绝对地址就是:http://localhost:8080 /webapp/user/a.jsp。

JSP中<jsp:forward>也是在服务器端解析的,同上述一样。

2.2 sendRedirect跳转:

response.sendRedirect(address);这个address是在客户端解析的,要跳转到a.jsp,应该这么写:response.sendRedirect("/webapp/user/a.jsp")

以下是本人的实践经验(非转载):

以上结论没有错,但是如果是使用tomcat加载web应用,实际上就是在服务器端解析,所以不需要加上“webapp"。

具体效果就是,直接打开web应用中的部分网页(必须是用到过相对路径的网页,没有用相对路径的,自然没啥事),什么都加载不全(比如css是外部引用而不是内部引用,结果就是没加载上css文件),这相当于在客户端解析。但是通过tomcat运行该web应用(不论打开其中的那个网页),什么问题都没(加载正常),这相当于服务器解析。


猜你喜欢

转载自blog.csdn.net/xrn1997/article/details/80352113