SpringMVC数据响应(页面跳转、回写数据)

SpringMVC的执行流程

1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器
3、处理器映射器HandlerMapping找到具体的处理器(可以根据xml配置、注解进行查找) ,生成处理器对象及处理器拦截器,一并返回给DispatcherServlet
4、DispatcherServlet调用HandlerAdapter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatchServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、viewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图,DispatcherServlet响应用户

配置内部资源视图解析器

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--        配置前缀和后缀-->
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

返回视图格式

如果在return出写明是转发模式还是重定向模式则需要写全路径
配置前后缀后可直接返回jsp文件名,自动加上配置的前后缀
@RequestMapping("/quickStart2")
public String test2(){
    System.out.println("UserController save running ....");
    // 如果写清楚转发模式还是重定向模式需要写全路径,此时已经配置了前后缀
    return "forward:/jsp/test.jsp";
}

SpringMVC的数据响应

1、页面跳转:
	直接返回字符串
	通过ModelAndView对象返回
2、回写数据(需要配置ResponseBody指明直接返回数据而不是跳转路径)
	直接返回字符串
	返回对象或集合

UserController 类

import com.entity.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
public class UserController {
    @RequestMapping("/quickStart")
    public String save() {
        System.out.println("UserController save running ....");
        // 注意是否配置有前缀和后缀
        // 重定向要把路径名写全
        return "redirect:/jsp/test.jsp";
    }

    @RequestMapping("/quickStart1")
    public String test() {
        System.out.println("UserController save running ....");
        // 注意是否配置有前缀和后缀,此处配置了前缀 /jsp 后缀 .jsp 默认为转发模式
        return "test";
    }

    @RequestMapping("/quickStart2")
    public String test2() {
        System.out.println("UserController save running ....");
        // 如果写清楚转发模式还是重定向模式需要写全路径,此时已经配置了前后缀
        return "forward:/jsp/test.jsp";
    }

    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView() {
        ModelAndView modelAndView = new ModelAndView();
        // 设置模型数据
        modelAndView.addObject("username", "xiaoming");
        // 设置视图名称
        modelAndView.setViewName("test");
        return modelAndView;
    }

    @RequestMapping("/testModelAndView2")
    public ModelAndView testModelAndView2(ModelAndView modelAndView) {
        // 设置模型数据
        modelAndView.addObject("username", "xiaohong");
        // 设置视图名称
        modelAndView.setViewName("test");
        return modelAndView;
    }

    @RequestMapping("/testModelAndView3")
    public String testModelAndView3(Model model) {
        // 设置模型数据
        model.addAttribute("username", "testModelAndView3");
        // 传值只能用forward方式,redirect方式不能传值,redirect方式传入的值会以get方式存在,在地址栏中可看到
        // http://localhost:8080/jsp/test.jsp?username=testModelAndView3
//        return "redirect:/jsp/test.jsp";
        return "test";
    }

    // 原始方式 使用Servlet
    @RequestMapping("/testHttpServletRequest")
    public String testModelAndView3(HttpServletRequest request) {
        request.setAttribute("username", "HttpServletRequest");
        return "forward:/jsp/test.jsp";
        // 不能用redirect方式,通过request方式不会在地址栏中显示
//        return "redirect:/jsp/test.jsp";

    }

    // 回写数据
    // 直接诙谐字符串
    @RequestMapping("/writeBack")
    public void writeBack(HttpServletResponse response) throws IOException {
        response.getWriter().println("hello word!");
    }

    @RequestMapping("/writeBack2")
    // 添加注释告诉SpringMVC 不进行视图跳转,直接返回数据响应
    @ResponseBody
    public String writeBack2() throws IOException {
        return "hello writeBack2";
    }

    // 解决中文乱码  produces = "application/json;charset=UTF-8"

    @RequestMapping(value = "/writeBackJSON", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public String writeBackJSON() throws JsonProcessingException {
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        user.setGender("男");
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);
        return json;
    }

    // 返回对象或集合,需要配置转换工具类
    // 方法一;
    // 在Spring MVC核心配置中配置RequestMappingHandlerAdapter 传入json转换类
    //    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    //        <property name="messageConverters">
    //            <list>
    //                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    //            </list>
    //        </property>
    //    </bean>

    // 方法二:
    // 配置Spring MVC注解驱动器,内部集成Jackson转json类
    //    <mvc:annotation-driven/>
    @RequestMapping(value = "/writeBackJSON2", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public User writeBackJSON2() {
        User user = new User();
        user.setName("李四");
        user.setAge(18);
        user.setGender("男");
        return user;
    }

    


}

spring-mvc.xml 配置

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.controller"/>

    <!--    配置内部资源视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--        配置前缀和后缀-->
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--    配置处理器映射器,给其添加json处理类,使其可自动转换对象为json-->
    <!--    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">-->
    <!--        <property name="messageConverters">-->
    <!--            <list>-->
    <!--                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>-->
    <!--            </list>-->
    <!--        </property>-->
    <!--    </bean>-->


    <!--    配置Spring MVC的注解驱动,默认底层集成Jackson进行对象或集合的json格式字符转换-->
    <!--    此时需要引入jackson-core jackson-annotations jackson-databind -->
    <mvc:annotation-driven/>
</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值