【有书共读】《Spring源码深度解读》第11章MVC

Springmvc分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让他们更容易进行定制。默认的处理程序是非常简单的Controller接口,只有一个方法ModelAndView handleRequest(request, response)spring提供了一个控制器层次结构,可以派生子类,如果应用程序需要处理用户输入表单,那么可以继承AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承AbstractWizardFormController

Springmvc解决的问题:(1)web页面的请求传递给服务器

(2)   根据不同的请求处理不同的逻辑单元

(3)   返回处理结果数据并跳转至响应的页面

11.1springmvc快速体验(本模块就是举例子,在这里只介绍知识点)

(一)配置web.xml

             springmvc的实现原理是通过Servlet拦截所有的url来达到控制的目的web.xml是必须的。

之所以是必须的,最关键的地方有两个。

(1)contextConfigLocationspring的核心就是配置文件,这个参数让webspring的配置文件结合的一个关键配置。

(2)DispatcherServlet:包含了SpringMvc的请求逻辑,Spring使用此类拦截wen请求并进行相应的逻辑处理。

(二)创建applicationContext.xml

(三)创建model

(四)创建controller

(五)创建Servlet配置文件spring-servlet.xml

因为SpringMVC是基于Servlet的实现,所以在web启动的时候,服务器会首先尝试加载对应与Servlet的配置文件,为了让项目更加模块化,通常我们将web部分的配置都存放于此配置文件中。

11.2ContextLoaderListenweb.xml文件中的配置)

ContextLoaderListener的作用就是启动web容器时,自动装配applicationContext的配置信息。因为它实现了ServlerContextListener这个接口,在web.xml配置这个***,启动容器时,就会默认执行它实现的方法,使用ServletContextListen接口.

(一)ServletContextListener的使用

在启动ServletContextListener实现类的时候会调用contextInitialized方法

(二)Spring中的ContextLoaderListener

ContextLoaderListener的实现方式和servletContextListener差不多。servletContext启动之后会调用servletContextListenercontextInitialized方法->initWebApplicationContext方法。在这两个方法中,我们得出了初始化的大致步骤

(1)WebApplicationContext的存在性验证。配置文件中只允许声明一次Servlet Context Listener,多次声明会扰乱spring的执行逻辑。在spring中如果创建WebApplicationContext实例会记录在ServletContext

(2)创建WebApplicationContext实例。如果通过了验证,则SpringWebApplicationContext实例的工作委托给了createWebApplicationContext函数。

综合以上代码分析,在初始化过程中,程序首先读取ContextLoader类的同目录下的属性文件ContextLoader.properties,并根据其中的配置提取要实现WebApplicationContext接口的实现类,并根据这个实现类通过反射的方式进行实例的创建。

(3)将实例记录在servletContext

(4)映射当前的类加载器与创建的实例到全局变量currentContextPerThread

11.3DispatcherServlet

spring中,contextLoaderListener只是辅助功能,用于创建WebApplicationContext类型实例,真正的逻辑实现是在DispatcherServlet中进行的,SispatcherServlet是实现Servlet接口的实现类。

Servlet是一个java编写的程序,此程序是基于http协议的,在服务器端运行,是按照servlet规范编写的java类。主要是处理客户端的请求并将其结果发送到客户端。Servlet的生命周期是由servlet的容器控制的,分为三个阶段:初始化、运行和销毁。

(一)建立servlet

Init方法保证在servlet加载的时候做一些逻辑***作

(二)DispatcherServlet的初始化

DispatcherServlet的初始化过程主要是通过将当前的servlet类型转换为BeanWrapper类型实例,以便使用Spring中提供的注入功能进行对属性的注入。

属性注入的步骤:(1)封装及验证初始化参数

2)将当前servlet实例转换为BeanWrapper实例

3)注册相对于Resource的属性编辑器

4)属性注入

5servletBean的初始化

(三)webApplication的初始化

InitWebApplicationContext函数的主要作用就是创建或刷新WebApplication实例并对servlet功能锁使用的变量初始化。本函数的初始化包含一下积分部分:

(1)寻找或创建对应的WebApplication实例

A.        通过构造函数的注入进行初始化

B.        通过contextAttribute进行初始化

C.        重新创建WebApplication实例

(2)configureAndRefreshWebApplicationContext

对已经创建的webapplication实例进行配置及刷新

3)刷新

onFreshFrameworkServlet类中提供的模板方法,在其子类DispatcherServlet中进行了重写,主要用于刷新在web功能视线中所必须使用的全局变量。

4)初始化HandlerMapping

5)初始化HandlerAdapters

6)初始化HandlerExceptionResolvers

7)初始化RequestToViewNameTranslator

8)初始化ViewResolver

11.4DispatcherServlet的处理逻辑

根据之前的示例,在httpServlet类中分别提供了相应的服务方法,分别是doDelete(),doGet(),doOptions(),doPost,doPut(),doTrace(),它会根据不同的形式将程序引导至对应的函数进行处理。这几个函数中最常用的是doGet(),doPost(),在这两个方法中,都调用了precessRequest(request, response)方法,此方法中调用了doService()方法。

全部评论

相关推荐

我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务