三、SpringMVC响应数据(页面跳转控制、返回JSON数据、返回静态页面)

三、SpringMVC响应数据

1、handler方法分析

1、理解handler方法的作用和组成

1、作用

/**
 * 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 返回结果,可以快速响应前端数据
 */

2、组成

@GetMapping
public Object handler(简化请求参数接收){
    调用业务方法
    返回的结果 (页面跳转,返回数据(json))
    return 简化响应前端数据;
}

3、总结

  • 请求数据接收,我们都是通过handler的形参列表
  • 前端数据响应,我们都是通过handler的return关键字快速处理!
  • springmvc简化了参数接收和响应!

2、页面跳转控制

1、开发模式回顾

1、前后端分离、混合开发

2、图解

image-20240117005430411

1、前后端分离【重点】

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

2、说人话就是:后端是一个独立的项目,前端可以通过pc、Android、ios等访问这个后端的项目。满足了更多的需求。

2、混合开发

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

2、就是没有前后端的概念,全部集成在一个项目中,共享系统的技术栈和框架

3、所需要使用的技术:动态页面技术、动态展示java的共享数据

3、jsp技术【了解】

1、了解

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

2、作用

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

3、主要特点

  • 简单:JSP 通过将 Java 代码嵌入到 HTML 页面中,使得生成动态内容的编写更加简单
  • 高效:JSP 首次运行时会被转换为 Servlet,然后编译为字节码,从而可以启用 Just-in-Time(JIT)编译器,实现更高效的运行。
  • 多样化:JSP 支持多种标准标签库,包括 JSTL(JavaServer Pages 标准标签库)、EL(表达式语言)等,可以帮助开发人员更加方便的处理常见的 Web 开发需求。

4、总结

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

2、快速返回模版视图

1、准备jsp页面和依赖

  • pom.xml依赖

  • 
    
      jakarta.servlet.jsp.jstl
      jakarta.servlet.jsp.jstl-api
      3.0.0
    
  • jsp页面的创建

  • <%--
    Created by IntelliJ IDEA.
    User: qt
    Date: 2024/1/17
    Time: 0:32
    To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
      jsp测试页面
    
    
    <%--    我要添加一个模版页面,内容为:hello,jsp!!!--%>
      

    ${data}

2、配置jsp的视图解析器

@Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }
  • 就是去实现WebMvcConfigurer接口里面的方法

3、handler

/*
     *TODO:快速查找视图
     * 1、方法的返回是字符串类型
     * 2、不能添加@ResponseBody:因为添加了就直接返回字符串给浏览器了。不会去找视图了
     */

    @GetMapping("index")
    public String index(HttpServletRequest request){
        System.out.println("JspController.index");
        request.setAttribute("data","Hello JSP!!!");
        return "index";
    }
  • 上面配过视图解析器,就可以把前缀和后缀去掉。只写中间。
  • 方法的返回是字符串类型
  • 不能添加@ResponseBody:因为添加了就直接返回字符串给浏览器了。不会去找视图了

3、转发和重定向

其他环境和快速返回模版视图一样

1、转发

1、例子

@GetMapping("forward")
    public String  forward(){
        System.out.println("JspController.forward");
        return  "forward:/jsp/index";
    }

2、注意

  • 只能在项目下的资源
  • 不能添加responseBody注解
  • 返回字符串前面forward:/转发的地址

2、重定向

1、例子

@GetMapping("redirect")
    public String  redirect(){
        System.out.println("JspController.redirect");
        return "redirect:/jsp/index";
    }

2、注意

  • 方法返回值写成字符串类型
  • 不能添加responseBody注解
  • 返回字符串前面redirect:/重定向的地址

3、路径补充

1、不使用SpringMVC路径语法

  • 转发是项目下的资源
  • 重定向是项目外的资源;属于是二次请求 路径:项目外的地址 全地址/springmvc/jsp/index 不忽略applicationContext

2、使用SpringMVC路径语法

  • forward路径 | redirect路径 重定向,资源的地址不需要写项目的根路径了 /jsp/index

4、总结

1、将方法的返回值,设置为string

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

3、关键字: /路径

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

3、返回JSON数据【重点】

1、前戏

1、导入jackson依赖

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

2、添加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注解

1、方法上使用

1、用于将方法返回的对象序列化为 JSON 或 XML 格式的数据,并发送给客户端。在前后端分离的项目中使用!

2、就是将对象转换为JSON,然后发送给客户端

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

4、例子

//对象
@RequestMapping("data")
    @ResponseBody
    public User data(){
        User user = new User();
        user.setName("two dogs");
        user.setAge(1);
        return user;
    }
//集合
@GetMapping("data1")
    public List<User> getUserList(){
        User user = new User();
        user.setName("two dogs");
        user.setAge(2);

        List<User> users = new ArrayList<>();
        users.add(user);
        return users;
    }

5、注意:如果是传对象,就直接写对象。如果传的是集合就写集合

2、类上使用

1、如果这个类中的所有方法都要用这个注解ResponseBody。就只要在类上添加一个就行。因为可以提取出来

3、@RestController

1、这个注解是新盖中盖,就 = @Controller+@ResponseBody这两个注解的结合

2、看看这个注解@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 "";

}

4、返回静态资源

1、什么是静态资源

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

  • 纯HTML文件
  • 图片
  • CSS文件
  • JavaScript文件
  • ……

2、怎么用

1、先把静态资源放在webapp路径下。不要放在WEB-INF下,否则浏览器拿不到

  • image-20240117113408230

2、修改SpringMVC的配置类

@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {

    //配置jsp对应的视图解析器
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        //快速配置jsp模板语言对应的
        registry.jsp("/WEB-INF/views/",".jsp");
    }

    //开启静态资源处理 <mvc:default-servlet-handler/>
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

3、再次访问图片的路径即可

3、问题

1、如果不加配置类会报404

1、因为没有配置SpringMVC要求的对应的@RequestMapping【秘书】

2、导致会直接去寻找handler,找不到handler就会报错

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇