1. RESTful
RESTful 全称为:representational state transfer,即表现层状态转移,它只是一种风格,而非其他什么的,符合 RESTful 风格的 API 就可以成为 RESTful API。具体关于该概念的解释可以参考本文。
比如说对于以下定义的 Controller:
如果不使用 @PathVariable 注解,那么通过请求 localhost:10086/commit?p1=1&p2=2 就可以跳转到视图 hello 进行结果的展示。如果使用了 @PathVariable 注解,那么 url 就可以变为 localhost:10086/commit/1/2 这种风格。
此外,对于资源的操作,在 RESTful 风格中是不允许存在的,比如说 HTTP 请求方法中的 POST/DELETE/PUT/GET 分别代表着对资源的 CRUD 操作,而操作的具体方法是不允许出现在 RESTful 风格的 api 中的,只出现名次,不能出现动词是符合 RESTful 风格的基本。而在 SpringMVC 中,提供了对应不同请求方法的注解。
- GetMapping:等价于
RequestMapping(method=RequestMethod.GET) - PostMapping
- PutMapping
- DeleteMapping
- PatchMapping
2. 结果跳转
2.1 ModelAndView
设置 ModelAndView 对象,根据 view 的名称与视图解析器跳转到指定的页面。
页面:prefix + viewname + suffix
2.2 Servlet API
通过设置 ServletApi,就不需要视图解析器了。
- 通过 HttpServletResponse 进行输出
- 通过 HttpServletResponse 进行重定向
- 通过 HttpServletRequest 进行转发
2.3 SpringMVC
通过SpringMVC来实现转发与重定向,同样也不需要视图解析器。只需要在路径前加上 forward 或 redirect 即代表转发或重定向。
3. 数据处理
3.1 处理提交数据
- 前端提交的属性名称与后端方法参数名一致(localhost:10086/hello?name=tianyichen),控制台输出:tianyichen

- 前端提交的属性名称与后端方法参数名不一致,需要后端给方法参数添加
@RequestParam,其目的就是使得在参数名不一致的情况下,能够成功匹配

- 前端提供的是一个对象,可以分别将对象的属性作为参数传递给后端,后端会根据参数的情况来构造对象,比如前端请求了如下 url:http://localhost:10086/user?id=1&age=26&name=xiaotian,后端代码如下图,那么后台输出:
User(id=1, name=xiaotian, age=26)。使用这种方式,要保证参数名与对象的属性名一致,否则就拿不到传过来的值


3.2 数据展示到前端
- Model:只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解
- ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性
- ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。
3.3 乱码问题
乱码问题的解决很简单,只需要在 web.xml 中导入一个 SpringMVC 提供的过滤器即可。
<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
