zoukankan      html  css  js  c++  java
  • java 常用框架 MVC 框架模式 和 SpringMVC 框架模式,分布式等 详解

    1. 框架与设计模式

    框架、设计模式这两个概念很容易被人混淆,但其实这两者之间还是存在差别的。框架通常是代码重用,而设计模式是设计重用。 
    设计模式是对反复出现的问题的解决方案的描述,是一种思想用于处理细节的,比框架更加抽象。框架是已经用代码实现的,可以执行也可以复用。设计模式是比框架更小的元素,一个框架往往会包含一个或者多个设计模式。框架总是针对某一特定领域的,而设计模式则可以适用于各个应用。

    常见的框架模式: 
    MVC, ORM等。

    常见的框架: 
    C++语言的MFC、qt、 gtk,Java语言的SSH,Python语言的django等。

    常见的设计模式: 
    代理模式,抽象工厂模式等23种设计模式。

    2. MVC框架模式

    MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)。

    所谓MVC模型就是将数据、逻辑处理、用户界面分离的一种方法。

    • M(Model, 模型):用于数据处理、逻辑处理。
    • V(View,视图):用于显示用户界面。
    • C(Controller,控制器):根据客户端的请求控制逻辑走向和画面。

    而在Java中,MVC这三个部分则分别对应于 JavaBeans、JSP和Servlet。

    • M = JavaBeans:用于传递数据,拥有与数据相关的逻辑处理。
    • V = JSP:从Model接收数据并生成HTML
    • C = Servlet:接收HTTP请求并控制Model和View

    MVC 更详细的简介 https://blog.csdn.net/qq_21225505/article/details/81666986

    常见的 MVC 框架有Struts1/2,Spring MVC等,实际上都是在最底层的Servlet规范中发展而来的。而不同MVC框架其M(对应JAVA的POJO类)和V(如JSP,HTML等)一般是相同的,最主要的区别在C,它是HTTP处理请求、响应的关键。

    3. SpringMVC框架

    3.1 SpringMVC简介

    springMVC 即 spring web MVC。

    springMVC框架是基于Java的实现了MVC框架模式的请求驱动类型的轻量级框架。前端控制器是DispatcherServlet接口实现类,映射处理器是HandlerMapping接口实现类,视图解析器是ViewResolver接口实现类,页面控制器是Controller接口实现类。SpringMVC的工作流程图如下:

     Spring中的 DispatcherServlet 包为 org.springframework.web.servlet.DispatcherServlet,继承自 HttpServlet 。

    (1)客户端请求提交到前端控制器DispatcherServlet;    ----即 web.xml 文件 。<web-app>.....</web-app> 中 servlet部分。

    <web-app xmlns=.......>
     <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:mvc-dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
     <display-name>appdemo-server</display-name> 
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    </web-app>

    此时根据servlet listener 监听器配置context-param 来自定义该文件的名称和位置。applicationContext.xml

    applicationContext.xml

    • 这个文件将用于创建bean定义,重新定义在全局范围内具有相同名称的任何已定义的 bean。

    •  标签将用于激活 Spring MVC 注释扫描功能,该功能允许使用注释,如 @Controller 和 @RequestMapping 等等。

    • InternalResourceViewResolver 将使用定义的规则来解决视图名称。按照上述定义的规则,一个名称为 hello 的逻辑视图将发送给位于 /WEB-INF/jsp/hello.jsp 中实现的视图。

    (2)前端控制器DispatcherServlet查找一个或者多个映射处理器HandlerMapping,从而确定调用哪个页面控制器Controller对请求进行处理; 
    (3)DispatcherServlet将请求提交给Controller; 
    (4)Controller根据业务逻辑对请求进行处理,并返回ModelAndView; 
    (5)DispatcherServlet查找一个或者多个ViewResolver,得到ModelAndView指定的视图view,并将model中的数据传入视图view中进行渲染; 
    (6)DispatcherServlet将渲染后的视图返回响应;

    由上述过程可见,DispatcherServlet是Spring MVC的核心,它负责协调SpringMVC的各个组成部分对所有的Http请求进行处理,其主要工作如下: 
    (1)截获符合特定格式的Http请求; 
    (2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久层的WebApplicationContext关联起来; 
    (3)初始化Spring MVC的各个组件,并装配到DispatcherServlet中;

    SPring Web MVC 运行的具体过程 ,参考https://blog.csdn.net/qq_18975791/article/details/81069016

    3.2 SpringMVC框架中的接口

    DispatcherServlet接口:Spring提供的前端控制器,所有的请求都是由它来进行分发。在DispatcherServlet将请求分发到对应的Controller之前,需要借助Spring提供的HandlerMapping才能定位到相应的Controller.

    HandlerMapping接口:完成客户请求到Controller的映射。

    Controller接口:需要为并发用户处理请求,在实现Controller接口时,必须保证线程安全且可重用。 
    在Controller完成用户请求的处理,返回ModelAndView对象给DispatcherServlet,ModelAndView对象中包含了模型Model和视图View。 
    从宏观角度进行考虑,DispatcherServlet是整个Web应用的控制器;从微观角度进行考虑,Controller是单个Http请求处理过程的控制器。

    ViewResolver接口:根据ModelAndView对象在web应用查找view视图,并将model中是数据传入到view视图中进行渲染。

    3.3 SpringMVC框架优势

    (1)角色清晰,分工明确,进行更简介的web开发; 
    (2)和其他Spring框架无缝集成; 
    (3)强大的JSP标签库; 
    (4)HandlerMapping, ViewResolver等能够简单地进行定制;

    3.4 SpringMVC常用注解

    1、@Controller

    在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求中的数据经过业务处理层处理后封装为一个Model,然后将该Model返回相应的View进行显示。在SpringMVC中提供了一个非常简单的定义Controller的方法,你无需继承特定的类或者实现特定的接口,你只需要用@Controller注解标记一个类是Controoller,然后采用@RequestMapping和@RequestParam等一些注解用于定于URL和Controller方法之间的映射,这样Controller便能够被外界访问。此外,Controller不会直接依赖HttpServletRequest和HttpServletResponse等HttpServlet对象,这些对象可以通过Controller方法参数来获得。 
    采用@Controller注册一个bean到spring上下文中时,bean默认的ID名称是类名开头字母小写,也可以自己指定bean的名称:

    @Controller
    public class TestController {}
     
    @Controller("test")
    public class TestController {}

    @Controller注解在一个类上,表明该类是一个SpringMVC Controller对象。分发处理器将会扫描使用了该注解的类的所有方法,并检测该类中的方法是否使用了@RequestMapping注解。@Controller注解只是定义一个控制器,@RequestMapping注解的方法才是真正处理请求的处理器。单单使用了Controller注解还不能说明该类就是SpringMVC的控制器,因为这个时候Spring还无法获取该类,我们可以通过如下两种方式将@Controller注解的控制器类交给spring进行管理:

    //方法一
    //在SpringMVC配置文件中定义MyController的bean对象
    <bean class="com.host.app.web.controller.MyController"/>
     
    //方法二
    //在SpringMVC配置文件中告诉Spring去哪里扫描@Controller注解的Controller对象
    <context:component-scan base-package="com.host.app.web.controller"/>

    2、@RequestMapping

    @RequestMapping是一个用来处理请求地址映射的注解,可以用于类或者方法上。当该注解用于类上时,表示该类中所有响应请求的方法都是以该地址为父路径。 
    @RequestMapping注解包含6个属性,下面我们对这6个属性进行分析:

    value:指定请求的实际地址,指定的地址可以是URL Template模式;

    method:指定请求的方法类型;

    consumes:指定请求提交的内容类型(Content-Type),例如application/json,text/html;

    produces:指定返回的内容类型,仅当请求头部中Accept包含指定类型时方法才进行处理;

    params:请求中必须包含某些参数时,方法才进行处理;

    headers:请求header中必须包含某些指定的header值,方法才进行处理;

    3、@Resource和@Autowired

    @Resource和@Autowired都是bean注入时使用,但是其实@Resource并不是spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入; 
    @Resource和@Autowired的共同点:两者都可以使用在字段或者setter方法上,如果使用在了字段上,那么就不再需要setter方法。

    @Resource和@Autowired的不同点:

    @Autowired注解是由spring提供的,需要导入org.springframework.beans.factory.annotation.Autowired,只按照byType进行注入。在默认情况下,它要求依赖的对象必须存在,如果允许null,可以通过属性required设置为false进行设置。如果我们需要辅助通过byName进行装配bean,我们可以结合@Qualifier注解一起使用。

    @Resource注解默认是按照byName进行装配bean,由J2EE提供,需要导入javax.annotion.Resource。@Resource注解包含两个重要的属性: name和type,Spring将@Resource注解中的name属性解析为bean的名字,将type属性解析为bean的类型。 
    当@Resource注解的name属性时,Spring将按照byName方式进行bean注入,找不到将会抛出异常; 
    当使用type属性时,将按照byType方式进行bean注入,找不到或者找到多个将会抛出异常; 
    如果同时使用了这两个属性,那么将会从Spring上下文中查找指定类型指定名字bean进行装配,找不到将会抛出异常; 
    如果两个属性都没有使用,那么将会按照默认方式byName进行bean注入。

    4、@ModelAttribute 
    @ModelAttribute注解有两种用法:一种是用在拥有返回值的方法上,方法的返回值将会作为Model中指定属性的值;另一种是用在请求处理方法参数上,方法参数将会从Model的属性列表中获取指定属性的值。通过@ModelAttribute(“xxxx”)可以指定属性的名称。在Controller的请求处理方法调用之前,@ModelAttribute注解的方法都会被首先执行。

    5、@SessionAttributes 
    @SessionAttibutes注解只能用在类上,不能使用在方法上。该注解将Model属性列表中指定的一些属性保存到Session对象中。

    6、@PathVariable 
    该注解用于将请求URL的模板变量提取出来,应用到请求处理方法参数中。

    @RequestMapping(value="/users/{user}/roles/{role}")
    public void getUserAndRole(@PathVariable("user") String user,@PathVariable("role")String role){
        System.out.println(user+" : "+role);
    }

    7、@RequestParam 
    @RequestParam主要用于SpringMVC后台请求处理方法中获取参数,类似与request.getParameter(“name”), 该注解包含三个属性:required, defaultValue, value,其中required表示请求中是否必须包含该参数,defaultValue表示请求中没有包含该参数时的默认值,value表示传入的参数的名称。

    8、@ResponseBody 
    该注解用于将Controller请求处理方法返回的对象,通过适当的HttpMessageConverter转换为指定的格式,保存到Response对象的body区。

    9、@Component 
    相当于通用的注解。

    10、@Repository 
    用于注解DAO层。

    原文链接:https://blog.csdn.net/qq_36827957/article/details/78515403

    其他框架 Maven、mybatis 等框架 ,见博文https://www.cnblogs.com/byqh/p/5595384.html

  • 相关阅读:
    400多个开源项目以及43个优秀的Swift开源项目-Swift编程语言资料大合集
    iOS开发-OC分支结构
    iOS开发-OC数据类型
    const volatile同时限定一个类型int a = 10
    详细解说Tomcat 设置虚拟路径的几种方法及为什么设置虚拟路径
    MySQL5.7数据库的基本操作命令
    CentOS7下搭建LAMP+FreeRadius+Daloradius Web管理
    Python安装第三方库的两种方式
    如何更换CentOS6的yum源
    CentOS6.5下搭建LAMP+FreeRadius+Daloradius Web管理和TP-LINK路由器、H3C交换机连接,实现,上网认证和记账功能
  • 原文地址:https://www.cnblogs.com/Shunia123/p/10619860.html
Copyright © 2011-2022 走看看