因为之前没有做过web项目,只是大概了解了下,那么功能先一步一步来。
首先是controller部分,客户端发起的请求都是先进入这里进行业务解析,分发到对应的service去。(采用注解 Controller方式,相对傻瓜自动化)
转一下博文http://blog.csdn.net/u014010769/article/details/47354529
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
个人理解,实际工程内,通过controller自动注解,HTTP请求根据URL地址,自动从controller寻找合适的入口,然后controller内业务代码提取请求包含的一些参数对象,转给serviceimpl实现具体功能,比如查询数据,检查匹配等(serviceimpl通过dao对数据库进行交互)。最后返回视图,并传递参数。入门菜鸟一个,没有深入研究代码,只能做些肤浅的了解了。
建立可被扫描到的controller相关的包,建立类,通过注解Controller RequestMapping(“/aaa”)完成映射关系 可实现多级地址映射
例子:3种不同地址映射方式
代码是照着imooc课程学习时候敲的,基础型的课程都是免费的,入门不错。代码敲一敲记的更牢。
@Controller
@RequestMapping("/courses") //拦截地址
public class coursecontroller {
private courseservice cos;
@Autowired
public void setcos(courseservice cooo){
this.cos=cooo;
}
// 发送地址 ***/courses/view?id=xxx实现查询
@RequestMapping(value="view",method=RequestMethod.GET)//拦截地址 绑定url参数到方法的参数
public String viewcourse(@RequestParam("id") Integer id,Model mod){
courseco=cos.getCoursebyId(id);
mod.addAttribute(co); 添加attribute
return "course";返回视图
}
// /courses/view2/{courseid} restful风格
@RequestMapping(value="/view2/{ID}",method=RequestMethod.GET)
public String viewcourse2(@PathVariable("ID") Integer id,Map<String,Object>model){
courseco=cos.getCoursebyId(id);
model.put("course",co);
return "course";
}
// /courses/view3?courseid=111
@RequestMapping("/view3")
public String viewcourse3(HttpServletRequest request){
Integerid=Integer.valueOf(request.getParameter("courseid"));
courseco=cos.getCoursebyId(id);
request.setAttribute("course", co);
return "course";
}
}
可以去掉里面具体的逻辑代码,做个简单的jsp页面先实现一下映射方式,后续加入service dao 数据库功能。
关于参数的传递
JSP-》controller
1 简单类型,用@RequestParam("id")
public String viewcourse(@RequestParam("id") Integer id,Model mod)
2 对象