转发重定向路径斜杆符号的'/'使用问题
1、转发和重定向的区别:
转发是同一次请求(由服务器请求下一个资源)
重定向是多次请求(由服务器重定向到客户端,由客户端请求下一个资源)
2、重定向相对路径和绝对路径问题
规则与 cmd 的 cd 命令一致,有加斜杠,为绝对路径(从根目录开始算),反之为相对路径(从当前目录开始算)
通过表单请求指定的Url资源 action=”LoginServlet” 则表单生成的请求地址为:
http://localhost:8080/项目名/LoginServlet
在servlet处理请求之后重定向到指定的Uri:
①相对路径:response.sendRedirect("Manager/index.jsp")
生成的地址:原来请求地址+参数生成完整的URL即:
http://localhost:8080/项目名/Manager/index.jsp
②绝对路径:response.sendRedirect("/Manager/index.jsp")
生成的地址:Web服务器本身地址+参数生成完整的URL 即:
http://localhost:8080/Manager/index.jsp
③其他web应用地址response.sendRedirect("http://www.baidu.com")
容器直接定向到该URL。
3 . 转发相对路径和绝对路径问题
参数可以指定为相对路径或绝对路径,转发用相对路径和绝对路径地址效果一样。
①相对路径
相对路径情况下生成的完整URL与重定向方法相同。
②绝对路径
绝对路径与重定向不同,容器将相对于Web应用的根目录加参数生成完整的URL生成的地址:
原来请求地址+参数生成完整的URL(项目名+页面的Uri)即:
http://localhost:8080/项目名/Manager/index.jsp
4 . ServletContext.getRequestDispatcher(UrlString)
参数只能指定为绝对路径,生成的完整URL与HttpServletRequest.getRequestDispatcher(String)相同。
5、转发页面Uri问题
目标页面如果采用相对地址作为资源文件,转发过程中可能导致资源文件的uri失效问题,
这时候可以使用${pageContext.request.contextPath}可以将资源文件的相对地址转换成绝对地址,
如果使用${pageContext.request.contextPath}时页面报错,这时候需要额外导包jap-api.jar 。
示例:
<img alt="adas" src="${pageContext.request.contextPath}/image/baidu.png">
代码示例:
//正确做法
// request.getRequestDispatcher("/main/testPlus.jsp").forward(request,response);
// request.getRequestDispatcher("main/testPlus.jsp").forward(request,response);
// 正确的做法
// String basePath = request.getScheme() + "://" + request.getServerName() +
// ":" + request.getServerPort() + path;
// response.sendRedirect(basePath+"/main/testPlus.jsp");
// 正确的做法
// String path = request.getContextPath();
// response.sendRedirect(path+"/snc.jsp");
// 正确的做法
// response.sendRedirect("snc.jsp");
// 发生错误
// response.sendRedirect("/snc.jsp");
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!