SpringMVC02_响应数据和结果视图

本教程源码请访问:tutorial_demo

一、环境搭建

1.1、创建工程

在idea中从原型创建Maven工程,选择org.apache.maven.archetypes:maven-archetype-webapp,在pom.xml中添加如下的坐标:


    org.springframework
    spring-context
    5.2.6.RELEASE


    org.springframework
    spring-web
    5.2.6.RELEASE


    org.springframework
    spring-webmvc
    5.2.6.RELEASE



    javax.servlet
    servlet-api
    2.5
    provided



    javax.servlet.jsp
    jsp-api
    2.0
    provided


    junit
    junit
    4.11
    test


    com.fasterxml.jackson.core
    jackson-databind
    2.9.0


    com.fasterxml.jackson.core
    jackson-core
    2.9.0


    com.fasterxml.jackson.core
    jackson-annotations
    2.9.0

这里注意,由于我们这个是JavaWeb项目,一定要添加Servlet和JSP的坐标。

1.2、在项目中创建存放源码和配置文件的目录

在src/main目录下创建java和resources两个目录,java目录用来存放Java源码,resources用来存放配置文件。这样创建的目录是普通目录,编译时不能被正确识别,此时还需要进行如下操作:

  1. 在java目录上右键-->Make Directory as-->Sources root;
  2. 在resources目录上右键-->Make Directory as-->Resources Root;

以后的教程里面,只要涉及到Maven的Java Web工程,都要这样做。

1.3、编写SpringMVC的配置文件

在resources目录下新建springmvc.xml。



    
    
    
    
        
        
    

    
    
    
    

    
    

1.4、在web.xml中添加配置




  Archetype Created Web Application
  
  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:springmvc.xml
    
    
    1
  
  
    dispatcherServlet
    /
  

  
  
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
  
  
    characterEncodingFilter
    /*
  

1.5、增加jquery文件

在webapp目录下新建js目录,拷贝jquery文件到该目录下。

二、返回值类型

这里的返回值类型是指控制器方法的返回值类型。

2.1、字符串

Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

2.1.1、编写控制器类

package org.codeaction.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ResultController {
    @RequestMapping("/testString")
    public String testString() {
        System.out.println("hello...");
        return "success";
    }
}

2.1.2、编写相关页面

index.jsp,在webapp目录下

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>


    

测试返回字符串

这里有一个超链接,用来访问控制器类。

在WEB-INF目录下创建pages目录,编写success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>

    
        SUCCESS
    
    
        

Success

2.1.3、启动tomcat服务器测试

在idea中配置tomcat服务器,运行。

在地址栏输入http://localhost:8080/result/index.jsp,点击弹出页面中的超链接,页面显示Success

2.2、void

如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。

可以通过在控制器方法绑定ServletAPI的方式绑定requestresponse,实现转发、重定向、响应特定数据。

2.2.1、在控制器类中添加方法

在ResultController中添加如下的方法

    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("void...");
        //1.转发
        //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
        //2.重定向
        //response.sendRedirect(request.getContextPath() + "/testString");
        //3.向浏览器返回数据
        PrintWriter out = response.getWriter();
        out.println("hahahahaha....");
    }

1、2、3是三个功能,测试的时候要分别测试。

2.2.2、编写相关页面

在index.jsp中添加如下内容

测试返回void

2.3、ModelAndView

ModelAndView是SpringMVC为我们提供的一个对象,该对象可以用作控制器方法的返回值。

2.3.1、在控制器类中添加方法

在ResultController中添加如下的方法

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView() {
    //创建ModelAndView对象
    ModelAndView mv = new ModelAndView();

    //创建User对象
    User user = new User();
    user.setName("Tom");
    user.setAge(10);

    //在request域中存放名为user的对象
    mv.addObject("user", user);
    //设置逻辑视图名称
    mv.setViewName("success");

    //返回ModelAndView
    return mv;
}

注意:这里在ModelAndView中添加的对象是保存在了request域当中。

2.3.2、修改相关页面

在index.jsp中添加如下内容

测试返回ModelAndView

在success.jsp中添加如下内容

name:${requestScope.user.name}

age:${requestScope.user.age}

2.3.3、启动tomcat服务器测试

点击超链接,浏览器显示如下

Success
name:Tom
age:10

三、转发和重定向

目前已知的转发方式:

  • 通过控制器方法绑定ServletAPI的方式绑定request,通过request实现转发;
  • 通过返回ModelAndView,设置View实现转发。

目前已知的重定向方式:

  • 通过控制器方法绑定ServletAPI的方式绑定response,通过response实现转发。

除了上面的方式,也可以SpringMVC框架提供的方式进行转发和重定向。

3.1、转发

新建控制器类

package org.codeaction.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class JumpController {

    //转发
    @RequestMapping("/testForward")
    public String testForward() {
        System.out.println("testForward...");
        return "forward:/WEB-INF/pages/success.jsp";
    }
}

通过forward关键字实现转发,由于这里不走视图解析器了,需要写完整的路径。

3.2、重定向

在控制器类JumpController中添加如下方法

//重定向
@RequestMapping("/testRedirect")
public String testRedirect() {
    System.out.println("testRedirect");
    return "redirect:/testString";
}

3.3、修改相关页面

在index.jsp中添加如下内容

测试转发

测试重定向

启动tomcat服务器,分别点击两个超链接,实现转发和重定向的功能。

四、ResponseBody响应JSON数据

作用:将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据。

前提:需要在pom.xml中加入jackson的包,我们之前的环境搭建中已经添加了相应坐标。

4.1、编写控制器类

package org.codeaction.controller;

import org.codeaction.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class JsonController {

    @RequestMapping("/testJSON")
    @ResponseBody
    public User testJSON(@RequestBody User user) {
        System.out.println(user);
        return user;
    }
}

4.2、修改相关页面

修改index.jsp,引入jQuery,添加JS代码,如下:



添加触发JS操作的按钮

你可能感兴趣的:(SpringMVC02_响应数据和结果视图)