标签:http 方法 解析 dispatch 需要 mode 不能 基本使用 关键字
请求转发是一种在服务器内部的资源跳转方式。请求转发的特点是可以转发到本服务器内的所有路径的资源,浏览器地址栏路径不会发生变化,前端只发起一次请求,但后端转发后的资源可以返回给前端访问到。
在 servlet 中使用 getRequestDispatcher(xxx).forward(req, resp); 来进行请求转发,在 springmvc 中,返回 ModelAndView 类型或者直接返回 String 实际上就是请求转发。
示例:
@Controller public class ControllerTest01 { @RequestMapping(value = "/test.do") public ModelAndView doTest() { ModelAndView modelView = new ModelAndView(); modelView.addObject("name","张三"); modelView.addObject("age","22"); modelView.setViewName("/show.jsp"); //将转发至show.jsp //或者可以使用 forward 关键字: //modelView.setViewName("forward:/WEB-INF/view/show.jsp"); //使用 forward 关键字时,视图解析器将不起作用,需要写上完整的路径 return modelView; } }
直接返回 String 也可以做请求转发:
@Controller public class ControllerTest02 { @RequestMapping(value = "/returnStringTest.do") public String doTest() { //框架实际上是对视图执行forward操作 return "show1"; } }
重定向是发一个302的状态码给浏览器,浏览器会自动去请求跳转的网页,url 会发生改变。重定向时可以参数,但是参数不像请求转发一样,而是会拼接到转发后的 url 上,下一个请求并不能直接获取到上一个请求的参数,但可以通过 url 的参数获取到。
在 servlet 中使用 sendRedirect(url) 来进行重定向,在 springmvc 中,可以使用 redirect 关键字来进行重定向。
@Controller public class ControllerTest01 { @RequestMapping(value = "/test.do") public ModelAndView doTest() { ModelAndView modelView = new ModelAndView(); modelView.addObject("name","zhangsan"); modelView.addObject("age","22"); modelView.setViewName("redirect:/view/show.jsp"); //使用 forward 关键字时,视图解析器将不起作用,需要写上完整的路径 return modelView; } }
上面在浏览器重定向后请求的 url 将类似于:http://xxx/view/show.jsp?name=zhangsan&age=22。
重定向不能转发至 WEB-INF 下的资源,因为 WEB-INF 下的资源通过浏览器无法直接访问。
标签:http 方法 解析 dispatch 需要 mode 不能 基本使用 关键字
原文地址:https://www.cnblogs.com/wenxuehai/p/14861078.html