1.0
众所周知,一个http请求到我们服务器(web容器/tomcat/jetty(servlet)) 就会约定俗成去访问webapp路径下的web.xml配置文件,首先读取的是两个节点: listener 和 context-param 监听器和上下文参数,然后读取上下文参数并创建一个serveltContext,这个WEB项目所有部分都将共享这个上下文对象。读取context-param, 并随即创建一个监听类对象。WEB容器的加载顺序是:ServletContext -> context-param -> listener -> filter -> servlet。并且这些元素可以配置在文件中的任意位置。这样请求就会去匹配我们定义好的路径url寻找相对的servlet处理类进行匹配处理。所以我们在配置文件里面有很多配置,比如
上下文context-param可以配置到上下文对象共享,来配置数据库,因为它是先于容器启动处理的,
还有监听器,过滤器,字符编码的处理的,敏感字符的处理,还有servlet的处理类,路径,次序,
jsp的欢迎页和404等。
init service(request,response) destory
但是我们一般是去实现他的抽象子类HttpServlet
里面有:
doget dopost
细化请求方式了
至于其他的GenericServlet 知道就行
里面也有几个方法有用到就可以去实现
另外还有可以得到Servlet对象,还有ServletConfig
还有request和response里面的信息。
2.0
当过渡到2.0 Springmvc就帮我们弄了一个核心前端控制器dispathcherServlet,其实就是底层封装了servlet,丰富了功能,区别还是在于我们的配置文件不需要写很多servlet,而是通过一个核心控制类dispatherServlet去接收所有请求,然后同时用处理器映射器,处理器适配器去匹配扫入容器的处理类路径,对比成功即处理。
DispatcherServlet实质也是一个HttpServlet。DispatcherSevlet负责将请求分发,所有的请求都有经过它来统一分发。
容器开启,会去读取web.xml其实就是配置,然后找到springmvc的配置文件,然后springmvc配置文件不是配置了注解扫描吗然后可以转发给dispatherServlet让他根据请求的参数调用HandlerMapping匹配然后调用视图解析器返回
细化
DispathcherServlet拦截后,会调用HandlerMapping进行处理生成Handler再一起返回DispathcherServlet,内容是HandlerMapping的一个(classbeanname/beanname)controllerhandlermapping会把controller层的处理类以map为容器放进去进行注册,然后在根据传进来的url进行查找.处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;
再细化
返回给DispathcerServlet之后,调用 HandlerAdapter处理器适配器,请求执行Handler;HandlerAdapter根据DispathcerServlet传来的controller信息先进行注册再 经过适配调用 具体处理器进行处理业务逻辑Handler执行完成返回ModelAndView给DispatcherServlet;;
再再细化
DispatcherServlet将ModelAndView()传给ViewResolver视图解析器进行解析生成view传回页面;
再再进行细化
DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)再返回客户端
3.0