使用@RequestMapping映射请求
在POJO类定义处标@Controller,再通过<context:component-scan/>扫描相应的类包就可以使POJO成为一个能处理Http请求的控制器,一个业务可以安排一个控制器处理,比如LogonController UserController等。
在控制器的类定义及方法定义处都可以标注@ReqestMapping,类定义处的该标注提供初步的请求映射信息,方法处的则提供进一步的细分映信息。
将请求映射到控制器处理方法的工作包含一系列的映射规则,这些规则是根据请求中的各种信息定制的,具体包括请求URL,请求参数,请求方法,请求头这四个方面的信息项。
@Controller @RequestMapping("index") public class IndexController { //使用请求方法及请求参数映射 @RequestMapping(value="helloWorld",method=RequestMethod.POST,params="userId") public String helloworld() { // return "success"; //跳转到success页面 return "index"; } //使用报文头映射 @RequestMapping(value="helloWorld",headers="content-type=text/*") public String helloworld() { // return "success"; //跳转到success页面 return "index"; }
}
这里就是简单的接收url为index的请求,然后处理。这里说明的是@RequestMapping不但支持标准的URL,还支持Ant风格(即?,*和**字符和带{}占位符的RUL)下面例子:
/user/*/createUser :匹配/user/aaa/creatUser等
/user/**/createUser :匹配/user/createUser /user/aaa/bbb/creatUser
/user/createUser??: 匹配/user/createUseraa /user/creatUserbb
/user/{userId}:匹配 user/aaa等
总之可以用你自己的想象各种偷懒。
@RequestMapping除了可以使用请求URL映射外,还可以使用请求方法,请求头及参数(报文体和URL包含的参数)上面代码已经写好说明。
请求处理的方法签名有如下:
1使用@RequestParam绑定请求参数值
@RequestMapping(value="/handlle11") public String handle11(@RequestParam(value="userName",required=false)String userName,@RequestParam("age") int age) { }
2使用@CookieValue 绑定请求中的Cookie值,可以让入参绑定某Cookie的 值
@RequestMapping(value="/handle12") public String handle12(@CookieValue(value="sessionId",required=false)String sessionId,@RequestParam("age") int age){}
3使用@RequestHeader 绑定请求报文头的属性值
@RequestMapping(value="/handle13") public String handle13(@RequestHeader("Accept-Encoding")String encoding,@RequestHeader("Keep-Alive") long keepAlive){}
4使用命令/表单对象绑定请求参数值(这个最常用,他还支持级联的属性名。。)
@RequestMapping(value="/handle14") public String handle14(User user){}
5使用Servlet Api对象作为入参
@Controller @RequestMapping("index") public class IndexController { //使用请求方法及请求参数映射 @RequestMapping("/user") public String handle21(HttpServletRequest request,HttpServletResponse response) { String userName=WebUtils.findParameterValue(request,"userName"); response.addCookie(new Cookie("userName"),userName); } //使用报文头映射 @RequestMapping("/user2") public String handle22(HttpSession session) { session.setAttribute("sessionId",1234) return "index"; }
6使用IO对象作为入参
@RequestMapping(value="/handle31") public String handle31(OutputStream os) throws IOException{ Resource res=new ClassPathResource("/image.jpg"); FileCopyUtile.copy(res.getInputStream(),os);//将图片写入输出流中 }