码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC

时间:2018-04-06 18:42:10      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:关注   pos   not   mit   empty   业务逻辑   project   require   数据   

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);
}

 

Spring MVC

标签:关注   pos   not   mit   empty   业务逻辑   project   require   数据   

原文地址:https://www.cnblogs.com/Rage-Leila/p/8728167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!