以前没想过这么个问题:Tomcat怎么处理webapps下项目,并且我访问浏览器ip: port/项目名/请求路径,以SSM为例,Tomcat怎么就能将请求找到项目呢,项目还是个文件夹类型的? Tomcat部署webapps下项目方法位于:HostConfig#deployApps,别问怎么知道的,看源码,也可以支持看下我前面的博客,虽然介绍粗枝大叶,但是也能走到这步了. 介绍下deployApps,最开始获取两个配置,分别是catalina-home/webapps以及catalina-hom…
上一篇写到Eloquent ORM的基类Builder类,这次就来看一下这些方便的ORM方法是如何转换成sql语句运行的. 首先还是进入\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php这个类中,先来看一下最常用的where()方法. 如下所示,where方法的代码很长,但前面多个if都是用来兼容各种不同调用式的.我们先抛开这些花哨的调用方式,来看一下最简单的调用方法是怎么运行的. /** * Add a bas…
laravel中的数据库也是以服务提供者进行初始化的名为DatabaseServiceProvider,在config文件的providers数组中有写.路径为vendor\laravel\framework\src\Illuminate\Database\DatabaseServiceProvider.php 跟以往的serviceProvider一样在register方法中注册,在boot方法中引导加载. 来看一下register方法.为了保险起见它先通过Model将之前的加载数据给清除掉了…
Pipeline管道模式,也有人叫它装饰模式.应该说管道是装饰模式的一个变种,虽然思想都是一样的,但这个是闭包的版本,实现方式与传统装饰模式也不太一样.在laravel的源码中算是一个比较核心的设计模式了.管道模式,或者说装饰模式的思想,就是在不改变原有程序的基础上,可以方便的在已有程序上添加新的功能. 在说管道模式之前让我们看一下array_reduce这个函数 mixed array_reduce ( array $array , callable $callback [, mixed $i…
上次说了provider,那么这次来说说facade 首先是启动的源头,从laravel的kernel类中的$bootstrappers 数组,我们可以看到它的一些系统引导方法,其中的RegisterFacades便是用来注册facade门面类的了. protected $bootstrappers = [ \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, \Illuminate\Foundation\Bootst…
laravel中的中间件作为一个请求与响应的过滤器,主要分为两个功能. 1.在请求到达控制器层之前进行拦截与过滤,只有通过验证的请求才能到达controller层 2.或者是在controller中运算完的数据或页面响应返回前进行过滤,通过验证的响应才能返回给客户端 中间件一般通过artisan命令创建 php artisan make:middleware 中间件名称 命令行创建的中间件会保存在/app/Http/Middleware文件夹里 这些中间件需要手动添加在/app/Http/Ker…
今天这篇博文来探索一下laravel的路由.在第一篇讲laravel入口文件的博文里,我们就提到过laravel的路由是在application对象的初始化阶段,通过provider来加载的.这个路由服务提供者注册于vendor\laravel\framework\src\Illuminate\Foundation\Application.php的registerBaseServiceProviders方法 protected function registerBaseServiceProvid…
laravel里所谓的provider服务提供者,其实是对某一类功能进行整合,与做一些使用前的初始化引导工作.laravel里的服务提供者也分为,系统核心服务提供者.与一般系统服务提供者.例如上一篇博文里介绍的,最早在application中进行注册的event.log.routing这些就是系统的核心服务,laravel的初始化需要他们.那么现在就先来看一下provider的运行流程. protected function registerBaseServiceProviders() { $t…
laravel的项目入口文件index.php如下 define('LARAVEL_START', microtime(true)); require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); $response = $kernel->h…
之前介绍过 Catalina加载过程是Bootstrap的load调用的  Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 一.initDirs 从系统环境变量.VM参数中读取java.io.tmpdir, 并校验文件夹合法性: 未指定java.io.tmpdir,会抛出异常,所以我们启动时指定VM参数: -Djava.io.tmpdir=E:/Tomcat_Source_Code/apache-tomcat-8.0.…