我在使用Spring MVC框架方面有一些经验,但是,我仍然有疑问。据我所知,它是一个MVC框架,它有助于使用MVC设计模式编写Web应用程序。
现在,当我试图更好地理解它时,我开始知道它基本上使用了两种设计模式:“前控制器”,然后是“MVC”设计模式。
我理解的第一部分,“前端控制器”由Spring MVC以DispatcherServlet
的形式提供,它拦截了所有传入的请求。
Spring MVC框架中的“MVC框架”在哪里?据我所知,是编写控制器,模型,视图的开发人员。如果开发人员没有编写代码,比如控制器,那么这个框架就没有提供控制器。
我很难在开发人员必须编写所有代码时,Spring MVC如何支持MVC模式。
答案 0 :(得分:1)
让我以控制器为例来解释这一点。
是的。乍一看,看起来Spring似乎什么也没做。
可能是因为应用程序代码和框架之间的集成代码被Annotations减少了。所以开发人员只是没有注意到单个单词" @Controller"并开始搜索" MVC"在哪里?
Spring 2.5控制器示例:
由于这个" 实施控制器",Spring的角色更引人注目。
import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller {
}
Spring 4 Controller:
现在Spring的贡献不太明显/可见。 或多或少此类可能看起来像我们自己的普通 java类, out 任何框架。
@Controller
@RequestMapping("/")
public class HelloWorldController {
MVC是体系结构模式,它定义了应用程序组件的体系结构以及这些组件之间的交互(请求/数据流)。 / p>
始终开发人员必须自己编写业务/应用程序逻辑。
开发人员扩展 Spring MVC 控制器。 开发人员正在扩展 Spring MVC 模型。 开发人员在请求URL和控制器方法之间执行请求映射。 但是,当请求到来时,这种映射是如何发生的? - 这是Spring MVC的职责,应用程序开发人员无需费心。
在简单的旧Servlet时代中,应用程序开发人员通过提及http方法和doGet(),doPost()等来完成映射。
同样,模型使用 @Repository 进行注释。 而View是旧时的JSP或现代的角度JS ......
所以,简而言之,MVC就在那里,但现在不那么明显。
我希望这个答案能给出一些见解。
答案 1 :(得分:1)
看看这个例子:
@Controller
public class HomeController {
@Autowired
private IHomeService service;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
model.addAttribute("data", service.getHomeContainer()); // model is just a map...
//
// create html response using model + home.jsp
// former usage: return new ModelAndView("home");
//
return "home";
}
}
因此,您不必实施@Controller
,Model
和View
的实习生协作和生命周期。春天为你做。你只需要以你上面看到的方式初始化并调用它们。
最后,我相信MVC的主要思想和好处是分而治之:
@Controller
- 级别@Service
- 级别答案 2 :(得分:0)
Dispatcher Servlet是Spring MVC的前端控制器,它拦截应用程序的所有URL。但是,您(开发人员)必须编写自己的控制器来处理请求。前端控制器是联系人的初始点(因此提供应用程序的中心入口点),而dev编写的控制器实际上处理请求。
前端控制器将URL映射到正确的处理程序。