在各种开发框架出现之前,是Web开发的洪荒时期,在Servlet标准与Servlet容器出现后,开拓了Java Web开发的领域,但是原始的Servlet容器还是比较低级的,要开发大型应用,会导致Servlet组件的逻辑异常复杂,甚至充斥着各种判断与硬编码, 而Spring MVC框架则完美地解决了此问题,通过注解标记机制,形成了应用层无需判断,只需关注处理逻辑即可开发的方式
Spring Web相关的模块都是支持Web项项目开发的模块,其中具有名的就是Spring MVC框架,基于Spring MVC框架开发Web应用将会非常方便,下面就简单介绍一下Spring MVC框架
随着Web应用开发的发展, 项目也会越来越臃肿, 用原来随心所欲的方式编写Web应用已经力不从心了,项目越大,维护成本也会越高。此时就出现了MVC设计模式,MVC全名是Model-View-Controller,即模型视图-控制器。其基本核心思想是分离视图页面、模型数据和业务逻辑,通过分层结构达到各层之间解耦的目的。通过各层的解耦,可以实现每一层单独替换的目的,同一套数据可以通过不同的视图层展示,达到逻辑复用的目的。
在Web开发趋近于MVC模式之时,Spring 也随之推出了Spring MVC框架,并与Spring框架无缝整合,为Java Web开发提供了强有力的框架。
Spring MVC的核心处理器是标记为Controller的Java Bean,在Spring MVC中,为Web开发提供了众多方便的功能,下面简单举例。
Spring MVC提供@Controller声明Java Bean,并标记为MVC中的Cortoller. 通过@RequesMapping注解标记控制器的方法为处理器方法,为Web请求自动查找相应的@RequestMapping标记的方法并调用。
例子演示
1@Controller
public class MyController {
3 @RequestMapping(value = "/some.do")
public ModelAndView dosome(){
//...
}
}
第1行表示创建控制器对象,对象放在springmvc容器中 。
第3行表示可以接受/some.do的请求,并在处理器中执行,返回视图模型。
自动把Web请求中的参数解析并绑定到注解标记的处理器方法参数上,在控制器方法中可以直接获取到Web请求中提交的参数。支持多种参数绑定,如请求参数、 请求体JSON等。
例子演示
@Controller
public class MyController {
3 @RequestMapping(value = "/receiverparam.do",method = RequestMethod.POST)
4 public ModelAndView firstdo(String name,String age){
}
第3行表示,可以接受/receiverparam.do的请求,并且通过post方式提交(可以是前端的form表单提交)。第4行表示,接受该请求中可以携带name,age参数到处理器中(前端表单里的信息可以被提交)
支持多种返回值,支持返回Sring类型的View视图名、View 视图、MolelAndViev 模型视图、Java 实体返回为JSON等多种返回类型。
例子演示
@Controller
public class MyController {
@RequestMapping(value = "/returnobjectjson.do")
4 @ResponseBody
public Student receive(String name,String age){ //doGet
Student student = new Student();
student.setAge("12");
student.setName("zl");
9 return student;
}
第4行表示,将转换后的JSON数据放入到响应体中。第9行表示Java 实体返回为JSON
Model可以作为参数自动绑定到控制方法中,在控制器逻辑中可以对Model进行操作,例如添加”些数据以供View使用。当然也可以用返回ModelAndView的形式支持Model模型。
例子演示
@Controller
public class MyController {
@RequestMapping(value = "/other.do")
public ModelAndView doother(){ //doGet
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","====欢迎使用springmvc做web开发===");
modelAndView.addObject("fun","doother");
modelAndView.setViewName("other");
9 return modelAndView;
}
}
第9行表示返回ModelAndView的形式
包括JSP、FreeMarker、 Thymeleaf 等多种模板引擎。
支持对控制器层发生的错误进行统一的处理, 包括根据不同的异常返回不同的视图等功能。