欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > SpringMVC响应数据

SpringMVC响应数据

2025/5/24 1:03:58 来源:https://blog.csdn.net/m0_50460160/article/details/144175674  浏览:    关键词:SpringMVC响应数据

一、handler方法分析:

理解handler方法的作用和组成:

/*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用@RequestMapping/@GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:*       1.接收请求参数(param,json,pathVariable,共享域等) *       2.调用业务逻辑 *       3.响应前端数据(页面(不讲解模版页面跳转),json,转发和重定向等)* TODO: handler如何处理呢*       1.接收参数: handler(形参列表: 主要的作用就是用来接收参数)*       2.调用业务: { 方法体  可以向后调用业务方法 service.xx() }*       3.响应数据: return 返回结果,可以快速响应前端数据*/
@GetMapping
public Object handler(简化请求参数接收){调用业务方法返回的结果 (页面跳转,返回数据(json))return 简化响应前端数据;
}

总结:请求数据接收,都是通过handler的形参列表。前端数据响应,都是通过handler的return关键字快速处理、springmvc简化了参数接收和响应

二、页面跳转控制:

1.快速返回模版视图:

(1).开发模式回顾

在Web开发中,有两种主要的开发模式:前后端分离和混合开发。

前后端分离模式:

指将前端的界面和后端的业务逻辑通过接口分离开发的一种方式。开发人员使用不同的技术栈和框架,前端开发人员主要负责页面的呈现和用户交互,后端开发人员主要负责业务逻辑和数据存储。前后端通信通过API接口完成,数据格式一般使用JSON或XML。前后端分离模式可以提高开发效率,同时也有助于代码重用和维护。

混合开发模式:

指将前端和后端的代码集成在同一个项目中,共享相同的技术栈和框架。这种模式在小型项目中比较常见,可以减少学习成本和部署难度。但是,在大型项目中,这种模式会导致代码耦合性很高,维护和升级难度较大。
(2).jsp技术了解:

JSP(JavaServer Pages)是一种动态网页开发技术,它是由Sun公司提出的一种基于Java技术的 Web 页面制作技术,可以在HTML文件中嵌入Java代码,使得生成动态内容的编写更加简单。

JSP最主要的作用是生成动态页面。它允许将Java代码嵌入到HTML页面中,以便使用Java进行数据库查询、处理表单数据和生成HTML等动态内容。另外,JSP还可以与Servlet结合使用,实现更加复杂的Web应用程序开发。

JSP的主要特点包括:

简单:JSP通过将Java代码嵌入到HTML页面中,使得生成动态内容的编写更加简单。

高效:JSP首次运行时会被转换为Servlet,然后编译为字节码,从而可以启用Just-in-Time(JIT)编译器,实现更高效的运行。

多样化:JSP支持多种标准标签库,包括JSTL(JavaServer Pages 标准标签库)、EL(表达式语言)等,可以帮助开发人员更加方便的处理常见的Web开发需求。

总之,JSP 是一种简单高效、多样化的动态网页开发技术,它可以方便地生成动态页面和与 Servlet结合使用,是Java Web开发中常用的技术之一。

(3).准备jsp页面和依赖:

pom.xml依赖:

<!-- jsp需要依赖! jstl-->
<dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>3.0.0</version>
</dependency>

jsp页面创建

建议位置:WEB-INF/下,避免外部直接访问

位置:/WEB-INF/views/home.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>Title</title></head><body><!-- 可以获取共享域的数据,动态展示! jsp== 后台vue -->${msg}</body>
</html>

(4).快速响应模版页面:

配置jsp视图解析器:

@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {//配置jsp对应的视图解析器@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {//快速配置jsp模板语言对应的registry.jsp("/WEB-INF/views/",".jsp");}
}

handler返回视图:

/***  跳转到提交文件页面  /save/jump*  *  如果要返回jsp页面!*     1.方法返回值改成字符串类型*     2.返回逻辑视图名即可    *         <property name="prefix" value="/WEB-INF/views/"/>*            + 逻辑视图名 +*         <property name="suffix" value=".jsp"/>*/
@GetMapping("jump")
public String jumpJsp(Model model){System.out.println("FileController.jumpJsp");model.addAttribute("msg","request data!!");return "home";
}

2.转发和重定向:

在Spring MVC中,Handler方法返回值来实现快速转发,可以使用redirect或者forward关键字来实现重定向

@RequestMapping("/redirect-demo")
public String redirectDemo() {// 重定向到 /demo 路径 return "redirect:/demo";
}@RequestMapping("/forward-demo")
public String forwardDemo() {// 转发到 /demo 路径return "forward:/demo";
}//注意: 转发和重定向到项目下资源路径都是相同,都不需要添加项目根路径!填写项目下路径即可!

总结:

将方法的返回值,设置String类型

转发使用forward关键字,重定向使用redirect关键字

关键字:/路径

注意:如果是项目下的资源,转发和重定向都一样都是项目下路径,都不需要添加项目根路径

3.返回JSON数据:

(1).前置准备:

导入jackson依赖

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
</dependency>

添加json数据转化器:

@EnableWebMvc

//TODO: SpringMVC对应组件的配置类 [声明SpringMVC需要的组件信息]//TODO: 导入handlerMapping和handlerAdapter的三种方式//1.自动导入handlerMapping和handlerAdapter [推荐]//2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载//3.使用@Bean方式配置handlerMapper和handlerAdapter
@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {}

(2).@ResponseBody

方法上使用@ResponseBody:

可以在方法上使用@ResponseBody注解,用于将方法返回的对象序列化为JSON或XML格式的数据,并发送给客户端。在前后端分离的项目中使用

测试方法:

@GetMapping("/accounts/{id}")
@ResponseBody
public Object handle() {// ...return obj;
}

具体来说,@ResponseBody注解可以用来标识方法或者方法返回值,表示方法的返回值是要直接返回给客户端的数据,而不是由视图解析器来解析并渲染生成响应体(viewResolver没用)

测试方法:

@RequestMapping(value = "/user/detail", method = RequestMethod.POST)
@ResponseBody
public User getUser(@RequestBody User userParam) {System.out.println("userParam = " + userParam);User user = new User();user.setAge(18);user.setName("John");//返回的对象,会使用jackson的序列化工具,转成json返回给前端!return user;
}

返回结果:

类上使用@ResponseBody:

如果类中每个方法上都标记了@ResponseBody注解,那么这些注解就可以提取到类上

@ResponseBody  //responseBody可以添加到类上,代表默认类中的所有方法都生效!
@Controller
@RequestMapping("param")
public class ParamController {

(3).@RestController:

类上的@ResponseBody注解可以和@Controller注解合并为@RestController注解。所以使用了@RestController注解就相当于给类中的每个方法都加了@ResponseBody注解

RestController源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {/*** The value may indicate a suggestion for a logical component name,* to be turned into a Spring bean in case of an autodetected component.* @return the suggested component name, if any (or empty String otherwise)* @since 4.0.1*/@AliasFor(annotation = Controller.class)String value() default "";}

四、返回静态资源处理:

1.静态资源概念:

资源本身已经是可以直接拿到浏览器上使用的程度了,不需要在服务器端做任何运算、处理。典型的静态资源包括:纯HTML文件、图片、CSS文件、JavaScript文件

2.静态资源访问和问题解决:

web应用加入静态资源:

手动构建确保编译:

访问静态资源:

问题分析:

DispatcherServlet的url-pattern配置的是“/”

url-pattern配置“/”表示整个Web应用范围内所有请求都由SpringMVC来处理

对SpringMVC来说,必须有对应的@RequestMapping才能找到处理请求的方法

现在images/mi.jpg请求没有对应的@RequestMapping所以返回404

问题解决:

在SpringMVC配置配置类:

@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {//配置jsp对应的视图解析器@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {//快速配置jsp模板语言对应的registry.jsp("/WEB-INF/views/",".jsp");}//开启静态资源处理 <mvc:default-servlet-handler/>@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
}

再次测试访问图片:

新的问题:其他原本正常的handler请求访问不了

handler无法访问

解决方案:

@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词