日记--spring mvc-20210824

spring mvc本质是servlet,servlet的运行需要一个servlet容器,如tomcat
servlet容器统一做了socket连接等通用工作,只需要得到servlet接口即可,mvc有为servlet接口提供了一套通用的解决方案,只需要写核心业务层
tomcat分为连接器和容器,烂脾气专门处理网络连接相关的事情,如socket连接,request封装,连接线程池维护等工作,容器用于存放我们编写的网站程序
tomcat一共四层容器:engine,host,context和wrapper,一个wapper对应一个servlet,一个context对应一个应用,一个host对应一个站点,engine是引擎
host代表站点,比如域名,context表示应用默认webapps\Root中存放的是主应用,对应一个站点的根路径,webapp下的其他目录是其他字应用,对应站点的子路径,所有webAPPs下的应用都对应一个context,向添加一个新的站点需要使用host(添加根域名),一套容器和多个连接器组成一个service,一个tomcat可以有多个servic
servlet接口定义了5个方法,init和destroy方法用于初始化和消灭servlet,一个生命周期只调用一次,service方法处理的是请求,getServletConfig方法返回的是servletConfig,,可以获取到配置servlet时使用init-param配置的参数和ServletContext,getServletInfo方法可以获取到一些servlet相关的信息,如作者版权等,此方法需要自己实现
java提供了两个servlet的实现类,genericServlet和HttpServlet
GenericServlet实现了ServletConfig接口,让使用者可以直接调用servletConfig里的方法,提供了无参的init方法和log方法
HttpServlet把ServletRequest和ServletResponse转换为了HttpServletRequest和HttpServletResponse,根据Http请求类型,(get,post等)把请求路由到了7个不同的处理方法,在编写代码的时候只需要把不同类型的处理代码编写到不同的方法即可,比如doGet ,doPost等方法是在这里定义的
spring mvc实际上是一个继承自HttpServlet的servlet,提供了三个层次的servlet:HttpServletBean,FrameworkServlet和DispatcherServlet,这三个相互继承,httpservletBean直接继承java的httpservlet,是吧用于将servlet里配置的参数设置到了相应的属性里,frameworkServlet初始化了spring mvc里使用的webApplication-Context,具体处理请求的9大组件在DispatcherServlet里初始化
spring mvc 的请求处理过程:主要在DispatcherServlet里进行,上一次的法人amworkServlet也做了一些工作,首先把所有类型的请求转发到processRequest方法里,之后在processRequest方法里先调用多service模板方法具体处理请求,doservice方法在dispatcherServlet里实现,再把当前请求的localeContext和ServletRequestAttributes在处理请求前设置了localeContextHolder和requestContextHolder并在请求完成后恢复,请求处理完之后发布一个servletRequestHandledEvent类型的消息
DispatcherServlet在doService方法里把webApplicationContext,localeResolver,theme-Resolver,themeSource,FlashMap和FlashMapManager设置到request的属性里方便使用,之后把请求交给doDispatch方法具体处理
DispatcherServlet的doDispatch方法按执行过程分为四步:1.根据请求找到处理器,2.根据找到的处理器找到对应的handlerAdapter,3.用handlerAdapter调用handler处理请求,4.调用processDispatchResult方法处理Handler处理之后的结果(处理异常并且找到view渲染输出之后给用户)
handlermapping用于找出handler
,handler是具体的处理器,handlerAdapter里是具体的使用handler的方法
在view层的handler是view,查找view的handlermapping是viewResolver和RequestToViewNameTranslator,由于view使用简单所以没有handleradapter
在model层的handler有@modelAttribute方法,sessionAttribute,flashMap,Model和需要执行的方法的参数和返回值都属于处理器,handleradapter有handlerMethodArgumentResolver和HandlerMethodReturnValueHandler,modelFactory和FlashMapManager等,handlermapping是HandlerMethodArguementResolver和HandlerMethodReturnValueHandler

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值