• 关于请求和重定向的路径问题


    重定向和转发相对路径和绝对路径问题

    注意:转发和重定向的URLString前有加 / 为绝对路径   反之为相对路径

    1.假设通过表单请求指定的Url资源   action=“LoginServlet”

    则表单生成的请求地址为:

    http://localhost:8080/项目名/LoginServlet

    2.在servlet处理请求之后重定向到下面指定资源

    参数可以指定为相对路径或绝对路径或web应用程序。

    ①相对路径: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.在servlet处理请求之后转发到以下指定资源

    参数可以指定为相对路径或绝对路径。

    ①相对路径

    相对路径情况下生成的完整URL与重定向方法相同。

    ②绝对路径

    绝对路径与重定向不同,容器将相对于Web应用的根目录加参数生成完整的URL

    生成的地址:  原来请求地址+参数生成完整的URL  即:

    http://localhost:8080/项目名/Manager/index.jsp

    转发用相对路径和绝对路径地址都一样。

    4. ServletContext.getRequestDispatcher(UrlString)

    参数只能指定为绝对路径,生成的完整URL与HttpServletRequest.getRequestDispatcher(String)相同。

    **转自:http://blog.sina.com.cn/s/blog_7ffb8dd501013tbg.html
    **

    一、请求转发与响应重定向的种类

    有两种方式获得Servlet转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获得,一种是通过ServletContext的getRequestDispatcher()方法获得。

    Servlet重定向的方法只有一种:HttpServletResponse的sendRedirect()方法。

    这三个方法的参数都是一个URL形式的字符串,但在使用相对路径或绝对路径上有所区别。

    二、请求转发与响应重定向中路径参数区别

    假设通过http://localhost/myApp/cool/bar.do请求到达该方法所属的Servlet。

    1、响应重定向  ◆ HttpServletResponse.sendRedirect(String)

    参数可以指定为相对路径、绝对路径或其它Web应用。

    i:相对路径response.sendRedirect(“foo/stuff.do”),容器相对于原来请求URL的目录加参数来生成完整的URL——http://localhost/myApp/cool/foo/stuff.do

    ii:绝对路径response.sendRedirect(“/foo/stuff.do”),容器相对于Web应用本身加参数建立完整的URL,这是因为 重定向response.sendRedirect(“”)是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器,请求是在服务器外进行的,即完整的url是——http://localhost/foo/stuff.do

    iii:其它Web应用:response.sendRedirect(“http://www.xxx.com”)容器直接定向到该URL。

    2、请求转发   ◆HttpServletRequest.getRequestDispatcher(String)

    参数可以指定为相对路径或绝对路径。

    i:相对路径情况下生成的完整URL与重定向方法相同。

    ii:绝对路径与Servlet重定向不同容器将相对于Web应用的根目录加参数生成完整的URL(即“/”根路径就是相对于虚拟路径)这是因为转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序

    。即:

    request.getRequestDispatcher(“/foo/stuff.do”)生成的URL是http://localhost/myApp/foo/stuff.do。

    3、  ◆ServletContext.getRequestDispatcher(String)

    参数只能指定为绝对路径生成的完整URL与HttpServletRequest.getRequestDispatcher(String)相同

    ##################################

    同理:

    JSP 提交表单给 Servlet 路径问题

    JSP页面提交表单给Servlet时,路径的写法要格外注意。

    例如在web.xml中注册如下的servlet:

    addStudent org.mytest.addStudent addStudent /servlet/addStudent

    假如说,你工程名字为HibernateApp3,JSP页面提交表单给servlet时有两种写法:

    1.相对路径: 

    2. 绝对路径: 

    或者 /servlet/addStudent” method=post>…

    注意:/代表根目录,如果路径是使用/开头,Tomcat就是webApp那个目录,如果你不是/开头代表你从当前工程的目录开始,例如:webApp/HibernateApp3/

    这一点非常重要,很多提交表单时发生的错误都是因为提交路径出错造成的。

    附、的路径如果是"/"开头,则表示相对于主机,如果不是则表示相对于当前请求

    综上所述:这里最最关键的要能清楚发出请求目的资源的请求是在服务器内部还是服务器外部:内部时,“/”就是项目的虚拟目录;外部时,“/”就是代表主机的根目录

  • 相关阅读:
    x264 参考帧管理原理:b_ref_reorder 数组变量
    Hbase批量删除数据
    【calcite】calcite实现SQL列级数据血缘 data lineage 查询
    超详细讲解Redis基础类型String增删改查及加减数据(带Java库源码)
    linux使用操作[1]
    Nginx和Apache的比较、同步异步、高并发
    03-Kafka之基本概念
    抓包一时爽,一直抓包一直爽,Fiddler移动端抓包,学完不要去干坏事
    计算机毕业设计 SSM+Vue婚纱摄影管理系统 婚纱预约系统 婚纱套餐预约系统 婚纱摄影订购系统Java Vue MySQL数据库 远程调试 代码讲解
    postgresql常用操作指令
  • 原文地址:https://blog.csdn.net/cheng5055251/article/details/127993370