SpringMVC响应处理详细解读

Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,Spring MVC 角色划分清晰,分工明细,本章来讲解SpringMVC数据响应

数据处理及跳转

1.结果跳转方式

①.ModelAndView

设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面

<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
    <property name="prefix" value="/html/" />
    <property name="suffix" value=".html" />
    <property name="templateMode" value="HTML5"/>
</bean>

对应的controller类:

/**
 * 返回ModelAndView对象的方式
 * @return
 */
@RequestMapping("/save3")
public ModelAndView save3(){
    System.out.println("执行了...");
    // 创建mv对象
    ModelAndView mv = new ModelAndView();
    // 把一些数据,存储到mv对象中
    mv.addObject("msg","用户名或者密码已经存在");
    // 设置逻辑视图的名称
    mv.setViewName("suc");
    return mv;
}

②.ServletAPI:请求转发和重定向

通过设置ServletAPI , 不需要视图解析器 .

1、通过HttpServletResponse进行输出

2、通过HttpServletResponse实现重定向

3、通过HttpServletResponse实现请求转发

(1)请求转发

​ 1、是服务器端的行为

​ 2、请求地址不发生改变,用户从始至终都是同一个请求

​ 3、request数据在servlet共享,因为从始至终都是同一个请求

​ 4、通过setAttribute进行数据传递,getAttribute进行数据接收

(2)重定向

​ 1.服务器端指导,客服端行为的行为

​ 2.两次request请求

​ 3.用户浏览器访问的地址栏也会发生变化

​ 4.重定向可以解决跨域问题

​ 跨域:我们当前访问的地址不是我们项目中的地址

    /**
     * 请求转发:
     * @param request
     * @param response
     * @throws IOException
     * @throws ServletException
     */
    @RequestMapping("/test1")
    public void test1(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        System.out.println("test1=" + request.getParameter("name"));
        request.setAttribute("msg", "你好");
        //request.getRequestDispatcher("/dept/test2").forward(request,response);
        request.getRequestDispatcher("/html/suc.html").forward(request, response);
    }
    /**
     * 重定向:
     * @param request
     * @param response
     * @throws IOException
     */
    @RequestMapping("t3")
    public void test3(HttpServletRequest request, HttpServletResponse response) throws IOException {
        System.out.println("我是test3");
        //response.sendRedirect("/SpringMVCTest/dept/t4");
        response.sendRedirect("/SpringMVCTest/html/suc.html");
    }

2.ResponseBody响应json数据

1、导入关键jar导入依赖

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

2、标签配置不过滤静态资源

DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置

  1. location元素表示webapp目录下的包下的所有文件
  2. mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!--设置静态资源不过滤-->
<mvc:resources mapping="/css/**" location="/css/"/> <!--样式-->
<mvc:resources mapping="/images/**" location="/images/"/> <!--图片-->
<mvc:resources mapping="/js/**" location="/js/"/> <!--javascript-->

controller层代码示例:user对象转换成json对象传输给前端

/**
 * 异步的数据交互
 * 重定向
 * @return
 */
@RequestMapping("/save6")
public @ResponseBody User save6(User user){
    System.out.println(user);
    // 模拟,调用业务层代码
    user.setUsername("hello");
    user.setAge(100);
    // 把user对象转换成json,字符串,再响应。使用@ResposeBody注解 response.getWriter().print()
    return user;
}

到此这篇关于SpringMVC响应处理详细解读的文章就介绍到这了,更多相关SpringMVC响应内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!

本文标题为:SpringMVC响应处理详细解读

基础教程推荐