SpringMVC第四天
SpringMVC第四天
一、resultful风格
1.简介
2.特点
(2)客户端和服务器之间,传递这个资源的某种表现层。
(3)客户端通过四个http动词,对服务器资源进行操作。实现表现层状态的转化。
3.使用规定
在http协议中,四个表示操作方式的动词:GET/POST/PUT/DELETE,他们分别对应四种基本操作。
GET:对应select:是从服务器查询,可以在服务器通过请求的参数区分查询的方式。
POST:对应create:在服务器新建立一个资源,调用insert操作。
PUT:对应update操作:在服务器更新资源,调用update操作。
DELETE:对应delete操作,从服务器删除资源,调用delete语句。
4.SpringMVC实现resultful接口
1.四种动作
Spring MVc 对resstful应用提供了以下支持。
利用@RequestMapping 指定要处理请求的url模板和http请求的动作类型。
利用@PathVariable将url请求模板中的变量映射到处理方法参数上。
前台利用AJAX,在客户端发出put、delete动作的请求。
一般的应用格式如下:
@RequestMapping(value="{id}",method=RequestMethod.GET)
@RequestMapping(value="{id}",method=RequestMethod.POST)
@RequestMapping(value="{id}",method=RequestMethod.DELETE)
@RequestMapping(value="{id}",method=RequestMethod.PUT)
2.HiddentHttpMethodFilter
由于浏览器 form 表单只支持 GET 与 POST 请求,而 DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,
可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持 GET、POST、PUT与 DELETE 请求。
3.参考例子
<filter> <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2)控制器中示例代码:
@RequestMapping(value="{id}",method=RequestMethod.POST) public String insert(@PathVariable("id") int id,User user) { System.out.println(id); System.out.println(user); return "list"; } @RequestMapping(value="{id}",method=RequestMethod.GET) public String find(@PathVariable("id") int id) throws Exception { System.out.println(id); return "list"; } @RequestMapping(method=RequestMethod.PUT) @ResponseBody public String update(User user) { System.out.println(user); return "list"; } @RequestMapping(value="{id}", method=RequestMethod.DELETE) @ResponseBody public String update(@PathVariable int id) { System.out.println(id); return "list"; }
由于浏览器只支持get和set,所以前端要传递put和delete ,就只能将表单提交方式改为post,然后增加一个input标签,name属性为_method,value值为PUT或DELETE
二、SpringMVC异常处理
1.异常处理的思路
2.编写异常类和错误页面
@RequestMapping(value="{id}",method=RequestMethod.GET) public String find(@PathVariable("id") int id) throws Exception { System.out.println(id); if (id==0) { throw new Exception("参数异常"); } return "list"; } @ExceptionHandler //局部处理异常 public ModelAndView error(Exception exception) { ModelAndView mv = new ModelAndView(); mv.addObject("error",exception.getMessage()); mv.setViewName("error"); //异常页面名 return mv; }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!--错误信息--> ${error } </body> </html>
上述的是局部异常处理,可以用全局异常处理,可以新建一个处理异常的类
package com.zhiyou100.zfx.controller; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice public class ExceptionController { @ExceptionHandler //全局异常 public ModelAndView error(Exception exception) { ModelAndView mv = new ModelAndView(); mv.addObject("error",exception.getMessage()); mv.setViewName("error"); return mv; } }