Servlet容器有时候也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。Servlet容器在Servlet的生命周期内包容和管理Servlet。
Web 服务器是根据 Web 浏览器的请求提供文件服务的软件。
什么是JSP引擎?
什么是JSP容器?
什么是Web服务器?
看到这些东西,真的是头都大了。不过作为一个Java Web开发方向的从业者,对这些概念还是必须理解透彻的。
JSP引擎与JSP容器指的是同样的东西,他们都指用来统一管理和运行Web应用程序的软件。常见的JSP引擎有Tomcat、JRun、Resin等,其中最常用的就是Tomcat。
而Web服务器,其实就是服务器了,它指的是安装了JSP引擎的计算机。
所以说,JSP引擎是用来管理和运行Web应用程序的软件,而安装了JSP引擎的计算机就是Web服务器。
现在许多人多把Tomcat说成是Web服务器,但其实Tomcat只是JSP容器(JSP引擎)而已。之所以把Tomcat说成Web服务器,我猜可能是因为这样很容易理解吧。(你看安装了Tomcat就可以运行自己的网站了,那Tomcat不就是服务器吗?)但对于有志于从事Web方向的我们,还是必须弄清这个概念的。
补充:
1.什么是JRun?
答:JRun是一个JSP引擎,与Tomcat一样用来管理和运行Web应用程序。它是由Allaire公司开发的Java服务器软件(又一个对JSP引擎的称呼),但它是付费的。
2.什么是Resin?
答:Resin是一个JSP引擎,用来管理和运行Web一个用程序,是CAUCHO公司开发的Java服务器软件。Resin运行JSP的速度非常快,并且Resin是免费的。
注:有空补充一下Resin的内容。
一直以来对这三个概念不甚了解。今天写写心得,详细的看连接How web servers work?。
亮观点:nginx属于web服务器,tomcat属于应用服务器,tomcat也同时是servlet容器。web服务器:偏向于http静态资源,并发高。比如我们经常使用nginx来访问静态资源。 应用服务器:偏向于动态资源,并发低。比如使用tomcat访问jsp等动态资源。 servlet容器:servlet运行的环境。如tomcat正是一个servlet容器。
为什么我们会困惑呢?就是因为历史大发展所致,web服务器和应用服务器的功能开始交叉。如tomcat可以同样可以访问html静态资源。
服务器容器
容器概念 就是装东西的,容器装的是一个一个实例的对象(类),换句话说也是一个服务
往容器放进邮件类,就是一个绑定的过程,在绑定之后我们需要在获取的时候,从容器后去到这个类,这叫做处理或者解析的过程
我们为什么要使用容器,我们使用容器来做什么呢
答: IOC控制反转 面相对向思想,降低代码的耦合度
没有用到IOC控制反转,对象A依赖对象B,对现象A初始化或者运行某一点的时候,必须自己主动去new,创建或者使用已经创建的对象B,不管创建还是使用对象B,控制权都在自己的手上
有个IOC的容器,对象B在初始化,往IOC注入一个标识,字符串B表示对象B,在A想要一定程度的时候,需要对象B的时候,并不是初始化对象B,而是往IOC容器中取出对象B,这样就跟对象A和对象B解耦了,解耦的方式就是用IOC容器的字符串B,比如这个时候对象B换成了对象D,在IOC容器中把字符串B对应的对象B改成对象D,A的程序不需要任何的修改就可以直接使用了 —这就是控制反转的思想
IOC控制反转经常结合依赖注入来做
DI依赖注入 就是将实例当做变量传入到对象当中去,laravel依赖注入是用反射来完成的,比如在用register类的时候,我们在controler函数中,我们并不需要,显示的使用register,我们只需要register作为参数就可以获取register对象了,这个传递过来的对象是依赖容器中注入的是什么
laravel的容器在那里呢
使用类名作为字符串的
这就是容器和绑定的过程
这就是解释容器和IOC控制反转
现在说下 依赖注入
如果在参数中,我们要使用请求(request之外我在一个$log(类)
我们只要往函数参数中加入一个类,它自然往这个类里面注入一个实例,这就是依赖注入
问:绑定是谁来做
答:服务提供注册,一个服务提供者一旦注册了,它就提供一个服务了,这个服务继承了ServiceProvider
两个方法:
register是代表所有的提提供服务者提供服务之前,进行注册的
boot 是在所有服务提供者加载之后进行注册的
他们是顺序的区别
我们可在一个请求生命周期开始之前,我们就提供这个服务,就是说把这个服务放在容器中,也可以具体使用到的时候,第一次使用到的时候,我们才对这个服务进行提供
标志代表,你是在什么时间点往容器中增加这个服务
路径: laravel58\config\app.php
一个请求生命周期中,有的在框架写的注册服务提供,还有一个是在配置文件中写的服务提供
三、门脸模式
平时使用的类,需要new,或者从容器中获取,但是门脸模式为容器中可用的类提供一个静态调用的方法,我们可以静态调用容器的对应类,
比如:
路径: laravel58\config\app.php下的 aliases
E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Support\Facades\Request.php
门脸类只有一个函数 ,这个函数做了什么事情呢,return了一个字符串,这个字符串是什么?就是我们上面说的容器中类的对应的标签(标识)
class Request extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'request';
}
}
就是下面的图片
一、用这个函数可用获取到容器
public function test() {
// return '我是认证访问';
#用这个函数可用获取到容器
$app = app();
#从容器中获取日志类 make中的字符串用什么呢,找到日志类在什么地方注册的,注册的字符串是什么就是绑定的过程需要找到的
$log =$app->make("log");
dd($log);
# $log->info("post_index",['data' => 'this is post index']);
}
#容器的地址 E:\xampp\htdocs\xampp\laravel58\bootstrap\app.php
绑定的过程就是在容器里面
E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Foundation\Application.php
日志类
E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Log\LogServiceProvider.php
#这个日志服务提供者在register方法里面,使用singleton的方法,来把一个日志类也叫做日志服务,绑定到容器中,绑定的字符串叫做log
二、我不想从容器中获取 ,我们想直接使用依赖注入
找到这个方法
E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Foundation\Application.php
上图
Aliases的意思是
服务容器中注册的名字是log,但是我可以使用这三个类,相当于获取的是log服务容器中的类
public function test(\Psr\Log\LoggerInterface $log) {
// return '我是认证访问';
dd($log);
#我不想从容器中获取 ,我们想直接使用依赖注入
#用这个函数可用获取到容器
// $app = app();
// #从容器中获取日志类 make中的字符串用什么呢,找到日志类在什么地方注册的,注册的字符串是什么就是绑定的过程需要找到
// $log =$app->make("log");
// dd($log);
// $log->info("post_index",['data' => 'this is post index']);
}
依赖注入成功
三、用门脸怎么查
如何查找一个门脸或注入类又哪些函数
最重要的是查找到你在容器中,注册的字符串
你是门脸类你要找字符串怎么找呢
路径是:E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Support\Facades\Log.php
查找门脸类对应的容器的字符串是什么,可以看到这个log对应它在容器中对应的字符串是 return LoggerInterface::class;
Psr\Log\LoggerInterface 对应的是在容器中的实际是log
#看api文档
https://laravel.com/api/5.4/Illuminate/Log/Writer.html
Servlet容器有时候也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。Servlet容器在Servlet的生命周期内包容和管理Servlet。
Web 服务器是根据 Web 浏览器的请求提供文件服务的软件。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器。Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
转载于:https://blog.51cto.com/7207470/1201783