最近在IT面试网做实习,分配的任务是题库去重,之前一直使用php开发很挫的网页,一直想找机会上手mvc框架,有幸这次接触springmvc框架,感受到了分层的好处。
springmvc有效的将表示层(View),控制层(Controller),业务逻辑层(Service),数据访问层(分离开来)。前台jsp负责响应用户输入,展示页面,控制器负责转发请求给Model,需要@Controller声明,Model在把内容传回给视图,具体的业务由Service实现,需要@Service注解声明,Dao只需我们定义接口,配置xml,由mybatis负责实现对象关系映射。
视图和控制器通过@RequestMapping注解关联,method = RequestMethod.GET代表用GET方法请求URI会触发控制器,而method = RequestMethod.POST,代表表单用POST方法提交表单会触发对应的控制器。@ModelAttribute注解可以自动将表单中填充的内容封装到注解的对象中,前提是对象的域与表单的name 一一对应。
控制器的返回值类型前面加@ResponseBody时代表返回的不是页面的地址(要跳转得加redirect:)而是将一定格式的数据(如json格式)返回给当前页面,这样跳转只能在当前页面的js中实现了。
HTTP响应的格式如下
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/json;charset=ISO-8859-1
Content-Length: 122
其他头部信息
空行
Response的Body
何谓控制反转?spring中的控制器类的实例化不再是由程序员new一个了,而是由spring框架控制其生命周期,类何时创建何时调用何时销毁都由spring容器控制,不是由某个程序员所写的类控制。控制反转又称为依赖注入,根本目的是增加代码的可扩展性,使组件依赖于抽象,当组件要与其他对象发生依赖关系时,通过抽象来注入依赖的实际对象。注入的方式有三种,1.接口注入 2.set注入 3.构造注入 现在项目中主要用到了接口注入。
spring3.1之后RedirectAttributes .addFlashAttribute重定向后只能将数据传到新页面的前台,?param=1¶m=2只能将值传到新页面的后台,request.getParamer获取