03 SpringMVC 处理响应
目录
一、SpringMVC处理响应_配置视图解析器
二、SpringMVC处理响应_控制器方法的返回值
1.控制器方法的返回值为void
2.控制器方法的返回值为String
3.返回值为ModelAndView
三、SpringMVC处理响应_向request域设置数据
1.使用原生的HttpServletRequest向request域设置数据
2.使用Model、ModelMap向request域设置数据
3. 使用Map集合向request域设置数据
四、SpringMVC处理响应_向session域设置数据
五、SpringMVC处理响应_向context域设置数据
六、SpringMVC处理响应_请求转发&重定向
七、知识点整理:
一、SpringMVC处理响应_配置视图解析器
SpringMVC默认情况下会在控制器执行完成后跳转到视图页面,视图解析器能找到相应的视图,之前的404异常就是由于没有配置视图解析器导致找不到视图。
在 SpringMVC 中提供了 13 个视图解析器,用于支持不同的视图技术。其中InternalResourceViewResolver 是SpringMVC的默认视图解析器,用来解析JSP视图。在配置文件springmvc.xml中配置视图解析器
<!-- 视图解析器--><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 视图前缀, value="/"表示在webapp目录下,如果.jsp在WEB-INF目录下,value="/WEB-INF/"--><property name="prefix" value="/" /><!-- 视图后缀,value=".jsp"表示处理后缀为.jsp的文件--><property name="suffix" value=".jsp" /></bean>
二、SpringMVC处理响应_控制器方法的返回值
我们可以通过控制器方法的返回值设置跳转的视图,控制器方法支持以下返回值类型:
1.控制器方法的返回值为void
此时会跳转到名字是 前缀(/) + 方法路径名 + 后缀(.jsp ) 的 jsp 页面(1)在controller层编写控制器方法
@Controller public class MyController2 {// 该控制器的访问路径为/helloMVC,方法执行完后会跳转到helloMVC.jsp@RequestMapping("/helloMVC")public void helloMVC() {System.out.println("hello,SpringMVC");} }
(2)在webapp目录下编写helloMVC.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>MVC</title> </head> <body> <h1>welcome to SpringMVC</h1> </body> </html>
(3)请求路径:http://localhost:8080/helloMVC
(4)测试结果
(5)总结:控制器方法的返回值为void这种类型不方便,因为要编写与方法路径名相同的jsp页面,即方法路径名为/helloMVC,那么就得编写一个helloMVC.jsp页面能跳转成功。(不建议使用)
2.控制器方法的返回值为String
此时会跳转到名字是 前缀(/)+返回值+后缀(.jsp) 的jsp页面
(1)在controller层编写控制器方法
//方法返回值为String@RequestMapping("/c2/hello1")public String helloMVC1() {System.out.println("hello,SpringMVC");//方法执行完后会跳转到webapp下的helloMVC.jsp页面return "helloMVC";}
(2)请求路径:http://localhost:8080/c2/hello1
(3)测试结果
(4)总结:控制器方法的返回值为String类型比较方便,直接return返回任意的jsp页面,可以随意指定,不会像void类型只能跳转到对应路径名的jsp页面。
3.返回值为ModelAndView
这是 SpringMVC 提供的对象,该对象可以向 request 域设置数据并指定跳转的页面。该对象中包含Model 对象和 View 对象。Model :向 request 域中设置数据。View :指定跳转的页面。(1) 在controller层编写控制器方法//方法返回值为ModelAndView@RequestMapping("/c2/hello2")public ModelAndView useMAV() {System.out.println("返回值类型为ModelAndView");//1.创建ModelAndView对象ModelAndView modelAndView = new ModelAndView();//2.获取Model对象,本质是一个MapMap<String, Object> model = modelAndView.getModel();//3.使用Model对象向request域设置数据model.put("name","程序员");//4.使用View对象设置跳转的路径为/baizhan.jspmodelAndView.setViewName("baizhan");return modelAndView;}
(2)在webapp目录下编写baizhan.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head><title>程序员</title> </head> <body> <h1>你好!${requestScope.name}</h1> </body> </html>
(3)测试结果:
(4)总结:View指定跳转到了baizhan.jsp视图,model向request域中设置了数据name。
三、SpringMVC处理响应_向request域设置数据
当控制器返回值为ModelAndView时我们可以向request域设置数据,我们还有以下方法可以向request域设置数据:baizhan.jsp页面<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head><title>程序员</title> </head> <body> <h1>你好!${requestScope.name}</h1> </body> </html>
1.使用原生的HttpServletRequest向request域设置数据
//使用原生的HttpServletRequest向request域设置数据@RequestMapping("/c2/hello3")public String setRequestModel(HttpServletRequest request){request.setAttribute("name","程序员");return "baizhan";}
测试结果:
2.使用Model、ModelMap向request域设置数据
SpringMVC提供了Model接口和ModelMap 类,控制器方法添加这两个类型的参数,使用该参数设置数据,该数据就会存到request 域中。//使用Model、ModelMap向request域设置数据@RequestMapping("/c2/hello4")public String setRequestModel2(Model model, ModelMap modelMap){//使用Model将数据存入request域 // model.addAttribute("name","尚学堂");//使用ModelMap将数据存入request域modelMap.addAttribute("name","尚学堂");return "baizhan";}
测试结果:
3. 使用Map集合向request域设置数据
Model 接口底层就是一个 Map 集合,我们可以给控制器方法设置Map类型的参数,向 Map 中添加键值对,数据也会存到 request 域中。
//使用Map集合向request域设置数据@RequestMapping("/c2/hello4")public String setRequestModel3(Map map){map.put("name","程序员");return "baizhan";}
测试结果:
四、SpringMVC处理响应_session域设置数据
Session作用域表示在当前会话中有效。在SpringMVC中对于Session作用域传值,只能使用HttpSession对象来实现。(1) 在controller层编写控制器方法
//向session域设置数据@RequestMapping("/c2/hello6")public String setSessionModel(HttpSession session){session.setAttribute("address","深圳");return "baizhan";}
(2)在webapp目录下编写baizhan.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head><title>程序员</title> </head> <body> <%--<h1>你好!${requestScope.name}</h1>--%> <h1>地址:${sessionScope.address}</h1> </body> </html>
(3)测试结果:
五、SpringMVC处理响应_向context域设置数据
context 作用域表示在整个应用范围都有效(context的对象的生命周期和作用域比较长,一般很少使用)。在 SpringMVC 中对context作用域传值,只能使用 ServletContext 对象来实现。但是该对象不能直接注入到方法参数中,需要通过HttpSession 对象获取。(1) 在controller层编写控制器方法
//向context域设置数据@RequestMapping("/c2/hello7")public String setContextModel(HttpSession session){ServletContext servletContext = session.getServletContext();servletContext.setAttribute("age",10);return "baizhan";}
(2)在webapp目录下编写baizhan.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head><title>程序员</title> </head> <body> <%--<h1>你好!${requestScope.name}</h1>--%> <h1>地址:${sessionScope.address}</h1> <h1>年龄:${applicationScope.age}</h1> </body> </html>
(3)测试结果:
六、SpringMVC处理响应_请求转发&重定向
之前的案例,我们发现request域中的值可以传到jsp页面中,也就是通过视图解析器跳转到视图的底层是请求转发。
如果我们跳转时不想使用视图解析器,可以使用原生HttpServletRequest进行请求转发或 HttpServletResponse 进行重定向://使用原生的HttpServletRequest进行请求转发@RequestMapping("c2/hello8")public void myForward1(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {request.setAttribute("name","程序员");//请求转发request.getRequestDispatcher("/c2/hello9").forward(request,response);//原生重定向 // response.sendRedirect("/c2/hello9");}@RequestMapping("c2/hello9")public void myForward2(HttpServletRequest request,HttpServletResponse response){System.out.println("hello");System.out.println(request.getAttribute("name"));}
SpringMVC还提供了一种更简单的请求转发forward和重定向redirect的写法://使用SpringMVC进行请求转发和重定向@RequestMapping("c2/hello10")public String myForward3(HttpServletRequest request){request.setAttribute("name","程序员");//请求转发 // return "forward:/c2/hello9";//重定向return "redirect:/c2/hello9";}
七、知识点整理:
1.SpringMVC默认视图解析器解析的是“JSP ”类型视图
2.配置SpringMVC视图解析器时,prefix配置视图前缀,suffix配置视图后缀
3.SpringMVC控制器方法返回值为void表示“跳转到方法路径名的视图”
4.SpringMVC控制器方法返回值为String类型表示“跳转到方法返回值的视图 ”
5.关于ModelAndView对象中,Model代表模型,View代表视图
6.向SpringMVC的Model对象设置数据时,数据存放在"request "中
7.在SpringMVC控制器中,可以使用“HttpServletRequest”、“Model”、“ModelMap”、“Map”类型的参数对象向request域设置数据
8.在SpringMVC控制器中,使用“HttpSession”类型的参数对象可以向session域设置数据
9.在SpringMVC控制器中,“通过使用 HttpSession 作为方法的参数,通过 HttpSession 获取 ServletContext 设置数据”向context域设置数据
10.SpringMVC提供的重定向写法为“return "redirect:视图路径" ”
11.SpringMVC提供的请求转发写法为“return "forward:视图路径" ”
03 SpringMVC 处理响应相关推荐
- 如何通过SpringMVC框架响应JSON数据
1. 通过SpringMVC框架响应JSON数据 在SpringMVC框架(含SpringBoot框架)中,当处理请求的方法之前添加了@ResponseBody后,或在控制器类之前使用的是@RestC ...
- SpringMVC自定义响应的HTTP状态码
SpringMVC自定义响应的HTTP状态码有两种方法,一种是在返回方法上面加上@ResponseStatus注解,另一个种是在方法内部使用response.setStatus()方法. 注解方式: ...
- SpringMVC的响应JSON数据和过滤静态资源
1.过滤静态资源 @ResponseBody注解作用 作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端. 当方法上面没有写ResponseBody,底层会 ...
- SpringMVC的响应数据和结果视图
响应数据之返回值是String类型 方法执行完,需要跳转到指定的页面,最终给用户一个响应.springmvc提供了很多种响应的方式. controller 方法返回字符串可以指定逻辑视图名,通过视图解 ...
- SpringMVC(三)——响应
SpringMVC响应 第一章:数据处理及跳转 1. 结果跳转方式 ①.ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . < ...
- springmvc之响应类型,string,void,ModelAndView
目录 响应之返回值是String类型 响应之返回值是void类型 响应之返回值是ModelAndView类型 响应之返回值是String类型 springmvc.xml需要先配置好视图解析器的jsp文 ...
- Gin 框架学习笔记(03)— 输出响应与渲染
在 Gin 框架中,对 HTTP 请求可以很方便有多种不同形式的响应.比如响应为 JSON . XML 或者是 HTML 等. Context 的以下方法在 Gin 框架中把内容序列化为不同类型写 ...
- 【SSM - SpringMVC篇】03 - SpringMVC的参数绑定 - 参数自动绑定 - javabean对象参数绑 - 嵌套bean参数绑定
文章目录 SpringMVC的参数绑定 1 传统方式进行参数传递 2 通过SpringMVC的参数绑定实现[***用这个就行] 2.1 SpringMVC的基本数据类型的参数绑定 2.1.1 方法形式 ...
- 06_03_SpringMVC 任务一: SpringMVC基本应用(SpringMVC请求与响应,进行日期转换工具类DateConverter)
任务一: SpringMVC基本应用 课程任务主要内容: SpringMVC简介 SpringMVC组件概述 SpringMVC请求 SpringMVC响应 静态资源开启 一 SpringMVC简介 ...
最新文章
- Buck-Boost变换
- Linux 命令之 df -- 显示磁盘空间使用情况
- npm run build 报错 versionRequirement: packageConfig.engines.node 'node' of undefined
- Github(5)-开源开发-常见错误
- 《Java8实战》笔记(11):CompletableFuture-组合式异步编程
- AI 安全在阿里业务中的实践,你了解吗?
- 多线程爬虫191023
- 【Python】循环的拓展
- SpringBoot使用RequestBodyAdvice进行统一参数处理
- 12linux目录结构13Linux目录详解
- Flutter基础—质感设计
- mac下解决中文乱码的问题
- 外部库依赖以及 编译
- 如何删除“运行”里面的内容
- Mac彻底卸载搜狗输入法,看这一篇就够了
- 安利一款SOLIDWORKS插件,可一键帮你分离配置那种!
- 古城钟楼的微博报时是如何实现的?[科普贴]
- 计算机中数字信号定义,数字信号处理
- 经典书籍--经济 投资 管理 修身 谋略 自传
- linux u盘显示只读文件,解决linux下U盘文件只读的问题