SpringMVC-数据响应
SpringMVC-数据响应
页面跳转
在非前后端分离项目中,我们采用模板页面的方式(JSP)来处理前端页面
在SpringMVC中,我们通过调用视图解析器来完成对JSP页面的跳转
1 | |
registry中文释义:注册表
将配置类实现WebMvcConfigurer接口,可完成对SpringMVC组件的快速配置
我们重写了configureViewResolvers,通过registry调用.jsp方法,填写前缀和后缀,完成视图解析器的配置
在Controller中,直接返回跳转的视图名称,框架会将这个名称与我们配置好的前缀和后缀进行字符串拼接
例如,此案例中拼接好的跳转地址为:/WEB-INF/views/index.jsp
1 | |
转发
将方法的返回值定义成字符串,在返回的字符串前添加forward:
1 | |
重定向
注:在学习servlet的转发和重定向时,上下文路径(访问路径)(Application context)如果存在的话,我们重定向的时候需要额外加上这个路径,但在SpringMVC中,这个路径时缺省的
将方法的返回值定义成字符串,在返回的字符串前添加redirect:
1 | |
返回数据
返回Json时,我们仍然需要为handlerAdapter装配一个jackson(json转换器)
使用@EnableWebMvc注解即可自动装配
@ResponseBody
使用@ResponseBody注解标识的方法,会由handler将返回的内容转换成Json串,将其放在响应体中,直接返回,不访问视图解析器
@ResponseBody注解可以标识类上,代表类中所有方法都返回JSON格式而不是跳转页面
1 | |
1 | |
相同的,集合和数组也可以由SpringMVC自动转换为JSON格式写入响应体中
1 | |
1 | |
@RestContorller*
@RestContorller注解 = @Controller注解 + @ResponseBody注解
1 | |
静态资源
我们所有对后端的请求都会交给SpringMVC的底层处理,也就是HandlerMapping去寻找路径映射规则
所以在Servlet中的直接访问静态资源的方法就失效了
将配置类实现WebMvcConfigurer接口,重写configureDefaultServletHandling方法后,开启configurer.enable()
开启之后,访问方式为 DispatcherServlet -> HandlerMapping -> 静态资源
1 | |
想要通过路径访问静态资源,仍然在handler方法中不能使用@ResponseBody注解,否则就直接返回了
当configurer.enable();配置时,底层是配置了xml文件<mvc:default-servlet-handler>,调用DefaultServletHandlerBeanDefinitionParser类
这个类创建了一个关键的对象:DefaultServletHttpRequestHandler
其操作就是将HandlerMapping找不到的路径交给DefaultServletHttpRequestHandler来查找转发
这样就实现了静态资源的访问
其底层内容和@EnableWebMvc注解配置方式相似