1. 程式人生 > >Jobs(二) Servlet的配置

Jobs(二) Servlet的配置

servlet 處理方式 class www font 自己 處理 網絡 inf

  折騰了一會,終於實現了:在瀏覽器中輸入數據,然後在Java類中取出輸出,並使瀏覽器重定向(接收一個request,返回一個response)。

  這裏有幾個問題需要詳細記錄一下。

  首先是request的發起處,即HTML中的form元素。form元素中的有兩個屬性是必填的:action和method。如下圖:

<form action="test" method="get"> 
        Personal Information:<br/>
        Your Name:<br/>
        <input type="text"
name="userName" value="NoOne"> <input type="submit" name="Submit" value="搞定"> </form>

  首先,method屬性代表request的提交方式,只能是GET或者POST,這是計算機網絡中的基礎知識,無需多言。

  而action屬性,指明了當提交表單時,向何處發送表單數據。它可以填:

  • 絕對URL - 指向其他站點(比如 action="http://www.google.com"),當然,這裏谷歌不會對你的請求做什麽回應;
  • 相對URL - 指向站點內的文件(比如 action="test.htm"),或者是處理這些數據的對應的Servlet名(例如action="test",test是處理這些數據的一個servlet所映射的url,我在web.xml中已經映射好了,見下圖);
    <servlet>
        <servlet-name>indexServlet</servlet-name>
        <servlet-class>org.bigo.IndexResponse</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>indexServlet</servlet-name>
        <url-pattern>/test</
url-pattern> </servlet-mapping>

  這裏使用的是相對URL,它是一個servlet,名字為indexServlet(servlet名可以自定義,因為我輸入數據的頁面為index.html),它所映射到的處理類(對request中的數據進行實際處理的Java類)為org.bigo包中IndexResponse.java。後面為映射配置,我指定了名為indexServlet的servlet,處理這樣的request:request的請求URL為“http://www.xxx.com/aaa/.../test”。

  需要註意的是在servlet-mapping的url-pattern中,不能直接寫為“test”,任何時候都不能省略斜杠,必須寫“/test”。同時在HTML的form元素的action屬性中,只能寫action="test",而不能寫action="/test“。(如果指定的是文件名,也同樣如此,加上斜杠後,瀏覽器有不同的處理方式)

  我的Web應用的url為“http://localhost:8080/jobs/”,所以當在form中編寫“action="http://localhost:8080/jobs/test",即填寫的絕對url時,也能達到同樣的目的。(那麽如果這裏在絕對URL後加了“/”呢?就會404)。

  這裏也寫個最佳實踐:<url-pattern>元素值為“/aabbcc”,那麽HTML的form的action屬性用相對url就為“aabbcc”,二者都不要再添加多余的符號了。

  

  這裏還需要註意的一個點是,我在IDE的HTML編輯頁面,可以點擊一個瀏覽器的logo直接顯示一個html文件,IDE提供這個功能是為了方便即時查看頁面,此時瀏覽器中的地址,並不會是你的web工程的地址,所以千萬不要在這種情況下進行功能測試。只有在瀏覽器中輸入自己web工程的url後,才會有正確的反饋。(我中間就這樣出錯了)

Jobs(二) Servlet的配置