美文网首页
126、【JavaEE】【SpringMVC】SpringMVC

126、【JavaEE】【SpringMVC】SpringMVC

作者: yscyber | 来源:发表于2021-10-29 23:45 被阅读0次

1、响应的本质

2、Spring MVC 支持的响应的种类

  • 大致上分为两类:一类是“页面”即响应的最终效果(客户端看到的)是“页面跳转”、另一类是“数据”。

  • Spring MVC 中实现响应为“页面(页面跳转)”的方案有:
    1、Controller 中的方法返回值为java.lang.String,返回“逻辑视图名”(请求转发、请求重定向均可)。
    2、使用原生的 Servlet API 实现(请求转发、请求重定向均可)。
    3、Controller 中的方法返回值为org.springframework.web.servlet.ModelAndView,在 ModelAndView 的对象中设置“逻辑视图名”以及需要在视图中渲染的数据(虽然 ModelAndView 也可以支持“请求重定向”,但是因为其可以“携带数据”,所以多数情况下,ModelAndView 为“请求转发”)。

  • Spring MVC 中实现响应为“数据”的方案有:
    1、纯字符串(不常用)
    2、JSON(常用)

3、页面响应

3.1、返回字符串(逻辑视图名)

  • 访问http://localhost:8080/web4/jsp/one,响应给客户端的是经过“视图解析器”处理的 JSP 页面。
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;


@Controller
public class MyRequestController {

    @GetMapping("/jsp/one")
    public String pageResponse() {
        return "one"; // 请求转发
    }

}
  • 请求转发与请求重定向:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;


@Controller
public class MyRequestController {

    @GetMapping("/jsp/one")
    public String pageResponse() {
        return "forward:one"; // 请求转发
    }

}
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;


@Controller
public class MyRequestController {

    @GetMapping("/jsp/one")
    public String pageResponse() {
        return "redirect:one"; // 请求重定向
    }

}

3.2、ModelAndView

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class MyRequestController {

    @GetMapping("/jsp/one")
    public ModelAndView pageResponse() {
        ModelAndView modelAndView = new ModelAndView(); // 方法体中 new 一个 ModelAndView 对象

        modelAndView.setViewName("one"); // /one.jsp
        modelAndView.addObject("name", "Jack");

        return modelAndView;
    }

}
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class MyRequestController {

    @GetMapping("/jsp/one")
    public ModelAndView pageResponse(ModelAndView modelAndView) {
// 方法参数中的 ModelAndView 类型可以直接使用
        modelAndView.setViewName("one"); // /one.jsp
        modelAndView.addObject("name", "Jack");

        return modelAndView;
    }

}
  • @SessionAttributes 注解:ModelAndView 中的数据,默认是在 Request 域中,如果希望将放入 ModelAndView 对象中的数据也放入 Session 域中,当然可以使用原生 Servlet API,Spring MVC 提供了@SessionAttributes注解,在将数据放入 ModelAndView 的同时,也放入 Session 域中。
SpringMVC-10

4、数据响应

4.1、JSON

4.1.1 @ResponseBody
  • 该注解可以使用在 Controller 的类上,也可以使用在其中的方法上。

  • 该注解的含义是,将方法的返回值写入 HTTP 响应报文的报文主体中。

  • 在 Jackson 依赖和在配置文件中配置<mvc:annotation-driven/>,两者配合下,方法的返回值如果是对象的话,会自动转化为 JSON 字符串写入 HTTP 响应报文主体中。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString
public class User {

    private Integer id;

    private String name;

}
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class MyRequestController {

    @GetMapping("/json/data")
    // @ResponseBody
    public User jsonResponse() {
        return new User(1, "张三");
    }

}
SpringMVC-9
4.1.2、@RestController
  • 该注解相当于 @Controller 与 @ResponseBody 联合,使用在类上。

相关文章

网友评论

      本文标题:126、【JavaEE】【SpringMVC】SpringMVC

      本文链接:https://www.haomeiwen.com/subject/kagvaltx.html