tomcat源码分析(4)—>servlet深入分析
2018-01-01 23:24
501 查看
servlet是什么
在JavaEE中用于处理动态http请求的实例。
1、tomcat首先获取了http请求的url,解析url中的path,在path中的最后一个名字即为servlet名字(该名字不是servlet的类名,而是在web.xml或者是基于注解配置的path中的名字)。
2、根据该名字找到相应的servlet的类名,然后根据类名到自定义的类加载器中寻找该类的实例是否已经存在,如果不存在就调用自定义的类加载器根据类的全限定名进行类的加载,并添加的servlet的url和实例的映射器中,并根据http请求的方法调用servlet相应的get、post、delete等方法。
总结:所以说servlet是处理http请求的最终的类,所以如果想要对tomcat有更加深入的理解,对servlet的深入理解是非常有必要的,本节将通过对servlet3.1.0的源码进行分析,来对servlet进行更加深层次的分析。
servlet-api源码解读
servlet是tomcat中处理http请求的实例,所以也是tomcat中的一种http处理的标准,所以对servlet标准的理解可以更好的理解tomcat的运行机制,从而可以帮助我们更好的对tomcat进行扩展,以及编写出更加符合tomcat运行的servlet实例。
下面是基于servlet3的简单的hello请求的servlet处理,基于servlet3的servlet的编写可以不用再web中配置url pattern等参数,而是引入了WebServlet注解,通过该注解完成url的映射(这个是因为tomcat会自动的扫描该注解,完成url的映射,这也是目前很多框架设计的趋势:即注解将代替大部分的xml配置的工作,因为注解具有更加直观的视觉效果和理解,而且可以分散到具体的类,而不会使得配置文件越来越大)。代码如下图所示:
接下来就开始分析servlet3.1.0的源码了,在javax.servlet-api-3.1.0的jar包中
最外层:定义了一些servlet相关的一些接口的信息,如:事件监听接口、servlet配置、servlet异常、输入流输出流、还有一些包装类等。
annotation:包含一些和servlet相关的注解,如WebServlet注解、WebFilter、WebListener等注解,通过这些注解可以非常方便的配置servlet,而不需要专门的配置文件进行配置。
descriptor:该目录下包含了几个可以获取web配置信息的接口,用户可以通过继承此类接口获取到配置信息。
http:该目录主要包含了基本的servlet类的实现,还有request和response的基本接口和相应的简单实现类。
通过对servlet-api.jar包的目录结构进行分析,可以对该jar包的基本的功能有了一定的了解,主要实现以下几大功能:
注解:主要用于servlet相关的信息的配置。
接口类:主要是对servlet标准的定义,以及和servlet容器之间共同的接口标准的定义。
简单实现类:主要对一些接口的基本功能进行实现,使得用户可以在此基础之上进行拓展、或者封装,从而能减少部分的开发工作量。
几个重要类的介绍
下面将对几个重要的类进行详细介绍:
在JavaEE中用于处理动态http请求的实例。
1、tomcat首先获取了http请求的url,解析url中的path,在path中的最后一个名字即为servlet名字(该名字不是servlet的类名,而是在web.xml或者是基于注解配置的path中的名字)。
2、根据该名字找到相应的servlet的类名,然后根据类名到自定义的类加载器中寻找该类的实例是否已经存在,如果不存在就调用自定义的类加载器根据类的全限定名进行类的加载,并添加的servlet的url和实例的映射器中,并根据http请求的方法调用servlet相应的get、post、delete等方法。
总结:所以说servlet是处理http请求的最终的类,所以如果想要对tomcat有更加深入的理解,对servlet的深入理解是非常有必要的,本节将通过对servlet3.1.0的源码进行分析,来对servlet进行更加深层次的分析。
servlet-api源码解读
servlet是tomcat中处理http请求的实例,所以也是tomcat中的一种http处理的标准,所以对servlet标准的理解可以更好的理解tomcat的运行机制,从而可以帮助我们更好的对tomcat进行扩展,以及编写出更加符合tomcat运行的servlet实例。
下面是基于servlet3的简单的hello请求的servlet处理,基于servlet3的servlet的编写可以不用再web中配置url pattern等参数,而是引入了WebServlet注解,通过该注解完成url的映射(这个是因为tomcat会自动的扫描该注解,完成url的映射,这也是目前很多框架设计的趋势:即注解将代替大部分的xml配置的工作,因为注解具有更加直观的视觉效果和理解,而且可以分散到具体的类,而不会使得配置文件越来越大)。代码如下图所示:
package mh.controller;/** * Created by muhong on 2018/1/1. */ import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; /** * hello * * @author * @create 2018-01-01 23:04 **/ @WebServlet(value = "/hello") public class HelloController extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Writer writer = resp.getWriter(); writer.write("Hello servlet"); writer.flush(); writer.close(); } }
接下来就开始分析servlet3.1.0的源码了,在javax.servlet-api-3.1.0的jar包中
最外层:定义了一些servlet相关的一些接口的信息,如:事件监听接口、servlet配置、servlet异常、输入流输出流、还有一些包装类等。
annotation:包含一些和servlet相关的注解,如WebServlet注解、WebFilter、WebListener等注解,通过这些注解可以非常方便的配置servlet,而不需要专门的配置文件进行配置。
descriptor:该目录下包含了几个可以获取web配置信息的接口,用户可以通过继承此类接口获取到配置信息。
http:该目录主要包含了基本的servlet类的实现,还有request和response的基本接口和相应的简单实现类。
通过对servlet-api.jar包的目录结构进行分析,可以对该jar包的基本的功能有了一定的了解,主要实现以下几大功能:
注解:主要用于servlet相关的信息的配置。
接口类:主要是对servlet标准的定义,以及和servlet容器之间共同的接口标准的定义。
简单实现类:主要对一些接口的基本功能进行实现,使得用户可以在此基础之上进行拓展、或者封装,从而能减少部分的开发工作量。
几个重要类的介绍
下面将对几个重要的类进行详细介绍:
相关文章推荐
- tomcat源码分析(4)—>servlet深入分析(部分关键类的描述)
- tomcat源码分析3—>代理模式深入分析
- tomcat源码---->request的请求参数分析
- Tomcat源码分析(五)--容器处理连接之servlet的映射
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- <看透SpringMVC源码分析>---第六章 Servlet
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- Tomcat(二) Tomcat实现: Servlet与web.xml介绍 以及 源码分析Tomcat实现细节
- Tomcat(二) Tomcat实现:Servlet与web.xml介绍 以及 源码分析Tomcat实现细节
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- Tomcat源码分析之:ServletOutputStream的实现
- tomcat源码分析之filter和servlet
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- tomcat源码分析3—>cglib动态代理深度解析
- [servlet]深入学习Tomcat----自己动手写服务器(附服务器源码)
- Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
- Tomcat源码深入——Servlet容器之外观模式