
SpringMVC的核心入口就是DispatcherServlet,无论是通过webxml 还是 JavaConfig的方式配置,都是要遵循Servlet规范的,即想要动态的添加配置一个Servlet本质上最终还是通过 ServletContextaddServlet() ,虽然有了SpringMVC一般很少有需要直接编写Servlet,但是对于理解原理还是很必要的
Servlet3提供了 ServletContainerInitializer 接口来支持动态的注册Servlet/Filter/Listener
spring-web模块里的 SpringServletContainerInitializer 实现并抽象出新的接口: WebApplicationInitializer
所以,它的存在基本替代webxml配置,在初始化的时候注册并配置容器上下文,官方doc的示例:
SpringBoot没有选择hook到Servlet规范里的的生命周期,而是抽象出自己的接口来配置嵌入的容器,把Servlet/Filter/Listener这些变成Spring Bean一样去配置
ServletContainerInitializer 生命周期是归Servlet容器管理
ServletContextInitializer 他是Spring自己管理
SpringBoot应用一般都是embbed server,默认不会去走Servlet那一套,所以想配置Servlet就是通过 ServletContextInitializer 或者其子类来实现注册
创建嵌入的servlet容器的时候(默认tomcat),new TomcatWebServer()构造函数里执行了初始化initialize(),也就是日志里比较标志性的一行 Tomcat initialized with port(s): 8080 (>
参数的由来:
在转发时,需要向下一个页面传递信息,所有信息在request和response中,所以需要这两个参数。
请求转发的用法:
1、requestgetRequestDispatcher()方法只是获取到了RequestDispatcher()对象,并未执行真正的转发,执行转发动作还需调用RequestDispatcher()的forward()。
2、forward()方法的声明与doGet()方法和doPost()方法非常类似,在转发时,其将request与response作为参数传递到了下一个Servlet。
扩展资料:
与转发类似的还有重定向,responsesendRedirect(),它常常用于自动跳转,可以分为两类,服务器内部跳转和服务器之间跳转。
sendRedirect()需要一个String类型的参数location,该参数代表了当前请求结束后,需要再次跳转的路径。
在 WPF 中,只有创建 DispatcherObject 的线程才能访问该对象。 例如,一个从主 UI 线程派生的后台线程不能更新在该 UI 线程上创建的 Button 的内容。 为了使该后台线程能够访问 Button 的 Content 属性,该后台线程必须将此工作委托给与该 UI 线程关联的 Dispatcher。 使用 Invoke 或 BeginInvoke 来完成此 *** 作。 Invoke 是同步 *** 作,而 BeginInvoke 是异步 *** 作。 该 *** 作将按指定的 DispatcherPriority 添加到 Dispatcher 的事件队列中。
BeginInvoke 是异步 *** 作;因此,调用之后控制权会立即返回给调用对象。
BeginInvoke 返回一个 DispatcherOperation 对象,当委托位于事件队列中时,该对象可用于与委托进行交互。
由 BeginInvoke 返回的 DispatcherOperation 对象可以采用多种方式与指定的委托进行交互,例如:
当在事件队列中挂起执行时,更改委托的 DispatcherPriority。
从事件队列中移除委托。
等待委托返回。
获取委托执行之后返回的值。
如果按同一个 DispatcherPriority 调用多个 BeginInvoke,将按调用发生的顺序执行它们。
如果对某个已关闭的 Dispatcher 调用 BeginInvoke,则返回的 DispatcherOperation 的状态属性将设置为 Aborted。
步骤如下:
1、在web工程里面创建一个Servlet类,继承>
以上就是关于SpringBoot是如何配置DispatcherServlet的全部的内容,包括:SpringBoot是如何配置DispatcherServlet的、ServletRequest的getRequestDispatcher()方法和ServletContext的getRequestDispatcher()方法的区别有哪些、request.getRequestDispatcher().forward(request.response)中的那两个参数是哪里来的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)