一,基本概念:
相对路径:指由这个文件所在的路径引起的跟其他文件的路径关系
绝对路径:指目录下的绝对位置,直接到达目标位置,是从树形目录结构顶部的根目录开始到某个目录或文件的路径,由一系列连续的目录组成,中间用斜线分割,直到要指定的目录或文件。
形象比喻:用地址来比喻,你的绝对路径就是:中国陕西省渭南市富平县,当你在富平县是,你的朋友在渭南市高新区,那么你朋友对于你的相对路径就是../高新区,如果你朋友在陕西西安,那么它与你的相对路径就是../../西安。以此类推。如果使用相对路径,则有可能出现问题,因为它是相对于“URL请求的地址”去寻找资源。
二,解决方式:
①,直接采用绝对路径:
1)JSP 表达式 <%=request.getContextPath()%>=/LessonPractice040 例:
<a href="<%=request.getContextPath()%>/target.jsp">TargetPage</a>
2)EL 表达式 ${pageContext.request.contextPath}=/LessonPractice040 例:
<a href="${pageContext.request.contextPath}/target.jsp">TargetPage</a>
②利用HTML中的<base>标签
base元素可规定页面中所有链接的基准URL,默认情况下,页面中的链接都是相对于当前页面的地址,可以使用<base>标签中的href属性来设置所有的“相对基准URL”
在一个文档中,最多能使用一个 <base> 元素。<base> 标签必须位于 <head> 元素内部。
<html> <head> <base href="${pageContext.request.scheme }://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath}/"> </head> <a href="jsp/book.jsp>Login</a>(这里就可以使用相对路径,相对于base标签 </html>
三,总结路径写法:
JSP——>Sevlet:
表单提交数据后,交由Servlet处理,action路径可以写成:/项目名/目标Servlet的url-pattern,href里的也是。
不过这里建议使用上面的方式二,由base标签确定当前页面的基准位置,然后页面都是用url-pattern即可
Servlet——>JSP:
转发:(内部跳转,服务器行为,同一个请求)“/filename.jsp”,不需要加工程名,默认在当前项目中。
重定向:(外部跳转,客户端行为,两次请求)“/工程名/filename.jsp”