SpringMVC回顾总结


1、开发流程

  • 导入SpringMVC的依赖包
  • 配置SpringMVC的核心控制器DispatcherServlet
  • 创建Controller类和视图页面
  • 配置Controller中业务方法的映射地址
  • 编写SpringMVC的核心配置文件spring-mvc.xml

pom.xml


org.springframework
spring-webmvc
5.2.14.RELEASE


javax.servlet
javax.servlet-api
4.0.0
provided


javax.servlet.jsp
javax.servlet.jsp-api
2.3.3
provided


junit
junit
4.11
test

web.xml


dispatcherServlet
org.springframework.web.servlet.DispatcherServlet


  contextConfigLocation
  classpath:spring-mvc.xml

1


dispatcherServlet
/

DemoController.java

@Controller
@RequestMapping("/demo")
public class DemoController {

 // 当前请求资源路径:http://localhost:8080/demo/test
     @RequestMapping("/test")
 public String test() {
     System.out.println("SpringMVC执行……");
     // 表示从当前资源所在路径下(http://localhost:8080/demo/)寻找视图
     // return "success.jsp";
     // 表示从项目根路径下(http://localhost:8080/)寻找视图
     // return "forward:/page/forward.jsp";// 页面转发,相当于request.getRequestDispatcher().forward();
     return "redirect:/redirect.jsp";// 重定向,相当于response.sendRedirect(); 无法访问WEB-INF下的资源
 }
}

success.jsp

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


success


success!

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>




2、SpringMVC执行流程

3、SpringMVC数据响应方式

页面跳转:

  • 直接返回字符串:将字符串与视图解析器的前后缀(如果配置了)进行拼接
  • 通过ModelAndView对象返回


 
 
 
 

返回字符串:

注意:一旦配置了视图解析器,那么页面转发时,SpringMVC会将当前返回的字符串拼接上配置的前后缀作为完整的视图名称去寻找资源。也就是说,此时能再写“forward:”

@RequestMapping("/test1")
public String test1(HttpServletRequest request) {
 request.setAttribute("username","abc");
 // 默认页面转发,若配置了上面的示例的视图解析器的前后缀,则此时将返回/WEB-INF/page/forward.jsp这个页面
 return "forward";
}

@RequestMapping("/test2")
public String test2() {
 // 重定向,要注意此时无法访问WEB-INF下的资源
 return "redirect:/page/redirect.jsp";
}

返回ModelAndView对象

@RequestMapping("/test3")
public ModelAndView test3() {
 ModelAndView mav = new ModelAndView();
 mav.setViewName("success");
 mav.addObject("username", "tom");
 return mav;
}

@RequestMapping("/test4")
public ModelAndView test4(ModelAndView mav) {
 mav.setViewName("success");
 mav.addObject("username", "jerry");
 return mav;
}

jsp页面样例:

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


 success


 

success! ${username}

回写数据:

只需要在方法上添加注解@ResponseBody即可

普通字符串:

@RequestMapping("/test5")
@ResponseBody
public String test5() {
 return "ResponseBody";
}

以json方式返回对象或者集合:



 com.fasterxml.jackson.core
 jackson-core
 2.11.4


 com.fasterxml.jackson.core
 jackson-annotations
 2.11.4


 com.fasterxml.jackson.core
 jackson-databind
 2.11.4

SpringMVC配置文件中:



@RequestMapping("/test6")
@ResponseBody
public Map test6() {
 Map map = new HashMap();
 map.put(1, "abc");
 map.put(2, "dkd");
 map.put(3, "asdd");
 map.put(4, "1111");
 return map;
}