Java Web Servlet映射配置 (No.4.1)

之前在使用 web.xml配置Servlet時候出了一些問題,現在大概明白了原因出在哪里。
在這里總結下當時使用 web.xml配置時出現的一些問題以及解決的方法



關鍵點在于兩個:
HTML(JSP)頁面中表單屬性action的值,以及web.xml中幾個標簽的設置

  1. action屬性:
    這個action屬性其實并沒有具體的意義,只是與web.xml中的<url-pattern></url-pattern>中的值對應即可。但是這里要注意諸如/emailListemailList這兩種表達的區別。之前的虧就吃在這里了。

    之前遇到的一個問題
    我在IDEA工程沒有注意到,當時我設置了<form action="/email" method="post">(我這里有斜杠),在訪問的時候顯示我訪問到了這個地址:[http://localhost:8080/email],而我的web.xml設置如下:
/Task_9_21_war_exploded
    <servlet>
        <servlet-name>emailListServlet</servlet-name>
        <servlet-class>TYUT.emailListServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>emailListServlet</servlet-name>
        <url-pattern>/email</url-pattern>
    </servlet-mapping>

看起來都是正確的,都是匹配的,然而卻顯示 404 NOT FOUND,所以我推測[http://localhost:8080/email]并不是<url-pattern>/email</url-pattern>所代表的地址。
之后我重新設置:<form action="email" method="post">,然后得到的Servlet訪問地址為:[http://localhost:8080/Task_9_21_war_exploded/email],而此時正確連接到了Servlet上了。

為什么會造成這種情況?

后來發現,工程設置中有這么一條:

工程設置.PNG

也就是說,我之前設置了工程的根目錄就是服務器根目錄下的/Task_9_21_war_exploded,也就是說我指定了這個目錄才是這個項目的根目錄。所以造成了我以為的是根目錄的[http://localhost:8080/email]其實并不是根目錄。將這個設置修改為:
設置2.PNG

此時安安心心地設置:<form action="/email" method="post">,就可以正常訪問了。


回到正題

2.使用web.xml配置Servlet的方法:
之前 No.1 那篇里說過web.xml配置,這里再援引一篇講的不錯的博客。
https://www.cnblogs.com/fnz0/p/5586019.html
這篇博客講了web.xml的配置以及從表單是如何轉到Servlet的具體細節,很具有參考價值。
這里提一下博客里提到的跳轉過程:

    <servlet>
        <servlet-name>emailListServlet</servlet-name>    //3
        <servlet-class>TYUT.emailListServlet</servlet-class>  //4
    </servlet>

    <servlet-mapping>
        <servlet-name>emailListServlet</servlet-name>  //2
        <url-pattern>/email</url-pattern>  //1
    </servlet-mapping>
  • 首先當一個表單請求發出之后,服務器首先在web.xml中搜索,找到 1(1的內容與表單action屬性相同)
  • 找到1之后,拿著2的值找到3
  • 找到3之后,根據4找到具體的類,然后執行類中的 doGetdoPost方法


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文包括: Servlet簡介關于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 3,891評論 1 67
  • 一、Http協議 HTTP協議:超文本傳輸協議(HTTP,HyperText Transfer Protocol)...
    圣賢與無賴閱讀 1,240評論 0 13
  • 簡書 賈小強轉載請注明原創出處,謝謝! Servlet是一種允許響應請求的Java類。雖然Servlet可以響應任...
    賈小強閱讀 10,640評論 1 44
  • 對于java中的思考的方向,1必須要看前端的頁面,對于前端的頁面基本的邏輯,如果能理解最好,不理解也要知道幾點。 ...
    神尤魯道夫閱讀 829評論 0 0
  • 作家是要多愁善感些的,幸福的日子過久了,竟不知怎么寫出一篇長一點的文章來。 要不就來說說幸福的事兒吧,從過年回老家...
    半熟婦人閱讀 258評論 0 0