springboot系列15,Servlet(1)

关于servlet的含义,搜索就能搜索出好多定义,主要是用来处理交互数据、生成数据、生成动态的web内容等。

关于servlet组件注册方式:1.传统web.xml,2.注解注册,3.编码注册

Servlet注册:1.web.xml部署<servlet>和<servlet-mapping>,2.@WebServlet,3.ServletContext#addServlet

Filter注册:1.web.xml部署<filter>和<filter-mapping>,2.@WebFilter,3.ServletContext#addFilter

Listener注册:1.web.xml部署<listener>,2.@WebListener,3.ServletContext#addListener

其实上面三中注册形式在之前mvc的时候都已经讲过了,接下来会深入讲一下。

web.xml举例

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/webapp_2_5.xsd"
metadata-complete="true" version="2.5">
<context-param>
<description>
Spring 配置文件路径参数,
该参数值将被 org.springframework.web.context.ContextLoaderListener 使用
</description>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/spring/spring-context.xml
</param-value>
</context-param>
<listener>
<description>
org.springframework.web.context.ContextLoaderListener 为可选申明Listener
</description>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>

Spring Framework对Servlet的支持

Servlet生命周期:

初始化:Servlet#init(ServletConfig)

服务:Servlet#service(ServletRequest, ServletResponse)

销毁:Servlet#destroy()

一般来说,初始化比如关闭数据库连接,会销毁,同理打开数据库连接,初始化。

Filter生命周期:

初始化:Filter#init(FilterConfig)

过滤:Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

销毁:Filter#destroy()

ServletContext生命周期

初始化:ServletContextListener#contextInitialized

销毁:ServletContextListener#contextDestroyed

一般来说servlet容器可以有多个应用上下文,在路径uri的地方

 

看DispatcherServlet源码一层一层很容易看出,这是个继承关系。在里面搜索init(ServletConfig config)可以跳到另一个类中。

1.而这个类也是被HttpServlet继承的,所以接下来的init也就是子类HttpServlet初始化。

2.从源码结构可以看出,HttpServlet有个子类是HttpServletBean,看init

这里servletConfig会被设置到servlet中。

3.上面代码中initServletBean,就是关联context

其中 initWebApplicationContext

这里需要注意的是,这里在创建上下文的时候,会去取根上下文, 根上下文会作为parent。所以在mvc中,如果把bean定义在rootcontext中,DispatcherServlet可以读到。如果在DispatcherServlet里面配置的,root是读不到的。

4.onRefresh被子类DispatcherServlet调用

 5.


在看一下service

 

HttpServlet中,会处理ServletRequest和ServletResponse,然后进一步调用

 然后回根据请求类型不同做不同的实现。

对于子类调用,只是添加了patch。通过源码可以知道,不管是什么类型的请求,最后都会到processRequest中

去doService,就到了子类DispatcherServlet

 经过一系列设置,到了doDispatch

这里面就有我们之前熟悉的对于mapping、adapter的处理,最后render渲染。

对于销毁,这里只是关闭了之前servlet初始化时关联的上下文。

 

总结一下,在初始化阶段,初始化了需要的组件,包括handlemapping、handleadapter、ViewResolver等。在服务阶段,之前初始化的组件运用到具体场景,迅速定位到模板、adapter执行器。销毁阶段,DispatcherServlet会把之前关联的上下文关闭。 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值