SpringMvc系列笔记五——SpringMVC 处理响应

SpringMVC 处理响应

配置视图解析器

在 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>

SpringMVC 作用域传值

作用域:“数据共享的范围”,也就是说数据能够在多大的范围内有效

对象名称 作用范围
application 整个应用都有效
session 在当前会话中有效
request 在当前请求中有效
page 在当前页面有效

Request 作用域传值

使用原生的 HttpServletRequest
@RequestMapping("/login") 
public String showLogin(HttpServletRequest request){ 
	request.setAttribute("msg","Hello Lanh"); 
	return "login"; 
}
使用 Map 集合

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"; 
}
使用 Model 接口

在 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 作用域传值

Session 作用域表示在当前会话中有效。在 SpringMVC 中对于 Session 作用域传值,只能 使用 HttpSession 对象来实现。对于 HttpSession 对象的获取方式有两种:

  • 通过参数注入方式获取HttpSession对象
  • 通过注入HttpServletRequest对象,并通过该对象获取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 作用域传值

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 的响应方式

请求转发

使用 Servlet API

在 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 关键字实现请求转发跳转

如果使用 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"; 
}

你可能感兴趣的:(#,SpringMvc,SSM框架,java,spring,前端)