看到博客园孤傲苍狼的web系列文章中有关于URL路径的使用文章后,感觉自己对URL的使用清楚了很多,自己再对着动手写一遍以加深记忆。
JavaWeb开发中常看到URL以“/”开头,但对于服务器端和浏览器端分别指不同的起点路径。
如果“/”是给服务器用,则代表当前的web工程,自己理解就是指web目录,如果“/”是给浏览器用,则代表webapps目录。
一,“/”代表当前web工程的常见应用场景
1.ServletContext.getRealPath(String path)获取资源的绝对路径
如:this.getServletContext().getRealPath("/img/1.JPG)获取1.JPG的绝对路径中,img前面的“/”就是web工程。
2.在服务前端的forward转发中
如:this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
客户端请求某个web资源,服务器跳转到另外一个web资源,这个forward也是给服务器用的,此时"/index.jsp"前面的“/”就是web工程,即web目录。
3.使用include指令或者<jsp:include>标签引入页面
如<jsp:include page="/jsp/demo.jsp"/>
二.“/”代表webapps目录的常见应用场景
1.使用sendRedirect实现请求重定向
如response.sendRedirect("/JavaWeb_Learning_Project/index.jsp");
服务器发送一个URL地址给浏览器,浏览器拿到URL地址后再次请求服务器,所以“/”是给浏览器使用,此时URL等价于“webapps\JavaWeb_Learning_Project\index.jsp”.
此外项目中通常用另一种更灵活的写法代替上面的写法,这样在项目名称改变时依然有效:
response.sendRedirect(request.getContextPath()+"/index.jsp");
此时request.getContextPath()获取到的内容就是"/JavaWeb_Learning_Project”;
2.使用超链接跳转,提交表单或html部分标签中的src属性
如:<a href="/JavaWeb_Learning_Project/index.jsp>首页</a>,
<form action="${pageContext.request.contextPath}/demo5></form>,
<img alt="验证码看不清,换一张" src="${pageContext.request.contextPath}/demo4" id="validateCodeImg" onclick="changeImg()" >
访问web资源时,绝对路径的写法推荐使用img标签中src属性的写法改进,即:
<a href="${pageContext.request.contextPath}/index.jsp>首页</a>
3.js脚本和css样式文件的引用