(1)路径分为三种
1.绝对路径
2.相对路径(分两种)
带“/”的相对路径
不带“/”的相对路径
(2)客户端路径
1.超链接
绝对路径:<a href="http://Localhost:8080/javaEE-05/servlet/AServlet">点击</a>
相对路径(带“/”的相对路径):<a href="/javaEE-05/servlet/AServlet">点击</a> //相对于主机
相对路径(不带“/”的相对路径):<a href="AServlet"></a> //相对于当前文件的位置
2.表单
绝对路径:<form action="http://Localhost:8080/javaEE-05/servlet/AServlet">
<input type="submit" value="">
</form>
相对路径(带“/”的相对路径):<form action="/javaEE-05/servlet/AServlet"> //相对于主机
<input type="submit" value="">
</form>
相对路径(不带“/”的相对路径):<form action="AServlet"> //相对于当前文件的位置
<input type="submit" value="">
</form>
3.重定向
相对路径(带“/”的相对路径):response.sendRedirect("/javaEE-05/servlet/AServlet"); //相对于主机 路径带项目名称
相对路径(不带“/”的相对路径):response.sendRedirect("AServlet"); //相对于当前路径
总结:客户端路径
客户端路径 带“/”的相对路径:相对于主机
客户端路径 不带“/”的相对路径:相对于当前路径(当前文件位置)
(2.1)建议使用“/”
在Servlet中的重定向建议使用“/”开头,路径相对以主机 要给出应用名称
例如:response.sendRedirect("/javaEE-05/servlet/AServlet");
其中/javaEE-05是当前应用名,如果将来修改了应用名称,那么也要修改所有重定向的路径,这一问题的处理方案是使用request.getContextPath()来获取应用名称。
response.sendRedirect(request.getContextPath+"/servlet/AServlet");
(3)服务端路径
服务端路径必须是相对路径,不能是绝对路径
带“/”的相对路径
不带“/”的相对路径
1.请求转发
转发相对路径(带"/"的相对路径):
request.getRequestDispatcher("/servlet/AServlet").forward(request.response); //相对于web应用
转发相对路径(不带"/"的相对路径):
request.getRequestDispatcher("servlet/AServlet").forward(request.response); //相对于web应用
2.请求包含
包含相对路径(带"/"的相对路径):
request.getRequestDispatcher("/servlet/AServlet").include(request.response); //相对于web应用
包含相对路径(不带"/"的相对路径):
request.getRequestDispatcher("/servlet/AServlet").include(request.response); //相对于web应用
3.<url-pattern> 映射路径
<url-pattern>必须使用“/”开头,并且相对的是当前web应用
总结:请求转发包含映射路径带不带“/”都是相对于当前web应用
(4)ServletContext上下文对象获取资源路径
必须是相对路径
ServletContext获取资源相对路径(带“/”的相对路径):
this.getServletContext.getRealPath("/servlet/AServlet"); //相对于当前web应用
ServletContext获取资源相对路径(不带“/”的相对路径):
this.getServletContext.getRealPath("servlet/AServlet"); //相对于当前web应用
(5)Class获取资源
必须是相对路径
带“/”的相对路径:类名.class.getResourceAsStream("/a.txt"); //相对于当前类classes路径
不带“/”的相对路径:类名.class.getResourceAsStream("a.txt"); //相对于classes所在路径
(6)ClassLoader获取资源
必须是相对路径
带“/”的相对路径:类名.class.getClassLoader().getResourceAsStream("/a.txt"); //相对于当前类路径
不带“/”的相对路径:类名.class.getClassLoader().getResourceAsStream("a.txt"); //相对于当前类路径