首页 > 其他分享 >spring:九、springmvc响应

spring:九、springmvc响应

时间:2024-05-31 20:58:00浏览次数:17  
标签:redirect RequestMapping springmvc spring 视图 响应 forward ModelAndView public

资源解析器(springmvc.xml)

    <!--内部资源视图解析器-->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

资源:

1.返回String

    @RequestMapping("index1")
    public String index1(){
        return "index";
    }

2、forward跟redirect

forward:请求转发

    @RequestMapping("/forward")
    public String forward(){
        return "forward:/WEB-INF/page/index2.jsp";
    }

redirect:请求重定向

    @RequestMapping("/redirect")
    public String redirect(){
        return "redirect:/index1";
    }

重定向到index1

forward跟redirect区别:

最明显的区别是,url是否发生变化,forward请求转发不会发生变化,redirect请求从定向会发生变化。

  • forward 是服务器内部的行为,客户端不知道请求已经被转发;redirect 是客户端的行为,涉及两个独立的请求。
  • forward 可以共享请求和响应对象的数据;redirect 不能直接共享数据,但可以通过URL参数或会话传递数据。
  • forward 不会在浏览器历史记录中留下新的条目;redirect 会。
  • forward 通常不会触发浏览器缓存机制;redirect 可能会。
  • 在某些情况下,redirect 可能比 forward 更安全。

3、返回void

    @RequestMapping("/writer")
    public void writer(HttpServletResponse response) throws IOException {
        /*解决响应数据中文乱码问题*/
        response.setContentType("text/html;charset=utf8");
        PrintWriter writer = response.getWriter();
        writer.write("中文 response.getWriter()返回");
        writer.close();
    }

4、ModelAndView和model

ModelAndView

    @RequestMapping("/modelAndView")
    public ModelAndView modelAndView(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("name","王珅艺");
        modelAndView.setViewName("/mav");
        return modelAndView;
    }

model

    @RequestMapping("/model")
    public String model(Model model){
        model.addAttribute("msg","你好");
        return "mav";
    }

ModelAndView和model区别:

ModelAndView

ModelAndView 是一个对象,它同时包含了模型和视图的信息。当你想要直接指定返回的视图名称,并且向该视图传递数据时,你会使用 ModelAndView

  • 包含信息
    • 视图名称:通过 setViewName() 方法设置。
    • 模型数据:可以通过 addObject() 方法向模型中添加数据。
  • 使用场景
    • 当你需要明确地指定返回的视图名称时。
    • 当你想要在一个方法中处理多个逻辑,并基于这些逻辑返回不同的视图时。

Model

在Spring MVC中,Model 通常是一个 Map<String, Object> 的实现,用于存储将要传递给视图的数据。它并不直接包含视图的信息,而是由控制器方法来决定哪个视图应该被渲染。

  • 包含信息
    • 模型数据:可以通过 addAttribute()put() 方法向模型中添加数据。
  • 使用场景
    • 当你使用 @RequestMapping 注解并希望返回默认视图(例如,基于请求URL的视图解析)时。
    • 当你只需要向视图传递数据,而不需要明确指定视图名称时。

总结

  • ModelAndView 允许你同时指定视图名称和模型数据。
  • Model 仅用于存储模型数据,并允许视图解析器基于其他因素(如请求URL)来决定要渲染的视图。

在大多数情况下,使用 Model 就足够了,因为它更加简洁且符合Spring MVC的约定。但在某些特殊情况下,例如当你需要基于不同的逻辑条件返回不同的视图时,ModelAndView 可能会更有用。

5、返回json

  1. 控制器的方法也可以返回 Object 对象,但返回的对象不是作为视图出现的,而是作为页面上显示的数据。

返回对象,需要使用 @ResponseBody 注解将对象转换为 json 格式的数据响应给浏览器。

    @RequestMapping("/json")
    @ResponseBody
    public Object json(){
        User wsy = new User("wsy", 20);
        Gson gson = new Gson();
        String s = gson.toJson(wsy);
        return s;

    }

标签:redirect,RequestMapping,springmvc,spring,视图,响应,forward,ModelAndView,public
From: https://blog.csdn.net/weixin_64520804/article/details/139359164

相关文章

  • 如何在Spring Boot中整合PageHelper实现分页功能
    1.前言        在开发web应用程序时,经常会遇到需要对数据库中的数据进行分页查询的情况。为了简化分页查询的实现过程,我们可以利用PageHelper这个优秀的分页插件来实现分页功能。本文将介绍如何在SpringBoot项目中整合PageHelper,并演示如何使用它来实现分页功能。......
  • SpringBoot案例,通关版
    项目目录此项目为了伙伴们可以快速入手SpringBoot项目,全网最详细的版本,每个伙伴都可以学会,这个项目每一步都会带大家做,学完后可以保证熟悉SpringBoot的开发流程项目介绍:项目使用springboot+mybatis进行开发带你一起写小项目先把初始环境给你们第一步新建springboot项......
  • 采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端
    采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端全套源码)家政管理平台系统是运用现代计算机和网络技术,集信息网、服务网为一体,对社区家政需求信息汇集整理、综合处理,发挥信息介绍、组织服务、资源共享的作用,向社区居民提供优质服务的网络......
  • springboot aop 通过参数名称来修改 get请求值
    引入aopimplementation'org.springframework.boot:spring-boot-starter-aop'代码实现`packagecom.photo.photoking.interceptor;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Asp......
  • Spring Native注册反射元信息
    eg:@ImportRuntimeHints(MyRuntimeHintsRegistrar.class)publicclassMyRuntimeHintsRegistrarimplementsRuntimeHintsRegistrar{/***ForGraalVMNativeCompile**@paramhints*@paramclassLoader*/@Overridepublic......
  • springboot+seata+nacos+dubbo搭建分布式事务
    一、环境springboot:2.3.1.RELEASEdubbo:2.7.13seata:1.8nacos:zookeeper:3.7.1java11mysql8依赖:以下版本经测试无依赖冲突#父工程springboot版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent......
  • Spring 项目整合 Junit 一直报 java.lang.NullPointerException空指针异常
    1.异常信息java.lang.NullPointerException:Cannotinvoke"com.yue.service.StudentService.changeInfo()"because"this.studentService"isnull2.测试代码packagecom.yue.test;importcom.yue.config.DataSourceConfig;importcom.yue.service.Stud......
  • springboot关键注解
    目录标记容器类注解1.@Controller 2.@Service3.@Repository4.@Component 依赖注入注解1.@Autowired2.@Resource@Autowired与@Resource的区别 web相关注解@RequestMapping属性介绍用法示例注意事项@GetMapping和@PostMapping @RestController......
  • Spring Boot 开发 -- 集成 Prometheus 进行高效监控
    引言随着微服务架构的流行,对服务的监控和管理变得尤为重要。Prometheus作为一个开源的监控和告警工具,以其强大的数据采集、存储和查询能力,受到了众多开发者的青睐。SpringBoot作为Java领域快速构建微服务的框架,与Prometheus的结合可以实现对SpringBoot应用的实时监控。本......
  • springboot基本使用十一(自定义全局异常处理器)
    例如:我们都知道在java中被除数不能为0,为0就会报byzero错误@RestControllerpublicclassTestController{@GetMapping("/ex")publicIntegerex(){inta=10/0;returna;}}打印结果:如何将这个异常进行处理?创建全局异常处理类......