SpringMVC-Controller

Controller控制器

和mybatis不同,在springmvc中,注解开发才是主流,所以接下来都会使用注解来开发。

被@Controller标注的类是一个控制器类,其中的每一个方法都是一个控制器,都各自映射一个url地址

在spring中我们说过,使用注解的时候需要在spring的配置文件中开启注解扫描

1
2
<context:component-scan base-package="com.lizhi.controller"/>
<!--这里最好写到controller包,因为该配置文件专注于处理Controller层的事情,不要将包扫描的范围扩大-->

回顾spring中的常用注册bean的注解

1
2
3
4
5
@Component       普通组件
@Service 服务层
@Repository 持久层
@Mapper mybatis的接口层
@Controller 控制器层

因为我们配置的DispatcherServlet会拦截所有的请求,但是对于静态资源,我们不需要拦截对他做出处理,所以有了以下配置

1
2
<!--   Springmvc不处理静态文件-->
<mvc:default-servlet-handler/>

@RequestMapping

该注解可以作用于类上面或者方法上面

  1. 方法上面

该方法映射的url地址即为注解中的值

  1. 类上面

当其作用在类上面的时候,该控制器类中所有的方法的映射路径的前面都会加上该注解中的值

@GetMapping 该注解代表请求是get请求

@PostMapping 该注解代表请求是post请求

@PutMapping 该注解代表请求是put请求

@DeleteMapping该注解代表请求是delete请求

@RestController

当类上不是@Controller注解而是@RestController时候,该类中所有的方法返回的值,不会跳转视图,而是返回JSON字符串

如果不想让类中所有的方法都返回字符串

则类上面使用@Controller注解,方法上使用@ResponseBody标注此方法返回的结果是一个JSON字符串不要被视图解析器解析

RestFul风格

概念:RestFul就是一个资源定位及资源操作的风格。

它不是标准也不是协议,它就只是一个style。基于这种风格设计的软件可以更加简洁,更有层次,并且安全,更易于实现缓存等机制

传统方式操作资源通过不用的参数来实现不同的功能,方法单一,post和get

  • http:/locoalhost:8080/item/insertItem post提交
  • http:/locoalhost:8080/item/deleteitem get提交
  • http:/locoalhost:8080/item/queryItem get提交
  • http:/locoalhost:8080/item/updateitem post提交

使用RestFul风格操作资源

  • http:/locoalhost:8080/item/add/参数/参数/…
  • http:/locoalhost:8080/item/update/参数/…
  • http:/locoalhost:8080/item/query/参数/…
  • http:/locoalhost:8080/item/update/参数/…

本质其实就是通过不同的提交方式走不同的方法

结果跳转方式

控制器最后直接return字符串的话默认请求转发

如果想要重定向字符串前面加“**redirect:**”即可

处理前端数据

  1. 如果提交参数的名称和方法的参数名一致的话,

    提交数据:http://localhost:8080/user/add?name=lizhi&age=20

1
2
3
4
@GetMapping("user/add")
public String test01(String name,int age,Model model){
return "user";
}
  1. 如果提交参数和方法参数不一致的话

    提交数据:http://localhost:8080/user/add?username=lizhi&userage=20

1
2
3
4
@GetMapping("user/add")
public String add(@RequestParam("username") String name,@RequestParam("userage")int age,Model model){
return "user";
}
  1. 如果提交的是一个对象

    提交数据:http://localhost:8080/user/add

    要求提交的表单要和属性的属性名一致,方法参数即可直接使用对象

1
2
3
4
@PostMapping("user/add")
public String add(User user,Model model){
return "user";
}

返回前端数据

  1. ModelAndView

该对象在初识mvc的时候已经见过,不再赘述

  1. Model(这是一个接口)

该对象在使用注解开发的时候也已经见过,这里也不再赘述

  1. ModelMap

ModelMap实现了Model接口,继承了LinkedHashMap,所以它更强大,但是大部分情况下Model会更常用

给作者买杯咖啡吧~~~