SpringMVC是如何让Controler替代Servlet工作的


在学到JavaEE的部分的时候,知道了我们自己写Servlet,然后来处理一个请求的get方法或者是post方法;但是在工作后,直接使用了SpringMVC的框架;工作的时候不再需要自己写Servlet,而是写一个Controler,然后将各种请求写成方法来处理即可;


两种工作方式的差异,让我觉得自己的知识出现了断层;即,Spring框架是如何操作,让Controler来替代Servlet的?


后来经人指点,是因为我配置了DispatcherServlet的原因;这句话一下子让我找到了方向;


所有的请求,都是请求到了DispatcherServlet类中,该类通过配置项,扫描了我们配置的jar包;然后通过注解,找到相对应的方法,进行代码处理;大概的过程就是这样的;


上面的那句话看不懂?没关系,我翻译出来给你看:所有的请求,都请求DispatcherServlet这个Servlet类中;然而这个类并不做请求的处理,他只是根据我们的请求,去找到能处理我们请求的方法;(没错,他可以直接找到能处理请求的方法,因为每个方法的请求路径都是独一无二的,如果两个方法的请求路径一致,那么服务器启动的时候会报错的;)至于说该类通过配置项,扫描了我们配置的jar包,我觉得,更像是Spring框架使用了import将我们的配置项引入了DispatcherServlet类中;有了能处理请求的方法,直接调用即可;至于说注解,他更像是我们方法的标签;有了标签,DispatcherServlet就可以找到应该调用哪个方法来处理当前的请求了;


在这个过程中,我发现了有趣的一面:当我们初次请求的时候,服务器会比较卡,半天才给我们反馈,但是第二次请求的时候,速度就快了很多;为啥呢?


在解决上面的问题的时候,我查阅了一点资料,发现一句话,原话是什么我不记得了,但是大概的意思是说:spring利用了Java的构造器;


然后我就自己写了一个类的构造方法,里面会打印出来一些东西;(打印什么东西不重要,重要的是,我想知道这个类是否被构造,以及是在什么时候被构造的);


结果发现,当我启动服务器的时候,该构造方法并没有被执行,但是当我进行访问的时候,该方法被执行了;


由此引发出来另外一个问题:是我请求一个类时才加载这个类呢?还是我随便请求一个类时就加载这个类?所以,我又在另外一个类中写了构造方法;请求,发现两个类的构造方法都被执行了,所以,我的结论是,一旦有请求过来时,就会将所有的类进行加载;

发布了155 篇原创文章 · 获赞 1 · 访问量 2287

猜你喜欢

转载自blog.csdn.net/zhupengqq1/article/details/104090929