springMVC处理响应

89 阅读2分钟

配置视图解析器

springMVC默认情况下会在控制器执行完成后跳转到视图页面,视图解析器能找到相应视图.

在springMVC提供了13个视图解析器用于支持不同的试图技术,InternalResourceViewResolver是SpringMVC的默认视图解析器,用来解析JSP视图。

<!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <!-- 视图前缀 -->
   <property name="prefix" value="/" />
   <!-- 视图后缀 -->
   <property name="suffix" value=".jsp" />
</bean>

控制器方法的返回值

  • 返回值为void 此时会跳转到名字为前缀+方法路径名+后缀的jsp页面
  • 返回值为String(更常用) 此时会跳转到前缀+返回值+后缀的jsp页面
  • 返回值为ModelAndView 这是springMVC提供的对象,该对象可以给request域中设置数据并且跳转到指定页面,该对象中包含Model和View对象
  1. Model:向request域中设置数据。
  2. View:指定跳转的页面。 编写控制器方法

编写JSP页面

request设置数据

  • 使用原生的HttpServletRequest
  • 使用Model、ModelMap SpringMVC提供了Model接口和ModelMap类,控制器方法添加这两个类型的参数,使用该参数设置数据,该数据就会存到request域中。
@RequestMapping("/c2/hello4")
public String setRequestModel2(Model model,ModelMap modelMap){
   // 使用Model将数据存入request域
   // model.addAttribute("username","张迪");
   // 使用ModelMap将数据存入request域
   modelMap.addAttribute("username","张迪");
   return "zhangdi ";
}
  • 使用Map集合 Model接口底层就是一个Map集合,我们可以给控制器方法设置Map类型的参数,向Map中添加键值对,数据也会存到request域中。
@RequestMapping("/c2/hello5")
public String setRequestModel3(Map map){
   map.put("username","张迪");
   return "zhangdi";
}

Session域设置数据

Session作用域表示在当前会话中有效。在SpringMVC中对于Session作用域传值,只能使用HttpSession对象来实现。

  • 编写控制器方法
@RequestMapping("/c2/hello6")
public String setSeesionModel(HttpSession session){
   session.setAttribute("address","北京");
   return "baizhan";
}
  • 编写jsp页面
<%@ page

contentType="text/html;charset=UTF-8" language="java"%>
<html>
   <head>
       <title>百战</title>
   </head>
   <body>
      <h1>你好!${requestScope.name}</h1>
      <h1>地址是!${sessionScope.address}</h1>
   </body>
</html>

context域设置数据

context作用域表示在整个应用范围都有效。在SpringMVC中对context作用域传值,只能使用ServletContext对象来实现。但是该对象不能直接注入到方法参数中,需要通过HttpSession对象获取。

  • 编写控制器方法
@RequestMapping("/c2/hello7")
public String setContextModel(HttpSession session){
   ServletContext servletContext = session.getServletContext();
   servletContext.setAttribute("age",10);
   return "baizhan";
}
  • 编写JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
   <head>
       <title>百战</title>
   </head>
   <body>
       <h1>你好!${requestScope.name}</h1>
       <h1>地址是!${sessionScope.address}</h1>
       <h1>年纪是!${applicationScope.age}</h1
   </body>
</html>

请求战法,重定向

request域中的值可以传到jsp页面中,也就是通过视图解析器跳转到视图的底层是请求转发。

SpringMVC还提供了一种更简单的请求转发和重定向的写法:此方法不经过视图解析器

@RequestMapping("/c2/hello10")
public String myForward3(HttpServletRequest request){
   request.setAttribute("name","尚学堂");
   // 请求转发
   return "forward:/c2/hello9";
   // 重定向
   // return "redirect:/c2/hello9";
}