tomcat_7

看了上面那篇文章,可以更加深刻的理解conf下面的那一堆的xml配置文件了,這裏我就不多講了,我們只想關注我的項目web.xml到底應該怎麼寫呢?這樣就需要了解Context是如何處理這個文件的,其他的就先不關心了。好好看看上面的那篇文章還是很有益處的。
再把問題具體化一些,基於j2ee的服務器的webhttp請求到底有哪幾種呢?我分爲兩種,一種是頁面資源的請求,一種的邏輯資源的請求。雖然最後都是通過頁面來展示結果。第一種是一般的html等靜態頁面,第二種就是Servlet了。而jsp呢?你可以兩種方式來理解,一種是把邏輯資源嵌在頁面資源裏面,也可以是把頁面資源嵌在邏輯資源裏面。個人比較贊成前面一種,雖然web服務器都是把jsp頁面當作Servlet來看待。於是呢,Context容器的主要功能就是要區別這兩種請求,第一種就是到達相應目錄找到具體請求頁面,然後返回。第二種就是找到請求對應的Servlet類,來通過某種方式來處理。(jsp不具體講,因爲你可以這樣看,請求是頁面請求,處理是邏輯處理)

然後來猜猜Context該做些什麼呢?對於第一種請求,比較簡單了,只要定義一個頁面資源的後綴名集合的映射就可以了,處理就是根據目錄去找就是了。後綴名集合是什麼東西呢?大家可以看看conf下的那個web.xml文件的後部分,你會看到一堆的結點<mime-mapping>,關於MIME,如果想了解的可以去網上搜,不難。這樣靜態的資源就是這個就ok了,不需要其他的設置了,因爲處理過程只是根據url去相應目錄下找就是了,找到就直接返回就是了,沒有其他的邏輯處理。哦,這裏還有一個,就是容器是如何來通過路徑來找到那個靜態資源呢?這樣就需要一個邏輯來處理所有的靜態資源的申請了。於是就需要爲Context配置一個處理所有靜態資源請求的Servlet:
  <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>
  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
這個就是了,啓動即加載的一個Servlet,你看看上面的url-pattern,就是沒有具體的Servlet名的話就是用這個Servlet來處理。這個不需要我們管的。

然後就是.jsp和Servlet的action處理了。猜,url也包括到底是申請哪個jsp頁面,或調用那個Servlet,於是我們的第一步就是通過url去找到相應的類了。而jsp呢,前面說過web服務器都是當Servlet來處理,這樣呢,就是要多比Servlet多一步,即需要指定告訴服務器說把jsp頁面當Servlet來處理就行了。再看看文件:
  <servlet>
      <servlet-name>jsp</servlet-name>
      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
      <init-param>
          <param-name>fork</param-name>
          <param-value>false</param-value>
      </init-param>
      <init-param>
          <param-name>xpoweredBy</param-name>
          <param-value>false</param-value>
      </init-param>
      <load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>jsp</servlet-name>
      <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>jsp</servlet-name>
      <url-pattern>*.jspx</url-pattern>
  </servlet-mapping>
首先看看url-pattern,就是指所有請求的資源爲.jsp或.jspx爲後綴的都用這個Servlet來處理。
這樣就把靜態頁面和.jsp頁面的Servlet配置好了,上面也就是conf下面的web.xml文件的內容了。還剩下就是純Servlet的請求了,這樣,在conf/web.xml是沒辦法配置的,因爲具體的Servlet都是具體的web項目相關的,於是就需要說項目的WEB-INF下面的web.xml文件了,它的主要功能也就是配置項目中的Servlet了。

發佈了36 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章