web应用中的路径
http中的相对路径与绝对路径
相对路径:
代码表现形式(三种情况):
<!-- index为servlet路径:@WebServlet("/test") -->
1.<a>标签发送请求:<a href="test">相对路径</a>
2.form表单请求: <form action="test" method="post">
<input type="text" name="username">
<button>提交</button>
</form>
3.图片地址:<img src="i/eg_tulip.jpg">
解释:
相对路径是相对于当前路径的上一级路径,例如:
当前路径为:http://localhost:8080/test410/aa/index.jsp,
那么标签中的路径为:http://localhost:8080/test410/aa/index.jsp/标签,
那么浏览器解析获取的相对路径为:http://localhost:8080/test410/aa,
与标签内的路径拼接起来为:http://localhost:8080/test410/aa/xxxxxx,
如:http://localhost:8080/test410/aa/index。
绝对路径:
特征: 用‘/’打头,如:
<a href="/test">绝对路径</a>
解释: 绝对路径为服务器根目录,如:当前路径为:http://localhost:8080/test410/aa/index.jsp,那么浏览器解析获取的绝对路径为:http://localhost:8080/,与a标签地址拼接:http://localhost:8080/test。
开发过程中对html中路径的设置:
开发过程中为避免路径错误与混乱,较好的解决方案为使用html中的base标签设置html的上下文路径为web应用的根目录。无论当前页面的路径为什么,通过base标签设置路径后,浏览器解析获取的路径都是web应用的根目录,即:主机地址/web应用名/,与html标签中的相对地址拼接后为:主机地址/web应用名/标签设定地址。
base标签使用方法:
1.在jsp中的head标签中加入
<base href="<%=request.getContextPath() %>/ ">
在服务器渲染后,发送到浏览器的会变成如下形式:<base href="/web应用名/"> ,如:<base href="/test410/">,
当鼠标移上去时会看到完整地址,
即:服务器地址web应用名/
2.在标签中知指明相对地址,如:
<a href="test">相对路径</a>
最终的拼接结果为:服务器地址/test410(web应用名)/test(标签中指定的路径)
Servlet中的路径设置
getRequestDispatcher(URL):
- 相对路径(不加斜杠):相对于当前路径,如:
当前servlet的路径为@WebServlet("/index/login"),
servlet中的请求转发为getRequestDispatcher(“success”).forward(req,resp);
相对路径为:/index/;
那么URL为/index/success。 - 绝对路径(‘/’打头):相对于web应用根目录,如:
getRequestDispatcher("/bb/success").forward(request, response)
那么URL为:web应用根目录/index/success,如:test410/index/success。
sendRedirect(URL):
- 相对路径(不建议使用相对定位):原来请求地址+参数生成完整的URL,如:
请求路径为:http://localhost:8080/test410/bb/cc,
响应语句为:sendRedirect(“success.jsp”);
最终拼接的地址为:http://localhost:8080/test410/bb/success.jsp
ps:当使用sendRedirect(URL)时不建议使用相对定位,容易造成路径混乱使得无法正常跳转。
- 绝对定位(‘/’打头):相对于服务器地址的根路径,如:
请求路径为:http://localhost:8080/test410/bb/cc,
响应语句为:sendRedirect("/success.jsp");
绝对路径就为:http://localhost:8080/;
绝对路径与指定路径拼接为:http://localhost:8080/success.jsp;
ps:使用绝对路径,无法取得应用路径等,只取到服务器地址,使用起来较为不变。
sendRedirect(URL)较好设置URL的方案:
- 使用手动添加上下文路径:
request.getContextPath()+jsp/servlet的实际路径。
request.getContextPath()===》/应用根目录,如:/test410。
应用实例: sendRedirect(request.getContextPath()+"/b")。