"./":代表目前所在的目录。
" . ./"代表上一层目录。
"/":代表根目录。
路径作用:
编写路径为了告诉编译器如何找到其他资源.
路径分类
1. 相对路径:
从当前资源出发找到其他资源的过程
req.getRequestDispatcher("index.jsp").forward(req, resp);
目前所在的目录
req.getRequestDispatcher("./index.jsp").forward(req, resp);
目前所在的目录
req.getRequestDispatcher("../index.jsp").forward(req, resp);
向上跳一级
2. 绝对路径:
从根目录 ( 服务器根目录 或 项目根目录 ) 出发找到其他资源的过程 req.getRequestDispatcher("/index.jsp").forward(req, resp);
如果是请求转发:
/
表示项目根目录(WebContent
)如果是重定向,静态资源引用: 比如说< img src=""/> < scrip src=""/>,< style/>,location.href 等
/
表示 服务器根目录(tomcat/webapps)技巧
除了请求转发/
指向项目根目录,其余/
都是指服务器根目录;如果客户端请求控制器,控制器转发到JSP后,JSP中如果使用相对路径,需要按照控制器的路径去找其他资源.。
保险办法:使用绝对路径,可以防止上面的问题.
3. 技巧:
- 只要不以
/
开头的都是相对路径 - 只要以
/
开头的都是绝对路径
<url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>
区别
< url-pattern > / </ url-pattern >
不会匹配到*.jsp,即:.jsp不会进入spring的 DispatcherServlet类 。
< url-pattern > /* </ url-pattern >
会匹配.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。
总之,关于web.xml的url映射的小知识:
< url-pattern>/</url-pattern>
会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
< url-pattern>/*</url-pattern>
会匹配所有url:路径型的和后缀型的url(包括/login,.jsp,.js和*.html等)
说的有疑问,需要验证