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日

相关文章

  • JAVA反射机制实例教程

    JAVA反射机制实例教程 什么是JAVA反射机制 JAVA反射机制是指在运行时动态的获取类信息及其属性和方法,并能够使用这些属性和方法。通俗来说就是在程序运行过程中,获取和使用程序实体(比如类、方法、属性)的信息的能力。 反射机制的优点 反射机制的主要优点是增强了代码的灵活性和可扩展性,因为使用反射机制可以在运行时动态地加载并操作类,而不需要在编译期确定。这…

    Java 2023年5月26日
    00
  • 浅析JPA分类表的操作函数

    下面为您详细讲解浅析JPA分类表的操作函数的完整攻略。 简介 JPA是Java Persistence API的缩写,它是JavaEE用于ORM的标准框架,可以方便地处理Java对象与关系型数据库之间的映射关系。在JPA中,分类表(分表)是一种处理大量数据的常用技术,它将一个大表拆分为多个小表,以提高查询、更新等操作的效率。 分类表的实现方式 1. 基于En…

    Java 2023年5月26日
    00
  • 高命中率的varnish缓存配置分享

    下面我来为你详细讲解“高命中率的varnish缓存配置分享”的完整攻略。 一、背景介绍 Varnish是一款高性能的HTTP反向代理服务器,它可以加速站点的访问速度,并为站点提供缓存服务。在使用Varnish时,我们需要合理配置缓存策略来提高缓存命中率和性能。 二、缓存策略配置 1. 确定缓存内容 首先,我们需要确定哪些内容需要缓存。可以根据站点的特点和访问…

    Java 2023年6月16日
    00
  • Java web Hibernate如何与数据库链接

    Java web是一种使用Java编程语言开发web应用程序的技术,Hibernate是一种基于Java的ORM框架。Hibernate允许将Java类映射到关系数据库表,从而实现无需编写SQL语句的数据库操作。 下面是Java web Hibernate如何与数据库链接的攻略: 1. 配置Hibernate配置文件 在项目的src目录下创建一个名为hibe…

    Java 2023年5月19日
    00
  • 如何使用JDBC连接数据库并执行SQL语句

    下面是如何使用JDBC连接数据库并执行SQL语句的完整攻略: 一、引入JDBC驱动 在Java程序中使用JDBC(Java DataBase Connectivity)需要先引入JDBC驱动。不同的数据库所对应的驱动不同,这里以MySQL为例: <!– 在项目的pom文件中添加MySQL驱动的依赖 –> <dependency> …

    Java 2023年5月20日
    00
  • 详解Java多线程编程中互斥锁ReentrantLock类的用法

    详解Java多线程编程中互斥锁ReentrantLock类的用法 简介 Java多线程编程中,为了保证线程安全,需要保证同一时间只有一个线程访问共享资源。使用互斥锁可以实现这个目的。在Java中,ReentrantLock类提供了互斥锁的功能。 ReentrantLock是可重入的互斥锁,它允许线程重复地获取同一把锁,而不会造成死锁。与synchronize…

    Java 2023年5月19日
    00
  • Java字符串相关类StringBuffer的用法详解

    Java字符串相关类StringBuffer的用法详解 String与StringBuffer的区别 String是Java中的字符串类,它的值是不可变的,一旦创建就无法改变。而StringBuffer则是可变的,可以动态修改其内容。因此,在需要修改字符串内容时,应该优先使用StringBuffer。 StringBuffer的基本用法 创建StringBu…

    Java 2023年5月27日
    00
  • springboot清除字符串前后空格与防xss攻击方法

    Spring Boot 提供了多种方法,可以清除字符串前后的空格和防止 XSS 攻击。本文将详细讲解这些方法的使用。 清除字符串前后空格 使用 String 类的 trim() 方法 String 类的 trim() 方法可以去除字符串前后的空格。示例如下: public class StringUtil { public static String tri…

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