3.1.1 使用参数为原生的HttpServletRequest
一、配置视图解析器
SpringMVC默认情况下会在控制器执行完成后跳转到视图页面,视图解析器能找到相应的视图,之前的404异常就是由于没有配置视图解析器导致找不到视图。在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>
二、控制器方法的返回值
2.1 返回值为void
2.1.1 控制器方法
/**
* SpringMVC处理响应——控制器方法(根据返回值)
*/
// 路径是helloMVC,方法执行完后会跳转到/helloMVC.jsp
@RequestMapping("helloMVC")
public void helloMVC(){
System.out.println("hello SpringMVC!");
}
2.1.2 jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>MVC</title>
</head>
<body>
<h1>欢迎来到SpringMVC!</h1>
</body>
</html>
2.1.3 测试结果
2.2 返回值为String
2.2.1 控制器方法
// 返回值是String,此时会跳转到名字是 前缀+返回值+后缀 的jsp页面
@RequestMapping("c2/hello1")
public String helloMVC1(){
System.out.println("Hello SpringMVC!");
return "helloMVC";
}
2.2.2 测试结果
2.3 返回值为ModelAndView
这是SpringMVC提供的对象,该对象可以向request域设置数据并指定跳转的页面。该对象中包含Model对象和View对象。
2.3.1 控制器方法
// 返回值为ModelAndView
@RequestMapping("/c2/hello2")
public ModelAndView useMAV(){
System.out.println("返回值类型为ModelAndView");
// 1.创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
// 2.获取Model对象,本质是一个Map
Map<String,Object> model = modelAndView.getModel();
// 3.使用Model对象向request域设置数据
model.put("username","黄庆禧");
// 4.使用view对象设置跳转的路径
modelAndView.setViewName("lyl-HQX");
return modelAndView;
}
2.3.2 JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>lyl-HQX</title>
</head>
<body>
<h1>name: 你好!${requestScope.name}</h1>
<h1>username: 你好!${requestScope.username}</h1>
<h1>request-Map 你好!${requestScope.usernameMap}</h1>
<h1>session 地址是:${sessionScope.address}</h1>
<h1>context 年龄是:${applicationScope.age}</h1>
</body>
</html>
2.3.3 测试结果
三、某些会话对象设置数据
当控制器返回值为ModelAndView时我们可以向request域设置数据,我们还有以下方法可以向request域设置数据:
3.1 request域设置数据
3.1.1 使用参数为原生的HttpServletRequest
控制器方法
/**
* SpringMVC处理响应-request域
*/
// 使用原生的HttpServletRequest
@RequestMapping("/c2/hello3")
public String setRequestModel(HttpServletRequest request){
request.setAttribute("username","会洗碗的CV工程师");
return "lyl-HQX";
}
3.1.2 使用参数为Model和ModelMap
SpringMVC提供了Model接口和ModelMap类,控制器方法添加这两个类型的参数,使用该参数设置数据,该数据就会存到request域中。
控制器方法
//使用Model、ModelMap
@RequestMapping("/c2/hello4")
public String setRequestModel2(Model model, ModelMap modelMap){
// 使用Model将数据存入request域
model.addAttribute("username","LYL");
// 使用ModelMap将数据传入request域
modelMap.addAttribute("usernameMap","HQX");
return "lyl-HQX";
}
3.1.3 使用参数为Map集合
Model接口底层就是一个Map集合,我们可以给控制器方法设置Map类型的参数,向Map中添加键值对,数据也会存到request域中。
控制器方法
// 使用Map集合
@RequestMapping("/c2/hello5")
public String setRequestModel3(Map map){
map.put("username","程序员");
map.put("usernameMap","程序员");
return "lyl-HQX";
}
3.2 session域设置数据
Session作用域表示在当前会话中有效。在SpringMVC中对于Session作用域传值,只能使用HttpSession对象来实现。
3.2.1 控制器方法
/**
* SpringMVC处理响应-session域设置数据
*/
@RequestMapping("/c2/hello6")
public String setSessionModel(HttpSession session){
session.setAttribute("address","北京");
return "lyl-HQX";
}
3.2.2 测试结果
3.3 context域设置数据
context作用域表示在整个应用范围都有效。在SpringMVC中对context作用域传值,只能使用ServletContext对象来实现。但是该对象不能直接注入到方法参数中,需要通过HttpSession对象获取。
3.2.1 控制器方法
/**
* SpringMVC处理响应-context域设置数据
*/
@RequestMapping("/c2/hello7")
public String setContextModel(HttpSession session){
ServletContext servletContext = session.getServletContext();
servletContext.setAttribute("age",10);
return "lyl-HQX";
}
3.2.2 测试结果
OK,确实成功获取到了。
四、请求转发&重定向
之前的案例,我们发现request域中的值可以传到jsp页面中,也就是通过视图解析器跳转到视图的底层是请求转发。
如果我们跳转时不想使用视图解析器,可以使用原生HttpServletRequest进行请求转发或HttpServletResponse进行重定向:
4.1 原生请求转发重定向写法
4.1.1 重定向控制器方法
/**
* SpringMVC处理响应-请求转发&重定向
*/
@RequestMapping("/c2/hello8")
public void myForward1(HttpServletRequest request, HttpServletResponse response) throws Exception{
request.setAttribute("name","程序员");
// 请求转发
//request.getRequestDispatcher("/c2/hello9").forward(request,response);
// 原生重定向
response.sendRedirect("/c2/hello9");
}
@RequestMapping("/c2/hello9")
public void myForward2(HttpServletRequest request){
System.out.println("hello");
System.out.println(request.getAttribute("name"));
}
4.1.2 重定向测试结果
OK,可以看得到确实重定向去了。注意看,这里重定向出来后是无法获取request域的属性值的,待会试一下请求转发可不可以。 重定向地址栏会发生变化,而请求转发地址栏是不会变化的。
4.1.3 请求转发测试结果
4.2 springmvc提供的请求转发重定向写法
// SpringMVC提供一种关于重定向和请求转发更为简单的写法
@RequestMapping("/c2/hello10")
public String myForward3(HttpServletRequest request){
request.setAttribute("name","程序员");
// 请求转发
return "forward:/c2/hello9";
// 重定向
//return "redirect:/c2/hello9";
}
往期专栏&文章相关导读
大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。
1. Maven系列专栏文章
Maven系列专栏 | Maven工程开发 |
Maven聚合开发【实例详解—5555字】 |
2. Mybatis系列专栏文章
3. Spring系列专栏文章
4. Spring MVC系列专栏文章
原文地址:https://blog.csdn.net/qq_53317005/article/details/130448697
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_49422.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!