SpringMVC原理分析 | 数据处理:ModelAndView

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


重定向和转发

ModelAndView

设置ModelAndView对象,根据view的名称、视图解析器跳转到指定的页面

页面:{视图解析器前缀}+ viewName +{视图解析器后缀}

  • ​ springmvc-servlet.xml
    <!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/></bean>
  • Controller类
//实现了Controller类说明这就是控制器
public class ControllerTest1 implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {//创建模型和视图对象ModelAndView modelAndView = new ModelAndView();封装数据,向模型添加属性msg与值,可以在jsp页面取出、渲染modelAndView.addObject("msg","ControllerTest1");//视图跳转modelAndView.setViewName("test");//返回视图模型对象return modelAndView;}
}

ServletAPI

设置ServletAPI,不需要视图解析器

通过HttpServletResponse进行输出、重定向、转发

@Controller
public class ModelTest1 {@RequestMapping("/m1/t1")public String test(HttpServletRequest request, HttpServletResponse response){HttpSession session = request.getSession();System.out.println(session.getId());return "test";}
}

SpringMVC

通过SpringMVC实现转发和重定向,不需要视图解析器

  • 转发
@Controller
public class ModelTest1 {@RequestMapping("/m1/t1")public String test(Model model){//转发model.addAttribute("msg","ModelTest");return "/WEB-INF/jsp/test.jsp";//return "forward:/WEB-INF/jsp/test.jsp";}
}
  • 重定向
@Controller
public class ModelTest1 {@RequestMapping("/m1/t1")public String test(Model model){//重定向model.addAttribute("msg","ModelTest");return "redirect:/index.jsp";}
}

数据处理

接受请求参数及数据回显,处理提交数据

处理提交数据

  • 提交的域名称和处理方法的参数名一致
@Controller
@RequestMapping("/user")
public class UserController {@GetMapping("/t1")public String test(String name, Model model) {//接受前端参数System.out.println("接收到前端的参数为:" + name);//将放回结果传递给前端model.addAttribute("msg",name);//跳转视图return "test";}
}
  • 提交的域名称和处理方法的参数名不一致
@RequestParam("username")
@Controller
@RequestMapping("/user")
public class UserController {@GetMapping("/t1")public String test(@RequestParam("username") String name, Model model) {//接受前端参数System.out.println("接收到前端的参数为:" + name);//将放回结果传递给前端model.addAttribute("msg",name);//跳转视图return "test";}
}
  • 提交是一个对象(参数名和对象名需要一致,否则返回Null)
  • User类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private int id;private String name;private int age;
}
  • UserController类
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/t2")public String test2(User user){System.out.println(user);return "test";}}
//输出结果:User(id=1, name=weishuo, age=18)

数据显示到前端

ModelAndView

//实现了Controller类说明这就是控制器
public class ControllerTest1 implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {//创建模型和视图对象ModelAndView modelAndView = new ModelAndView();封装数据,向模型添加属性msg与值,可以在jsp页面取出、渲染modelAndView.addObject("msg","ControllerTest1");//视图跳转modelAndView.setViewName("test");//返回视图模型对象return modelAndView;}
}

Model

@Controller
@RequestMapping("/user")
public class UserController {@GetMapping("/t1")public String test(@RequestParam("username") String name, Model model) {//接受前端参数System.out.println("接收到前端的参数为:" + name);//将放回结果传递给前端model.addAttribute("msg",name);//跳转视图return "test";}
}

ModelMap

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/t3")public String test3(ModelMap map){map.addAttribute("msg","HELLO ModelMap");return "test";}}

总结

  • Model 只有寥宴几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解
  • ModelMap 继承了 LinkedMap,除了实现了自身的一些方法,同样的继承LinkedMap 的方法和特性
  • ModelAndview 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转

过滤器解决乱码

Javaweb过滤器

  • EncodingController类
@Controller
public class EncodingController {@GetMapping("/e/t1")public String test1(String name, Model model, HttpServletRequest request) throws UnsupportedEncodingException {request.setCharacterEncoding("utf-8");System.out.println(name);model.addAttribute("msg",name);return "test";}
}
  • EncodingFilter过滤器
public class EncodingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setCharacterEncoding("utf-8");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}
}
  • web.xml配置过滤器
<filter><filter-name>encoding</filter-name><filter-class>com.wei.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping><filter-name>encoding</filter-name><url-pattern>/</url-pattern>
</filter-mapping>

SpringMVC过滤器

SpringMVC中提供了过滤器,可以在web.xml中配置

  • EncodingController类
@Controller
public class EncodingController {@RequestMapping("/e/t1")public String test1(String name, Model model, HttpServletRequest request) throws UnsupportedEncodingException {request.setCharacterEncoding("utf-8");System.out.println(name);model.addAttribute("msg",name);return "test";}
}
  • web.xml配置SpringMVC乱码过滤器
<!--配置SpringMVC乱码过滤器-->
<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14567.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于matlab对于未校准立体图像校正(附源码)

一、前言 此示例说明如何计算两个未校准图像的校正&#xff0c;其中相机内禀函数未知。 立体图像校正将图像投影到公共图像平面上&#xff0c;以使相应的点具有相同的行坐标。此过程对于立体视觉很有用&#xff0c;因为 2-D 立体对应问题被简化为 1-D 问题。例如&#xff0c;…

网络应用基础ENSP环境的安装(NETBASE第三课)

网络应用基础ENSP环境的安装(NETBASE第三课) eNSP(Enterprise Network Simulation Platform)是一款由华为提供的、可扩展的、图形化操作的网络仿真工具平台&#xff0c;主要对企业网络路由器、交换机进行软件仿真&#xff0c;完美呈现真实设备实景&#xff0c;支持大型网络模拟…

vue3+pinia用户信息持久缓存(token)的问题

vue3pinia用户信息持久缓存&#xff08;token)的问题 对博主来说&#xff0c;这是个相当复杂的问题。 当初在使用vue2vuex进行用户信息持久登录时&#xff0c;写了不下3篇博客&#xff0c;确实是解决了问题&#xff0c;博客链接如下 vue存储和使用后端传递过来的tokenvue中对…

抖音短视频矩阵管理系统源码开发部署(开源定制)

一、什么是短视频矩阵管理系统&#xff1f; 短视频矩阵管理系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案&#xff0c;具体包含&#xff1a;点赞关注评论主动私信 &#xff0c;评论区回复&#xff0c;自动潜客户挖掘&#xff0c;矩阵号营销…

Maven高级(四)--私服

一.作用 我们所拆分的模块是可以在同一个公司各个项目组之间的项目组之间进行资源共享的&#xff0c;这就需要Maven的私服来实现。 二.场景 两个项目组之间如何基于私服进行资源的共享的呢&#xff1f; 例如A开发了一个模块tlias-utils,B团队进行项目开发&#xff0c;要想使用…

身高排队,不是你想的那么简单——力扣“按身高排序”题解分析

本篇博客会讲解力扣“2418. 按身高排序”的解题思路&#xff0c;这是题目链接。 想要排序身高数组是非常简单的。我们在对身高数组进行排序时&#xff0c;会进行一些操作&#xff0c;比如交换2个元素等等。本题中&#xff0c;相当于我们要“记住”排序身高数组中进行了哪些操作…

2023校招,2024校招,社招Shein,大量HC,使用内推码直达,流程快速

广州&#xff0c;深圳&#xff0c;南京&#xff0c;大量开发岗位&#xff0c;包含Java开发岗&#xff0c;前端开发岗大数据开发岗位&#xff0c;产品岗位&#xff0c;测试岗位等等&#xff0c;大量hc&#xff0c;欢迎大家投递Shein&#xff0c;打造全球化的快时尚跨境电商品牌

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 4 日论文合集)

文章目录 一、分割|语义相关(18篇)1.1 TomatoDIFF: On-plant Tomato Segmentation with Denoising Diffusion Models1.2 CGAM: Click-Guided Attention Module for Interactive Pathology Image Segmentation via Backpropagating Refinement1.3 RefSAM: Efficiently Adapting …

Pico版节奏光剑简单制作

视频教程参考&#xff1a;Pico VR Neo3开发实战教程&#xff08;1&#xff09;——节奏光剑&#xff0c;舞台灯效_哔哩哔哩_bilibili 1、新建项目和pico配置 插件导入 找到下载的pico SDK 选择json文件&#xff0c;点击即可导入 启用插件 在 Project Settings 窗口中&#xf…

Spring AOP讲解及实例

Aop面向切面编程 文章目录 Aop面向切面编程什么是AOPAOP术语Spring AOP 的使用导入依赖编写切面类切面定义语法小细节输出日志成功 什么是AOP AOP&#xff1a;&#xff08;Aspect Oriented Programming&#xff09;面向切面编程&#xff0c;和OOP&#xff08;Object Oriented …

Vue3 网络请求——axios 高级用法之 axios 拦截器实战与并发请求

文章目录 &#x1f4cb;前言&#x1f3af;关于拦截器&#x1f3af;项目创建&#x1f3af;代码分析&#x1f3af;补充&#xff1a;并发请求&#x1f9e9;axios.all() 和 Promise.all() 的区别 &#x1f4dd;最后 &#x1f4cb;前言 Axios 是一个流行的基于 Promise 的 HTTP 客户…

设计模式3:单例模式:静态内部类模式是怎么保证单例且线程安全的?

上篇文章&#xff1a;设计模式3&#xff1a;单例模式&#xff1a;静态内部类单例模式简单测试了静态内部类单例模式&#xff0c;确实只生成了一个实例。我们继续深入理解。 静态变量什么时候被初始化&#xff1f; public class Manager {private static class ManagerHolder …