转发重定向路径斜杆符号的'/'使用问题

原文:关于转发和重定向的路径问题!

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");

posted on 2017-04-24 18:58  疯狂的妞妞  阅读(463)  评论(0编辑  收藏  举报

导航