配置视图解析器
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对象
- Model:向request域中设置数据。
- 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";
}