SpringMvc响应数据及结果视图实现代码

针对SpringMvc响应数据及结果视图实现代码的完整攻略,我们可以分为以下几个部分进行讲解。

一、SpringMVC响应数据的方式

SpringMVC提供了多种方式响应数据,分别如下:

  1. 转发 forward
  2. 重定向 redirect
  3. 返回JSON数据
  4. 返回XML数据
  5. 返回文件

1. 转发 forward

使用转发可以将请求转发给其他控制器或JSP页面。实现转发的方式有两种,一种是使用HttpServletRequest对象进行转发,另一种是使用ModelAndView对象进行转发。

使用HttpServletRequest进行转发

转发时需要使用HttpServletRequest对象中的getRequestDispatcher()方法获取RequestDispatcher对象,然后通过RequestDispatcher对象中的forward()方法进行转发。转发可以直接使用请求路径或者通过请求路径前缀的方式进行转发,代码示例如下:

@RequestMapping("/test")
public void test(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // 直接转发
    request.getRequestDispatcher("/hello.jsp").forward(request, response);

    // 使用请求路径前缀进行转发
    request.getRequestDispatcher("../index.jsp").forward(request, response);
}

使用ModelAndView进行转发

另一种使用ModelAndView对象进行转发的方式,它可以将模型数据和响应结果封装到一个ModelAndView对象中,并且通过返回ModelAndView对象实现转发。代码示例如下:

@RequestMapping("/test")
public ModelAndView test() {
    ModelAndView mav = new ModelAndView();
    // 设置模型数据
    mav.addObject("msg", "Hello, World!");
    // 设置视图名称
    mav.setViewName("hello");
    return mav;
}

2. 重定向 redirect

重定向是指将请求重定向到另一个页面或者控制器,实现重定向的方式有两种,一种是使用RedirectView对象进行重定向,另一种是使用HttpServletResponse对象进行重定向。

使用RedirectView进行重定向

使用RedirectView对象需要创建一个RedirectView对象并设置重定向路径,然后将RedirectView对象包装到ModelAndView对象中,最后通过返回ModelAndView对象实现重定向。代码示例如下:

@RequestMapping("/test")
public ModelAndView test() {
    ModelAndView mav = new ModelAndView();
    mav.setView(new RedirectView("/hello"));
    // 设置模型数据
    mav.addObject("msg", "Hello, World!");
    return mav;
}

使用HttpServletResponse进行重定向

使用HttpServletResponse对象进行重定向需要调用HttpServletResponse对象中的sendRedirect()方法,并传递重定向路径作为参数。这种方式不能将模型数据添加到响应中,只能通过URL参数或者Session对象传递数据。代码示例如下:

@RequestMapping("/test")
public void test(HttpServletResponse response) throws IOException {
    response.sendRedirect("/hello");
}

3. 返回JSON数据

返回JSON数据是指将数据以JSON格式的方式响应给客户端,SpringMVC可以使用多种方式响应JSON数据,常用的有@ResponseBody注解和MappingJackson2JsonView对象。值得注意的是,返回JSON数据时需要在项目中添加相应的JSON依赖。

使用@ResponseBody注解

@ResponseBody注解用于标记该方法可以将方法返回值作为响应体内容返回给客户端,并使用JSON格式输出。可以通过在方法中添加@RequestMapping注解或者在类上添加@RestController注解来使用@ResponseBody注解。代码示例如下:

@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping("/user")
    public User getUser() {
        User user = new User();
        user.setName("Tom");
        user.setAge(18);
        return user;
    }
}

使用MappingJackson2JsonView对象

MappingJackson2JsonView对象是SpringMVC提供的一种视图类型,主要用于将模型数据转换为JSON格式的响应体内容,并输出到客户端中。代码示例如下:

@RequestMapping("/test")
public ModelAndView test() {
    ModelAndView mav = new ModelAndView();
    // 设置模型数据
    Map<String, Object> model = new HashMap<>();
    model.put("msg", "Hello, World!");
    // 设置视图名称
    MappingJackson2JsonView view = new MappingJackson2JsonView();
    view.setExtractValueFromSingleKeyModel(true);
    mav.setView(view);
    mav.addAllObjects(model);
    return mav;
}

4. 返回XML数据

返回XML数据是指将数据以XML格式的方式响应给客户端,SpringMVC可以使用多种方式响应XML数据,常用的有@ResponseBody注解和MarshallingView对象。值得注意的是,返回XML数据时需要在项目中添加相应的XML依赖。

使用@ResponseBody注解

@ResponseBody注解用于标记该方法可以将方法返回值作为响应体内容返回给客户端,并使用XML格式输出。可以通过在方法中添加@RequestMapping注解或者在类上添加@RestController注解来使用@ResponseBody注解。代码示例如下:

@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping("/user")
    @ResponseBody
    public User getUser() {
        User user = new User();
        user.setName("Tom");
        user.setAge(18);
        return user;
    }
}

使用MarshallingView对象

MarshallingView对象是SpringMVC提供的一种视图类型,主要用于将模型数据转换为XML格式的响应体内容,并输出到客户端中。代码示例如下:

@RequestMapping("/test")
public ModelAndView test() {
    ModelAndView mav = new ModelAndView();
    // 设置模型数据
    Map<String, Object> model = new HashMap<>();
    model.put("msg", "Hello, World!");
    // 设置视图名称
    MarshallingView view = new MarshallingView();
    view.setMarshaller(new Jaxb2Marshaller());
    mav.setView(view);
    mav.addAllObjects(model);
    return mav;
}

5. 返回文件

返回文件是指将文件以响应体的形式返回给客户端。SpringMVC可以使用@ResponseBody注解和ResponseEntity对象来实现返回文件。代码示例如下:

@RequestMapping("/download")
public ResponseEntity<byte[]> download() throws IOException {
    // 获取文件
    File file = new File("/path/to/file");
    // 设置响应头
    HttpHeaders headers = new HttpHeaders();
    headers.setContentDispositionFormData("attachment", file.getName());
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    // 读取文件内容
    byte[] bytes = FileUtils.readFileToByteArray(file);
    return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}

二、SpringMVC结果视图实现代码

SpringMVC提供了多种方式实现结果视图,包括JSP页面、HTML页面、Thymeleaf视图、Velocity视图、FreeMarker视图等。值得注意的是,不同的视图类型需要在项目中添加相应的依赖。以下将对其中的两种方式进行示例说明。

1. JSP页面

使用JSP页面作为结果视图的实现方式非常常见。在项目中添加了相关依赖之后,可以使用InternalResourceViewResolver对象进行配置。代码示例如下:

@Configuration
public class WebConfig {
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

2. Thymeleaf视图

Thymeleaf视图是SpringBoot提供的一种模板引擎,它支持HTML、XML、JavaScript、CSS、Text和其他文本格式,并且能够与SpringMVC集成使用。在项目中添加了相关依赖之后,可以使用ThymeleafViewResolver对象进行配置。代码示例如下:

@Configuration
public class WebConfig {
    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("UTF-8");
        return viewResolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        return templateEngine;
    }

    @Bean
    public ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCacheable(false);
        return templateResolver;
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMvc响应数据及结果视图实现代码 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring security认证两类用户代码实例

    下面是详细讲解“Spring security认证两类用户代码实例”的完整攻略。 1. Spring Security认证两类用户 Spring Security可以认证两类用户:前台用户和后台用户。在实际开发中,这两类用户需要分别进行认证,才能保证系统的安全性。 1.1 前台用户 前台用户是指普通用户,通常需要进行注册、登录等操作。Spring Secur…

    Java 2023年5月20日
    00
  • Java使用FileInputStream流读取文件示例详解

    一、标题 Java使用FileInputStream流读取文件示例详解 二、概述 在Java编程中,我们常常需要通过读取文件的方式获取文件的内容。Java的输入输出流提供了The FileInputStream类来实现将文件读取到程序中。本攻略将详细讲解如何使用Java的FileInputStream流读取文件,并给出两条示例。 三、示例1(使用FileIn…

    Java 2023年5月20日
    00
  • JSON创建键值对(key是中文或者数字)方式详解

    下面是关于JSON创建键值对的详细攻略。 1. JSON创建键值对 在JSON中,使用冒号(:)将Key和value分隔开来。Key必须是字符串或者数字。 1.1 Key是字符串 如果Key是字符串,需要将其用引号包围起来,例如: { "name": "小明", "age": 18 } 在以上代码中…

    Java 2023年5月26日
    00
  • js使用xml数据载体实现城市省份二级联动效果

    下面是使用XML数据载体实现城市省份二级联动效果的完整攻略: 1. 准备XML数据源 首先,我们需要准备一个XML文件作为数据源。XML是一种标记语言,可以方便地描述数据结构。这里我们以中国省市县三级行政区划数据作为示例。可以从许多数据开放平台或者政府官网上获取到相应的数据,如国家统计局。然后,我们可以将数据整理成以下格式(也可以根据自己需求来进行修改): …

    Java 2023年6月15日
    00
  • 浅谈mybatis中SQL语句给boolean类型赋值问题

    谈到MyBatis中SQL语句给boolean类型赋值问题,需要注意以下几点: 在Java中,boolean类型的变量只有两个取值:true和false,在SQL语句中需要对应相应的取值 MyBatis中使用动态SQL语句,使用OGNL来指定参数值 则,对于bool类型的参数,SQL语句中的取值应该为真正对应的字符串。在MyBatis中,常规的做法是使用”1…

    Java 2023年5月20日
    00
  • kotlin和Java的相互调用示例详解

    Kotlin 和 Java 是两种不同的编程语言,它们在语法、代码风格和使用方法上有一些不同。Kotlin 作为一个相对较新的编程语言,它的语法更加简单易用,可以很好地和 Java 配合使用。下面将详细讲解 Kotlin 和 Java 的相互调用。 创建 Kotlin 和 Java 文件 在项目中创建 Kotlin 文件和 Java 文件。接下来以一个简单的…

    Java 2023年5月26日
    00
  • java异常和错误类总结(必看篇)

    下面是本文的完整攻略: Java异常和错误类总结(必看篇) 什么是异常和错误? Java程序的运行过程中,可能会出现各种各样的不正常情况,比如输入错误、内存不足、文件不存在等等。这些不正常情况统称为“异常”(Exception)和“错误”(Error)。 异常和错误都是Java的类,都继承自Throwable类。它们之间的区别在于,异常通常是程序运行过程中的…

    Java 2023年5月27日
    00
  • Spring框架核心概念小结

    下面是Spring框架核心概念的完整攻略: Spring框架核心概念小结 1. IoC容器 IoC全称Inversion of Control,中文名为控制反转。在Spring框架中,IoC容器负责管理Java对象的创建和销毁,并且通过依赖注入的方式将对象之间的依赖关系交给容器来管理。Spring框架的IoC容器实现了Bean的管理,也就是管理对象实例,并提…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部