JavaEE中MVC的发展

MVC架构模式


在C层的发展

控制器的核心代码

1. 接受 client 的请求
2. 调用业务对象(Service)
3. 跳转处理(流程控制,页面跳转)
  • servlet

我们发现这样的servlet是存在问题的:每个请求 uri 都需要有一个servlet来处理,并且要配置servletMapping,如果工程较大,就会很麻烦(虽然我们可以进行一定的封装)

  • SpringMVC

SpringMVC就是一个Spring容器,其中存放的是controller对象


SpringMVC 只用配置一个DispatcherServlet,其他请求会经过DispatcherServlet进行处理,流程图如下:


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ihb1IHIN-1615696468341)

SpringMVC请求中怎么找到正确的Controller和方法的?

  • XmlWebApplicationContext.refresh()执行过程中,annotation-driven元素匹配的解析器AnnotationDrivenBeanDefinitionParser会注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter的bean定义;
  • RequestMappingHandlerMapping的懒加载对象实例化后,调用了afterPropertiesSet()方法,最终在afterPropertiesSet()方法执行完毕后将带有@RequestMapping注解的java类的相关信息设置到实例化之后的RequestMappingHandlerMapping对象中。也就是说相关请求对应的Controller类和方法的匹配条件在bean被加载完成后就已准备好。
  • 所以结合DispatcherServlet处理请求的执行逻辑(doDispatch的执行流程),可以知道在获取Handle对象时确定了具体的Controller类和方法。

在V层的发展

模板引擎

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yXuUep40-1615696468342)

  • JSP

    引入了 JSTL标签库 和 EL表达式使得不需要在JSP代码中写Java代码,从一定程度上解耦

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dhuKPXEG-1615696468343)

JSP 不能静态预览

  • thymeleaf

    Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。可以用于Web与非Web应用.相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。

    <html xmlns:th="http://www.thymeleaf.org">
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wjLLQXv-1615696468344)

    springboot直接引入:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    非springboot项目使用如下依赖:

    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf</artifactId>
      <version>2.1.4</version>
    </dependency>
    

    静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。springboot官方推荐。

# 我们可以发现上面的模板引擎,前端写好页面后,还是需要后端进一步的在页面中添加数据渲染视图。

一般传统上的开发协作模式有两种:

  • 一种是前端先写一个静态页面,写好后,让后端去套模板。静态页面可以 本地开发,也无需考虑业务逻辑只需要实现View即可。不足是还需要后端套模板,这些前端代码后端需要浏览一遍,以免出错。
  • 另一种协作模式是,前端直接去写模板,这样做的问题在于,前端编写过程中很依赖与后端环境,如果当后端没写完的情况下,前端几乎没法干活。

前后端分离

# 为了解决上面前后端耦合带来的种种不便,前后端分离的开发模式慢慢开始兴起
  • 客户端渲染

    单页模式

    单页模式是前后端分离的一种应用。而单页应用最主要的特点就是`局部刷新`,这通过前端`控制路由调用AJAX`,后台提供接口便可以实现,而且这样的方式用户体验更加友好,网页加载更加快速,开发和维护成本也降低了不少,效率明显提升。
    

    整个WEB项目只有一个页面,使用路由机制进行组件之间的切换

    优点:客户端渲染、数据传输量少、减少服务器的压力

    缺点:对 SEO 不友好、不利于搜索引擎收录快照

  • 服务端渲染

    将组件或页面通过服务器端生成HTML字符串,再发送给浏览器

    优点:对SEO友好

    缺点:数据传输量大,服务器压力大

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4W8WmVPI-1615696468345)

# 看项目的要求,如果项目需要SEO友好,我们就使用SSR(可以用NUXT.js框架,基于VUE的SSR技术),对项目的性能要求高、页面加载速度快、不需要SEO,我们就是用SPA(VUE)

在M层的发展

我们在M层主要看持久层的发展

# 我们知道持久层是和数据库(这里主要指关系型数据库)来打交道的,每种数据库的实现都是有差异的,所以如果要用		Java来访问数据库,每种数据库都要实现自己的Java操作代码供开发人员使用。显然这样的学习成本以及维护成本是很		高的,SUN公司最终实现了一系列接口,要求各个数据库公司来实现这个接口,写Java访问自己数据库的解决方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gy7dLEti-1615696468346)

  • JDBC

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-768LOF9K-1615696468349)

  • 连接池 + SpringJDBC

    # 对原始JDBC的操作进行了简化,使得开发者将更多的注意力放在了SQL语句上
    
  • MyBatis

    # 进一步封装,使得在开发大型项目的时候更加方便,提高了开发效率
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值