如果想直接在处理器/控制器里使用response向客户端写回数据,可以通过返回null来告诉DispatcherServlet我们已经写出响应了。
response.getWriter().write("Hello World!!");
return null;
不使用注解:
Spring默认提供了一些Controller接口的实现类以方便我们使用,我们写一个Controller的时候可以继承AbstractController然后实现handleRequestInternal方法即可。
基于注解的SpringMVC:
之前所看到的所有的xml配置,如果替换成基于注解只需要在spring的xml文件中做如下配置:
<mvc:annotation-driven/>
<context:component-scan base-package="com.briup.web.controller"></context:component-scan>
在Spring中,
处理器类可以使用 @Controller注解
业务逻辑层可以使用 @Service注解
数据持久层可以使用 @Repository注解
1,基于注解的Controller
使用注解后,就不需要再实现特定的接口,任意一个javaBean对象都可以当做处理器对象,对象中任意一个方法都可以作为处理器方法。
只需
在类上加上 @Controller注解
方法上加上 @RequestMapping注解
即可
Spring2.5中引入注解:
@Controller
用于标识是控制器/处理器类;
@RequestMapping
请求到处理器功能方法的映射规则;
@RequestParam
请求参数到处理器功能处理方法的方法参数上的绑定;
Spring3引入了更多的注解:
@RequestHeader
请求头数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody
请求的body体的绑定
URL路径映射限定:
1,普通URL路径映射
@RequestMapping("/hello")
2,URI模板模式映射
@RequestMapping(value="/users/{userId}")
{XXX}占位符
@PathVariable:可用 方法名(@PathVariable int userId)来接收
3,Ant风格的URL路径映射
4,正则表达式风格的URL路径映射:
之前js的学习文档,和java的正则几乎一致,js正则中的一个/变为java中的俩个/即可
请求方法映射限定:
@RequestMapping(value="/hello", method={RequestMethod.POST,RequestMethod.GET})
可以匹配"/hello",并且请求方式只能是POST或者GET
请求参数映射限定:
1)请求数据中有指定参数名
@RequestMapping("/test")
@Controller
public class HomeController {
@RequestMapping(params="create",method=RequestMethod.GET)
public ModelAndView test1(){
return null;
}
可以匹配的路径为:/test?create,get方式请求
2)请求数据中没有指定参数名
@RequestMapping(params="!create", method=RequestMethod.GET)
请求头数据映射限定:
请求头数据中有指定参数名
@RequestMapping(value="/header/test1", headers="Accept")
表示请求的URL必须为"/header/test1"且请求头中必须有Accept参数才能匹配。
js对象转成json格式字符串:
var obj ={id:,name:"tom",age:20};
var jSonStr = JSON.stringify(obj);
json格式字符串转成js对象:
jSonStr = '{"id":1,"name":"tom","age":20}';
obj = JSON.parse(jSonStr);
Controller接收客户端传的参数:
1)参数是基本数据类型/包装类型/String
@RequestMapping("test")
public String test(int age){...}
注意参数名字要和客户端传的参数名一致,否则需要使用@RequestParam来指定参数名
2)参数是数组类型
3)参数是类类型(例如实体类Uesr、Student等) 可以使用@RequestBody来接收
注意客户端传值类似于这样:
username=tom&password=123&dob=2017-10-21
注意:
1.username/password/dob必须是User中存在的property
2.日期类型的转换
。。。。。。