针对SpringMvc响应数据及结果视图实现代码的完整攻略,我们可以分为以下几个部分进行讲解。
针对SpringMvc响应数据及结果视图实现代码的完整攻略,我们可以分为以下几个部分进行讲解。
一、SpringMVC响应数据的方式
SpringMVC提供了多种方式响应数据,分别如下:
- 转发 forward
- 重定向 redirect
- 返回JSON数据
- 返回XML数据
- 返回文件
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响应数据及结果视图实现代码
基础教程推荐
- java评论、回复功能设计与实现方法 2023-01-18
- Java聊天室之实现一个服务器与多个客户端通信 2023-06-23
- java – 在android中更新sqlite db的首选方法 2023-11-08
- Spring Cloud Ribbon客户端详细介绍 2023-05-08
- 简单聊聊工作中常用的Java Lambda表达式 2023-07-01
- servlet+JSP+mysql实现文件上传的方法 2023-08-03
- Java设计模式中的装饰者模式 2023-03-11
- Spring中xml配置文件的基础使用方式详解 2023-03-07
- MySQL MyBatis 默认插入当前时间方式 2023-06-10
- Java ArrayList类的基础使用讲解 2023-06-23