Model-View-Controller 开发web的通用框架
MVC的核心思想是业务数据抽取同业务数据呈现相分离
View:视图层
  为用户提供UI重点关注数据的呈现
Model:模型层
  业务数据的信息表示,关注支撑业务的信息构成,通常是多个业务实体的组合。
Controller:控制层
  调用业务逻辑产生合适的数据(model),传递数据给视图层用于呈现。
View--- DispacherServlet-(model)-Controller
基本概念
 DispacherServlet
 HandlerAdapter(适配器)
 HandlerInterceptor(拦截器):给在前端控制器调用Controller方法之前、之后提供操作方法:preHandle()、postHandle()、afterCompletion()
 HandlerMapping(前段控制器与Controller之间的映射关系、wrap controller with HandlerInterceptor
 HandlerExecutionChain
	preHandle -->Controller method-->postHandle-->afterCompletion(使用了java的反射机制)
 ModelAndView(Model\Map):Model的具体表现
 ViewResolver(视图解析器):告诉DispacherServlet要用哪一个视图来进行视图的呈现
 View:jstl、jsp、tiles等,视图
Maven
POM(Project Object Model)pom.xml文件
Dependency
Coordinates(坐标):groupId、artifactId、version、packaging四个属性确定唯一坐标
DispacherServlet 上下文
启用Spring基于annotation的DI,使用户可以在spring MVC中使用Spring的强大功能。
激活@Required @Autowired,等标注
<context:annotation-config/>
<context:component-scan>
扩充了注解驱动,可以请求参数绑定到控制器参数
<mvc:annotation-driven/>
静态资源处理
<mvc:resource mapping="" location=""/>
有关文件上传的配置,添加如下bean:
org.springframework.web.multipart.commons.CommonsMultipartResolver
ContentNegotiationViewResolver:设置不同的视图呈现
jetty
mvn jetty:run
@RequestMapping 设置url
Controller中的三种方式获得参数
(1)@RequestParam
@RequestMapping(value="abc",method=RequestMethod.GET)
public String method(@RequestParam("param")String param,Model model){
	logger.info("param:{}",param);
	model.addAttribute("param","param");
	return "show";
}
//该Controller的访问路径:/root/abc?param=123
(2)@PathVariable
@RequestMapping(value="/abc/{param}",method=RequestMethod.GET)
public String method(@PathVariable String param,Map<String,Object> model){
	logger.info("param:{}"+param);
	model.put("param","param");
	return "show";
}
//该Controller的访问路径:/root/abc/param
(3)HttpSeverletRequest
@RequestMapping(value="abc",method=RequestMethod.GET)
public String method(HttpSeverletRequest request){
	String param = request.getParameter("param");
	logger.info("param:{}"+param);
	request.setAttribute("param","param");
	return "redirect:show";//重定向or请求转发
}
//该Controller的访问路径:/root/abc?param=123
redirect请求重定向
ReflectionToStringBuilder.toString(Object)//可打印出一个类
文件上传的jsp部分
<form method="post" action="/root/doUpload" enctype="multipart/form-data">
	<input type="file" name"file"/>
	<inpute type="submit"/>
</form>
Controller部分
@RequestMapping(value="doUpload",method=RequestMethod.post)
public String doUpload(@RequestParam("file")MultipartFile file){
	if(!file.isEmpty()){
		FileUtils.copyInputStreamToFile(file.getInputStream(), new File("/Users/macbookair/Desktop"+System.currentTimeMillis()+file.getOriginalFilename()));
	}
	return "success";
}
jspView\jsonView 
让页面以Json格式呈现的方法
(1)给方法的返回类型前加注解@ResponseBody
(2)让方法的返回类型设置为ResponseEntity<Object>  //Object为返回的类(实际模型数据)
	@RequestMapping(value="/abc/{courseId}",method=RequestMethod.GET)
	public ResponseEntity<Course> getCourseInJson(@PathVariable Integer courseId){
		Course course = courseService.getCoursebyId(courseId);
		return new ResponseEntity<Course>(course,HttpStatus.OK);
	}
 
        