1.什么是绝对路径?
相对于当前WEB应用的根路径的路径,即任何路径都必须带上contextPath。contextPath可以从request或者application的getContextPath()方法获取。
2.JavaWeb开发中的“/”到底代表什么?
(1)若“/”需交由Servlet容器处理,则它代表当前Web应用的根路径:http://localhost:8080/[contextPath]/
请求转发时:request.getRequestDispatcher("/path/c.jsp").forward(request, response);
web.xml文件中映射Servlet访问路径:
TestServlet
/TestServlet
各种定制标签中的 /
(2)若“/”需交由浏览器处理,则其代表Web站点根路径:http://localhost:8080/
超链接: To B page
表单中的action:
做请求重定向的时候:response.sendRedirect("/a.jsp")
3. jsp/html页面中的路径
页面中使用路径的常用方式如下:
(1).当前应用的根路径+静态资源的相对路径:
浏览器解析时会将”/”解析为服务器。如果不加当前应用的根路径,有可能会错误地把static当作应用名,取决于部署时path的设置。所以最好统一添加应用的根路径。
获取当前应用的根路径:
EL表达式:${pageContext.request.contextPath};
JSP:,若工程文件就是在根目录下,通过request.getContextPath()返回的字符串为空。
(2)当前应用的绝对路径+静态资源的相对路径:
StringappContext=request.getContextPath();//获取当前应用的根路径构建当前应用的绝对路径(/appName)StringbasePath=request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+appContext ;//将basePath存入pageContext中,将来用EL表达式读取
pageContext.setAttribute("basePath",basePath);%>
缺点:每个请求前都要加${pageScope.basePath}
(3)利用标签
默认情况下,页面中相对路径的请求都是相对于当前页面的url发出的;如果当前页面存在标签,则请求是相对中设定的值。
StringappContext=request.getContextPath();//获得当前应用的根路径StringbasePath=request.getScheme()+"://"+request.getServerName()+ ":" +request.getServerPort()+appContext+ "/";%>
">
Login
缺点: 对于被包含的文件依然无效。
注意:第5行中最后加上了反斜杠,表明给base标签的值是一个目录,否则base标签将不起作用。