当前位置:文档之家› SSM开发实战教程(Spring+Spring MVC+Mybatis) 第11章 Spring MVC关键技术

SSM开发实战教程(Spring+Spring MVC+Mybatis) 第11章 Spring MVC关键技术


关键代码
@RequestMapping("/doregister.do") public ModelAndView doRegister(User user){ ModelAndView mv=new ModelAndView(); mv.addObject("user",user); mv.setViewName("forward:second.do"); return mv; }
当处理器方法返回String 时,该String 即为要跳转的 视图。必须在其前面加上前辍 forward:,显式的指 定跳转方式为请求转发。视图解析器将不会对其进 行前辍与后辍的拼接,该String中的路径须是完整路径。
请求转发的目标资源无论是一个页面,还是一个 Controller,用法一样。
@RequestMapping("/second.do") public ModelAndView doSecond(User user){
ModelAndView mv=new ModelAndView(); mv.addObject("user",user); mv.setViewName("forward:/WEBINF/jsp/info.jsp"); return mv; }
user);
request.setAttribute("user",
return "forward:/WEBINF/jsp/info.jsp"; }
注意:这种情况不能使用ModelAndView来传递数据, 但可以使用HttpServletRequest等来传递数据。
11.1.4 请求重定向到其他页面
INF/jsp/info.jsp"); return mv;
}
11.1.2 请求转发到其他控制器方法
当前控制器的处理方法处理完毕后也可不返回视图, 而是转发给下一个控制器方法继续处理。
项目案例:用户注册成功后,转发给其他方法,由其他 方法返回视图显示当前用户的基本信息。(项目源码 见本书配套源码:第11章/转发与重定向/springmvc18)
项目案例:用户注册完毕后,显示用户的注册信息。 (项目源码见本书配套源码:第11章/转发与重定向
/springmvc17)
关键代码
@RequestMapping("/doregister.do") public ModelAndView doRegister(User user){ ModelAndView mv=new ModelAndView(); mv.addObject("user",user); mv.setViewName("forward:/WEB-
SSM开发实战教程
第11章 Spring MVC关键技术
11.1 转发与重定向
当处理器完成请求处理后向其它资源进行跳转时, 有两种跳转方式:请求转发与重定向。根据跳转的 资源类型,分为两类:跳转到页面与跳转到其它处 理器。请求转发的页面,可以是 WEB-INF 中页面, 但重定向的页面不能为 WEB-INF中的页面的,因为 重定向相当于用户重新发出一次请求,而用户是不 可以直接访问 WEB-INF 中的资源。
在重定向时,请求参数不能通过HttpServletRequest 向目标资源中传递。可以通过以下方式之一来传递 请求参数。
一、 通过ModelAndView中的Model携带参数 当ModelAndView中的Model 存入数据后,视图
解析器InternalResourceViewResolver 会将map中的 key 与value,以请求参数的形式放到请求的URL后。 注意事项:
项目案例:用户注册成功后,转发给其他方法,由其他方 法返回视图显示当前用户的基本信息。(项目源码见 本书配套源码:第11章/转发与重定向/springmvc19)
关键代码
@RequestMapping("/doregister.do")
public String doRegister(User user,HttpServletRequest request){
11.1.1 请求转发到其他页面
当处理器方法返回ModelAndView 时,跳转到指定的 ViewName,默认情况下使用的是请求转发,当然也 可显式的进行请求转发。此时,需在setViewName() 指定的视图前添加forward关键字,一旦添加了 forward关键字,控制器方法返回的视图名称就不会 再与视图解析器中的前辍与后辍进行拼接,所以必 须写出相对于项目根的完整路径才能返回正确的视 图。
(3).重定向的页面不能是/WEB-INF下的页面。因为重定向 相当于客户端发出一次新的请求,而客户端是不可以请求 /WEB-INF下的资源的。
(1).放入到Model中的value,只能是基本数据类型与 String, 不能是自定义类型的对象数据。原因是视图解析器会将 Map的value放入到URL后作为请求参数传递出去,任何类 型的value,都会变为String。
(2).重定向的面页中是无法从request 中读取数据的。但 由于map中的key与value,以请求参数的形式放到了请求的 URL后,所以,页面可以通过EL表达式中的请求参数param 读取。
可以发现,参数仍然可以在两个方法之间传递,第一个 方法把参数存进ModelAndView,第二个方法用同名 形式参数接收。
mv.setViewName("forward:");这行代码实 现转发到另一个方法second.do继续处理。
11.1.3 返回String时的请求转发
当通过请求转发跳转到目标资源(页面或Controller) 时,若需要目标资源传递数据,可以使用
HttpRequestServlet,HttpSession,还可以将数据存 放于ModelAndView中的Model中。目标页面则通过 EL 表达式来访问该数据。下面案例演示使用 ModelAndView的情形。
相关主题