【问题标题】:Query on default page of Tomcat serverTomcat服务器默认页面查询
【发布时间】:2014-07-20 23:26:46
【问题描述】:

这是一个我想了解的非常基本的问题。

我在端口 8080 上运行 Fresh Apache tomcat 服务器,当我输入 URL http://localhost:8080 时,我看到浏览器向 tomcat 发送以下请求。

GET / HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

我看到下面带有Content-type:text/html的http响应

我的问题:

1)当tomcat服务器收到这个GET请求时,GET请求的/参数如何映射到上面的html页面作为tomcat端的响应?这与 tomcat/conf/web.xml 中的以下 xml 元素有关吗?收到这个请求后tomcat端的流程是什么?

<!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

【问题讨论】:

  • 这个查询link 讨论了默认映射的特定servlet,但我的问题是了解tomcat 接收请求和发送响应的高级流程。
  • 你在说什么参数?
  • @RomanC 我想了解,{GET /} 请求如何映射到上面的 html 响应。这个 html 在哪里?
  • 默认是webapps/ROOT,在里面你会找到index.jsp。
  • @RomanC 所以触发这个 html 与任何 web.xml 都没有关系,对吧?

标签: java apache tomcat servlets


【解决方案1】:

Tomcat 架构

Request Process Flow中的A UML sequence diagram会帮助你理解它。

直接从 Apache Tomcat 7 的官方文档中阅读有关以下部分的更多信息:

  • Overview - Tomcat 服务器架构概述,包含关键术语和概念。
  • Server Startup - Tomcat 服务器如何启动的详细描述和序列图。
  • Request Process Flow - 详细说明 Tomcat 如何处理请求。

这可能有助于您理解url-pattern

Servlet 匹配过程

一个请求可以匹配给定上下文中的多个 servlet 映射。 servlet 容器使用简单的匹配过程来确定最佳匹配。

匹配过程有四个简单的规则。

  • 首先,容器更喜欢精确路径匹配而不是通配符路径匹配。

  • 其次,容器更喜欢匹配最长的模式。

  • 第三,容器更喜欢路径匹配而不是文件类型匹配。

  • 最后,&lt;url-pattern&gt;/&lt;/url-pattern&gt; 模式总是匹配任何没有其他模式匹配的请求。


请查看我的帖子How does a servlets filter identify next destination is another filter or a servlet/jsp? 以获得详细描述以直观地理解它。

【讨论】:

  • 我们在tomcat/conf目录中有tomcat提供的web.xml。如果我们编写自己的应用程序,它位于 tomcat/webapps/app/web-inf/web.xml 那么tomcat如何理解GET请求中的/参数是指tomcat/conf/web.xml的默认servlet还是tomcat/conf/web.xml的默认servlet tomcat/webapps/app/web-inf/web.xml?
  • 它可能会帮助你Tomcat Default Servlet Reference
  • Catalina.Servlets.Defaultservlet 类在哪里?哪个jar文件或目录?
  • 它在 catalina.jar 内,位于 tomcat lib 文件夹中。阅读更多关于The Apache Tomcat 5.5 Servlet/JSP Container
  • 上面显示的 html 响应是由于这个位于 catalina.jar 中的默认 servlet 类引起的?因为我们说 defaultservlet 已为我的 {GET /} 请求执行。这个 html 是如何为我的 {GET /} 请求触发的?这个 html 在哪里?
【解决方案2】:

对。这就是 web.xml 的全部内容。这是 Java Web 应用程序中最重要的文件之一。GET 的 / 参数由内置的 servlet 映射。为了更好地理解这一点,您需要学一点 JSP/Servlet 的东西

【讨论】:

  • 如你所说,这是因为web.xml,但是web.xml指向默认servlet,我怎么理解,关于触发html作为响应?
  • 每当您的应用程序被部署并且第一次请求到来时,将自动调用该servlet,该servlet将通过链将请求转发给其他servlet。
  • 这里的场景是,尚未部署应用程序。我试图了解如何触发 html 响应,如上所示的“GET /”请求
猜你喜欢
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2012-08-03
  • 1970-01-01
  • 2011-02-07
  • 2013-12-21
相关资源
最近更新 更多