Servlet、Servlet容器、web容器、spring容器、springmvc容器

Servlet、Servlet容器、web容器、spring容器、springmvc容器

Servlet技术

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

在这里插入图片描述

Java Servlet 是运行在带有支持 Java Servlet 规范的解释器的 web 服务器上的 Java 类。
Servlet 可以使用 javax.servletjavax.servlet.http 包创建,它是 Java 企业版的标准组成部分,Java 企业版是支持大型开发项目的 Java 类库的扩展版本。


public interface Servlet {


    public void init(ServletConfig config) throws ServletException;

    public ServletConfig getServletConfig();
    
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

    public String getServletInfo();
    
    public void destroy();
}

根据类图我们可以看到Spring的DispatcherServlet 实际实现了HttpServlet
![image.png](https://img-blog.csdnimg.cn/img_convert/4105dba7ca3b69777b45f582c0fee3de.png#align=left&display=inline&height=427&margin=[object Object]&name=image.png&originHeight=854&originWidth=830&size=274725&status=done&style=none&width=415)

Web 服务器

Web 服务器使用 HTTP 协议传输数据。在一般情况下,用户在浏览器(客户端)中键入 URL(例如www.baidu.com),并获取要读取的网页。所以服务器所做的就是向客户机发送一个网页。信息的交换采用指定请求和响应消息的格式的 HTTP 协议。
!(https://img-blog.csdnimg.cn/img_convert/ba16a183d3143e0d4224c290bbc81fc5.png)
普遍意义上我们可以“HTTP服务器 + Servlet容器”,我们也叫它们Web容器。

Servlet容器

什么是 Servlet 容器

Servlet 容器的基本思想是使用 Java 动态生成服务器端的网页。所以 Servlet 容器本质上是与 Servlet 交互的 Web 服务器的一部分。
在这里插入图片描述

Servlet容器负责管理Servlet对象,WebServer接受到请求后转发到Servlet容器来处理请求,Servlet 容器的主要功能是将请求转发到正确的 Servlet 进行处理,并在 JVM 处理完后将动态生成的结果返回到正确的位置:
在这里插入图片描述

常见的Servlet容器

  • WEB LOGIC
  • TOMCAT(Tomcat本质上是一个 Servlet 容器,实现了对 Java Servlet 规范的支持。同时 Tomcat 也提供了处理HTTP请求的能力,所以也可以作为一个Web服务器)
  • JETTY
  • JBOSS
  • Resin
  • WebSphere

Spring容器

在这里插入图片描述

本质上Spring容器我们可以看做一个Servlet容器

配置

	<!-- 利用Spring提供的ContextLoaderListener监听器去监听ServletContext对象的创建,并初始化WebApplicationContext对象 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- Context Configuration locations for Spring XML files(默认查找/WEB-INF/applicationContext.xml) -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>

	<!-- 配置Spring MVC的前端控制器:DispatchcerServlet -->
	<servlet>
		<servlet-name>SpringMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
————————————————
版权声明:本文为CSDN博主「书呆子Rico」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/justloveyou_/article/details/74295728

一般在web.xml中,我们会配置ContextLoaderListener&DispatcherServlet,进而加载Spring容器。

ContextLoaderListener

public class ContextLoaderListener extends ContextLoader implements ServletContextListener {

	public ContextLoaderListener() {
	}

	public ContextLoaderListener(WebApplicationContext context) {
		super(context);
	}

	@Override
	public void contextInitialized(ServletContextEvent event) {
		initWebApplicationContext(event.getServletContext());
	}

	public void contextDestroyed(ServletContextEvent event) {
		closeWebApplicationContext(event.getServletContext());
		ContextCleanupListener.cleanupAttributes(event.getServletContext());
	}

}

我们可以看到ContextLoaderListener主要用来初始化对应的WebApplicationContext,在initWebApplicationContext方法中会启动根容器,即我们平时说的Spring容器WebApplicationContext。

WebApplicationContext是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext,它就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的标签指定。

SpringMVC的容器

如上,在web.xml我们加载完WebApplicationContext后,会加载DispatcherServlet。

DispatcherServlet上下文在初始化的时候会建立自己的IoC上下文,用以持有spring mvc相关的bean。特别地,在建立DispatcherServlet自己的IoC上下文前,会利用WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE先从ServletContext中获取之前的根上下文(即WebApplicationContext)作为自己上下文的parent上下文。有了这个parent上下文之后,再初始化自己持有的上下文。

ContextLoaderListener中创建ApplicationContext主要用于整个Web应用程序需要共享的一些组件,比如DAO,数据库的ConnectionFactory等。而 由DispatcherServlet创建的ApplicationContext主要用于和该Servlet相关的一些组件,比如Controller、ViewResovler等。
这个也可以看做spring容器、springmvc容器的区别

总结

大概总结下整体的架构图,包括和tomcat相关的架构图,如下:
在这里插入图片描述

参考
https://dzone.com/articles/what-servlet-container
https://blog.csdn.net/justloveyou_/article/details/74295728

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值