servlet在tomcat中的运行原理(菜鸡理解)

加载运行servlet

       servlet在tomcat中加载时,会扫描所有servlet文件,生成一个map对象,里面存储映射表,表里为key(urlPatterns)、value(class类名),运行时访问映射表,根据路径找到class类。

浏览器向服务器请求时,服务器不会直接执行我们的类,而是到web.xml里寻找路径名
①:第一步,浏览器输入访问路径后,携带了请求行,头,体
②:第二步,根据访问路径找到已注册的servlet名称
③:第三步,根据映射找到对应的servlet名
④:第四步,根据servlet名找到我们全限定类名,即我们自己写的类

我感觉很好的servlet执行的完整流程原文链接:https://blog.csdn.net/u010452388/article/details/80395679

Context的部署配置文件web.xml的说明

       一个Context对应于一个Web App,每个Web App是由一个或者多个servlet组成的。
  当一个Web App被初始化的时候,便会为这个webapp创建一个context对象,并把这个context对象注册到指定虚拟主机(host)上,接着,它将用 自己的ClassLoader对象载入“部署配置文件web.xml”中定义的每个servlet类。它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类,然后载入在自己的Web App根目录下的WEB-INF/web.xml中部署的servlet类。
  web.xml文件有两部分:servlet类定义和servlet映射定义
  每个被载入的servlet类都有一个名字,且被填入该Context的映射表(mapping table)中,和某种URL PATTERN对应。当该Context获得请求时,将查询mapping table,找到被请求的servlet,并执行以获得请求回应
  分析一下所有的Context共享的web.xml文件,在其中定义的servlet被所有的Web App载入
  这段话转载自NiceCui:Tomcat原理详解大全

<!----------------------------------------------------------------------------------------------->
<web-app>
<!-- 概述: 该文件是所有的WEB APP共用的部署配置文件, 每当一个WEB APP
被DEPLOY,该文件都将先被处理,然后才是WEB APP自己的/WEB-INF/web.xml -->
<!-- +-------------------------+ -->
<!-- | servlet类定义部分 | -->
<!-- +-------------------------+ -->
<!-- DefaultServlet
当用户的HTTP请求无法匹配任何一个servlet的时候,该servlet被执行
URL PATTERN MAPPING : / -->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
   <param-name>debug</param-name>
   <param-value>0</param-value>
</init-param>
<init-param>
   <param-name>listings</param-name>
   <param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- InvokerServlet
处理一个WEB APP中的匿名servlet 当一个servlet被编写并编译放入
/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时候
该servlet被调用,把匿名servlet映射成/servlet/ClassName的形式
URL PATTERN MAPPING : /servlet/ * -->
<servlet>
   <servlet-name>invoker</servlet-name>
   <servlet-class>org.apache.catalina.servlets.InvokerServlet </servlet-class>
   <init-param>
     <param-name>debug</param-name>
     <param-value>0</param-value>
   </init-param>
   <load-on-startup>2</load-on-startup>
</servlet>
<!-- JspServlet
当请求的是一个JSP页面的时候(*.jsp)该servlet被调用
它是一个JSP编译器,将请求的JSP页面编译成为servlet再执行
URL PATTERN MAPPING : *.jsp -->
<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
  <init-param>
     <param-name>logVerbosityLevel</param-name>
     <param-value>WARNING</param-value>
  </init-param>
 <load-on-startup>3</load-on-startup>
</servlet>
<!-- +---------------------------+ -->
<!-- | servlet映射定义部分 | -->
<!-- +---------------------------+ -->
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
   <servlet-name>invoker</servlet-name>
   <url-pattern>/servlet/ *</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<!-- +------------------------+ -->
<!-- | 其它部分,略去先 | -->
<!-- +------------------------+ -->
... ... ... ...
</web-app>
<!----------------------------------------------------------------------------------------------->

web.xml常用元素的含义:

<web-app>
        <display-name></display-name>:定义了web应用的名字;
        <description></description>:声明了web应用描述信息;
        <context-param></context-param>:声明应用范围内初始化参数;
        <filter></filter>:过滤元素,将一个名字与一个实现javax.servlet.Filter接口的类相关联;
        <filter-mapping/>:一旦命名了过滤器,就要利用filter-mapping元素把它与一个或多个servlet或jsp页面关联;
        <listener></listener>:servlet API版本2.3增加了事件监听支持,事件监听程序在建立、修改和删除回话或servlet环境时得到通知;
        <servlet></servlet>:在servlet或jsp页面执行初始化参数或定制URL时,必须首先命名servlet或jsp页面;
        <servlet-mapping/>:服务器一般为servlet提供一个缺省的url。在更改缺省url时,使用servlet-mapping元素;
        <session-config></session-config>:设置回话超时时间,默认单位分钟;
        <mime-mapping></mime-mapping>:发送到客户端为什么类型;
        <welcome-file-list/>:指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件;
        <error-page></error-page>:返回特定http状态码时,或者特定类型异常抛出时,能够制定要显示的页面;
        <taglib></taglib>:对标记库描述文件指定别名。</webk-app>
--------------------- 
原文链接:https://blog.csdn.net/u010180031/article/details/54177675 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet是Java Web应用的一个组件,它通过与Web容器(如Tomcat)进行交互,实现了处理Web请求和生成Web响应的功能。Servlet的功能主要通过以下几个方面来实现: 1. 生命周期管理:Servlet容器在应用启动时会加载和初始化Servlet,并在应用关闭时销毁ServletServlet可以实现一些特定的生命周期方法(如init()和destroy()),用于在初始化和销毁时执行相应的操作,如资源的初始化和释放。 2. 请求处理:Servlet容器接收到客户端的HTTP请求后,将请求转发给对应的Servlet进行处理。Servlet可以通过实现doGet()、doPost()等方法来处理GET和POST请求,或者通过实现service()方法来处理所有类型的请求。Servlet可以读取请求参数、处理业务逻辑,并生成相应的响应内容。 3. 数据交互:Servlet可以通过HttpServletRequest对象获取客户端发送的数据,如请求参数、HTTP头信息等。同时,Servlet还可以通过HttpServletResponse对象生成响应内容,并设置响应头信息、状态码等。通过这些对象,Servlet可以与客户端进行数据交互,实现动态生成Web页面或处理RESTful API。 4. 会话管理:Servlet容器提供了会话管理的支持,Servlet可以通过HttpServletRequest对象获取和创建会话,以及在会话存储和获取数据。会话管理功能允许Servlet在多个请求之间保持状态,并实现用户认证、权限控制等功能。 5. 并发处理:Servlet容器可以同时处理多个请求,Servlet需要保证线程安全,以避免多个请求之间的数据竞争。Servlet可以使用同步机制或使用线程安全的数据结构来实现并发处理。 总之,Servlet通过生命周期管理、请求处理、数据交互、会话管理和并发处理等功能,实现了与客户端的交互和业务逻辑的处理。它是Java Web应用的核心组件之一,为开发者提供了处理Web请求和生成响应的灵活手段。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值