我一直在閱讀關於servlet的知識,所有書籍都通過表單(POST請求)來調用servlet。 我想知道是否有其他方式來由客戶端調用servlet。從客戶端調用servlet
這裏是我的理解:對於POST請求到一個servlet,我們使用一個鏈接,從而在該servlet上進行GET請求,在servlet中,我們需要從doGet()調用doPost()。
我一直在閱讀關於servlet的知識,所有書籍都通過表單(POST請求)來調用servlet。 我想知道是否有其他方式來由客戶端調用servlet。從客戶端調用servlet
這裏是我的理解:對於POST請求到一個servlet,我們使用一個鏈接,從而在該servlet上進行GET請求,在servlet中,我們需要從doGet()調用doPost()。
您可以編寫一個客戶端,該客戶端創建GET
和POST
HTTP消息並調用一個servlet。但是,您可以使用Apache Commons HTTP Client來做到這一點。
另外,從你的問題你似乎很薄,全部 Servlets通過POST
請求處理GET
請求。這是不正確的。它在您查看的servlet中完成的原因是因爲servlet對GET
和POST
請求都執行相同的操作。所以爲了最大限度地減少重複代碼的數量,它是這樣寫的。
更新:看來Apache Commons HTTP Client現在已經結束了,並且不再被開發。它已被其HttpClient和HttpCore模塊中的Apache HttpComponents項目取代,該模塊提供更好的性能和更大的靈活性。
UPDATE2:我把你最初的問題作爲「我們如何從瀏覽器以外調用servlet」。那麼,瀏覽器只是一個客戶端,它可以高效,輕鬆地讓我們向服務器發送GET
和POST
請求[在我們的案例中爲Servlet
]。我們也可以編寫一個Java proram來向我們的Servlet
發送GET
和POST
請求,但是這將是單調乏味和繁瑣的。所以,我們可以使用上面指定的庫來做到這一點。這些庫不限於客戶端Java prorams,可以從任何可調用Java代碼的應用程序(包括JSP)使用。
您可以使用java.net.UrlConnection
和java.net.URL
看看servlet api(http://download.oracle.com/javaee/1.2.1/api/javax/servlet/http/HttpServlet.html)。
支持四種方法(GET,POST,PUT,DELETE)。理論上你可以使用客戶端的任何一個。
但事實上,您的客戶端通常是瀏覽器或Web服務使用者。實際上,經常只使用GET和POST。
有兩個是調用servlet,調用doGet()的HTTP GET和調用doPost()的HTTP POST。 HTTP協議很簡單,可以使用多個客戶端。你可以編寫你自己的,你可以使用現成的java庫,你可以使用像curl這樣的命令行實用程序。
doGet()和doPost()方法可以做同樣的事情或不同的事情。
有設計的servlet的兩種常用方法:
例子: FindCustomerServlet - 找到客戶記錄 UpdateCustomerServlet - 更新客戶記錄
示例: CustomerServlet - 使用GET查找記錄,POST進行更新。
我會使用Apache的HttpClient庫。真的很容易使用和定製。
下面是一些代碼爲你上手:
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost request = new HttpPost("YourServletURL");
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
// Set your parameters here...
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response = httpclient.execute(request);
HttpEntity resEntity = response.getEntity();
if (resEntity != null)
// Here you can read the response
EntityUtils.consume(resEntity);
httpclient.getConnectionManager().shutdown();
你有8種HTTP 1.1方法:GET,POST,HEAD,TRACE,OPTIONS,PUT,DELETE和CONNECT。 servlet api只實現了其中的7個doXXXX():doGet(),doPost(),doOptions(),doHead(),doTrace(),doPut(),doDelete()。但是對於大多數servlet開發人員,您將使用doGet()(用於簡單請求)或doPost()(用於接受和處理表單數據)。
這是我的理解:對於POST請求給一個servlet,我們使用了一個鏈接從而對servlet和在servlet我們需要調用從的doGet的doPost()()GET請求
我不明白這個部分,但我認爲你錯了。 service()方法根據HTTP方法(例如GET,POST)計算出要調用的servlet方法。如果客戶端發送HTTP GET請求,則service()方法會調用doGet()方法,將請求和響應對象作爲參數傳遞。爲了方便起見,一些IDE設置servlet,以使它們的doPost()方法調用doGet(),因爲它們旨在相同地處理GET和POST請求。
我重申我的問題:從客戶端頁面(比如JSP或HTML頁面)發出POST請求(到servlet)有哪些不同的方法? – John
將鼠標放在問題下面的'servlets'標籤上方,直到彈出一個框,點擊其中的* info *鏈接,然後開啓自己。 – BalusC
@BalusC從來不知道_info_中有那麼精緻的東西。謝謝 – John