Servlet中转发重定向的路径问题和表单提交的路径问题Servlet转发对象(RequestDispatcher)的获取方式:一种是通过HttpServletRequest的getRequestDispatcher()方法获取,另一种是通过getRequestDispatcher()方法获取的Servlet上下文。Servlet重定向的方法只有一种:HttpServletResponse的sendRedirect()方法。这三个方法的参数都是URL形式的字符串,只是在使用相对路径还是绝对路径上有所区别。2、请求转发和响应重定向中路径参数的区别假设请求是通过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/东西。做。ii:绝对路径:response.sendRedirect("/foo/stuff.do"),容器建立一个相对于web应用本身加上参数的完整URL,因为重定向response.sendRedirect("")是由服务器发送到客户端A请求头信息,客户端再次请求服务器,请求是在服务器外部进行的,即完整的url为-http://localhost/foo/stuff.do。iii:其他网络应用: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:
