目录

一、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 处理响应相关推荐

  1. 如何通过SpringMVC框架响应JSON数据

    1. 通过SpringMVC框架响应JSON数据 在SpringMVC框架(含SpringBoot框架)中,当处理请求的方法之前添加了@ResponseBody后,或在控制器类之前使用的是@RestC ...

  2. SpringMVC自定义响应的HTTP状态码

    SpringMVC自定义响应的HTTP状态码有两种方法,一种是在返回方法上面加上@ResponseStatus注解,另一个种是在方法内部使用response.setStatus()方法. 注解方式: ...

  3. SpringMVC的响应JSON数据和过滤静态资源

    1.过滤静态资源 @ResponseBody注解作用 作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端. 当方法上面没有写ResponseBody,底层会 ...

  4. SpringMVC的响应数据和结果视图

    响应数据之返回值是String类型 方法执行完,需要跳转到指定的页面,最终给用户一个响应.springmvc提供了很多种响应的方式. controller 方法返回字符串可以指定逻辑视图名,通过视图解 ...

  5. SpringMVC(三)——响应

    SpringMVC响应 第一章:数据处理及跳转 1. 结果跳转方式 ①.ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . < ...

  6. springmvc之响应类型,string,void,ModelAndView

    目录 响应之返回值是String类型 响应之返回值是void类型 响应之返回值是ModelAndView类型 响应之返回值是String类型 springmvc.xml需要先配置好视图解析器的jsp文 ...

  7. Gin 框架学习笔记(03)— 输出响应与渲染

    在 Gin 框架中,对 HTTP 请求可以很方便有多种不同形式的响应.比如响应为 JSON . XML 或者是 HTML 等. ​ Context 的以下方法在 Gin 框架中把内容序列化为不同类型写 ...

  8. 【SSM - SpringMVC篇】03 - SpringMVC的参数绑定 - 参数自动绑定 - javabean对象参数绑 - 嵌套bean参数绑定

    文章目录 SpringMVC的参数绑定 1 传统方式进行参数传递 2 通过SpringMVC的参数绑定实现[***用这个就行] 2.1 SpringMVC的基本数据类型的参数绑定 2.1.1 方法形式 ...

  9. 06_03_SpringMVC 任务一: SpringMVC基本应用(SpringMVC请求与响应,进行日期转换工具类DateConverter)

    任务一: SpringMVC基本应用 课程任务主要内容: SpringMVC简介 SpringMVC组件概述 SpringMVC请求 SpringMVC响应 静态资源开启 一 SpringMVC简介 ...

最新文章

  1. Buck-Boost变换
  2. Linux 命令之 df -- 显示磁盘空间使用情况
  3. npm run build 报错 versionRequirement: packageConfig.engines.node 'node' of undefined
  4. Github(5)-开源开发-常见错误
  5. 《Java8实战》笔记(11):CompletableFuture-组合式异步编程
  6. AI 安全在阿里业务中的实践,你了解吗?
  7. 多线程爬虫191023
  8. 【Python】循环的拓展
  9. SpringBoot使用RequestBodyAdvice进行统一参数处理
  10. 12linux目录结构13Linux目录详解
  11. Flutter基础—质感设计
  12. mac下解决中文乱码的问题
  13. 外部库依赖以及 编译
  14. 如何删除“运行”里面的内容
  15. Mac彻底卸载搜狗输入法,看这一篇就够了
  16. 安利一款SOLIDWORKS插件,可一键帮你分离配置那种!
  17. 古城钟楼的微博报时是如何实现的?[科普贴]
  18. 计算机中数字信号定义,数字信号处理
  19. 经典书籍--经济 投资 管理 修身 谋略 自传
  20. linux u盘显示只读文件,解决linux下U盘文件只读的问题

热门文章

  1. 按Enter键起到Tab键的效果
  2. 蚂蚁全媒体中心总编刘鑫炜:如何破解碎片化时代的营销困境
  3. win11 安装Ubuntu加可视化桌面(最新保姆级教程)
  4. 在java中如何产生随机数
  5. 测试UDP端口的方法
  6. PX4无人机-Gazebo仿真实现移动物体的跟踪
  7. Linux 常用命令 — 修改密码
  8. 一文带你了解Hive【详细介绍】Hive与传统数据库有什么区别?
  9. 【Android -- 写作工具】Markdown 图片
  10. 学习51单片机串口工作方式及应用