在 SpringMVC 中提供了13个视图解析器,用于支持不同的视图技术。视图解析器最大 的特点是可以将控制器中处理请求的逻辑和视图中渲染实现解耦。InternalResourceViewResolver 是 SpringMVC 中默认的视图解析器,用来解析 JSP 视图。能将视图名映射为 JSP 文件
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewR esolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
bean>
作用域:“数据共享的范围”,也就是说数据能够在多大的范围内有效
对象名称 | 作用范围 |
---|---|
application | 整个应用都有效 |
session | 在当前会话中有效 |
request | 在当前请求中有效 |
page | 在当前页面有效 |
@RequestMapping("/login")
public String showLogin(HttpServletRequest request){
request.setAttribute("msg","Hello Lanh");
return "login";
}
SpringMVC 会为 Map 接口注入 BindingAwareModelMap 对象。该对象是由 Spring 提供的 一个实现了 Map 接口的对象。SpringMVC会把该对象中的数据放入到 HttpServletRequest 对 象中,其目的是为了解除控制器与容器的耦合。
@RequestMapping("/login")
public String showLogin(HttpServletRequest request, Map<String,String> map){
map.put("msg","Hello Lanh");
return "login";
}
在 SpringMVC 中提供了一个 Model 类型的接口,该接口定义了传递数据的基本行为。 如果 在处理请求的方法中指定了 Model 类型的参 数,那么 SpringMVC会注入一个 BindingAwareModelMap对象,并通过该对象把数据放入到 HttpServletRequest 对象中。
@RequestMapping("/login")
public String showLogin(HttpServletRequest request, Map<String,String> map, Model model){
model.addAttribute("msg","Hello Lanh");
return "login";
}
Session 作用域表示在当前会话中有效。在 SpringMVC 中对于 Session 作用域传值,只能 使用 HttpSession 对象来实现。对于 HttpSession 对象的获取方式有两种:
@RequestMapping("/login")
public String showLogin(HttpServletRequest request, Map<String,String> map, Model model,HttpSession session){
//HttpSession session = request.getSession();
session.setAttribute("msg","Hello Lanh");
return "login";
}
Application 作用域表示在整个应用范围都有效。在 SpringMVC 中对于 Application 作用域 传值,只能使用 ServletContext 对象来实现。但是对于该对象的获取方式不能直接向方法中 注入。需要通过 HttpServletRequest 或者 HttpSession 对象获取
@RequestMapping("/login")
public String showLogin(HttpServletRequest request, Map<String,String> map, Model model,HttpSession session){
//ServletContext servletContext = request.getSession().getServletContext();
ServletContext servletContext = session.getServletContext();
servletContext.setAttribute("msg","Hello Lanh");
return "login";
}
在 SpringMVC 中可以使用 HttpServletRequest 对象实现请求转发
@RequestMapping("/login")
public void showLogin(HttpServletRequest request, HttpServletResponse response)throws Exception{
request.setAttribute("msg","Lanh");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(re quest,response);
}
如果使用 forward 关键字实现请求转发跳转时,是通过 SpringMVC 的 DispatcherServlet 组件来完成的。不会执行视图解析器,所以需要指定请求跳转页面的完整 URI
@RequestMapping("/login")
public String showLogin(Model model){
model.addAttribute("msg","Bjsxt");
return "forward:/WEB-INF/jsp/login.jsp";
}
在 SpringMVC 的视图解析器中使用的是请求转发方式来实现页面跳转。可以在配置视图 解析器时指定视图的前置与后缀
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewR esolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
bean>
@RequestMapping("/login")
public String showLogin(Model model){
model.addAttribute("msg","Lanh");
return "login";
}
在 SpringMVC 需要使用 redirect 关键字实现重定向的跳转。在重定向跳转中是不经过视图解析器的
@RequestMapping("/redirectLogin")
public String redirectLogin(){
return "redirect:/page/login";
}