2011-09-05 99 views
1

我一直在阅读关于servlet的知识,所有书籍都通过表单(POST请求)来调用servlet。 我想知道是否有其他方式来由客户端调用servlet。从客户端调用servlet

这里是我的理解:对于POST请求到一个servlet,我们使用一个链接,从而在该servlet上进行GET请求,在servlet中,我们需要从doGet()调用doPost()。

+0

我重申我的问题:从客户端页面(比如JSP或HTML页面)发出POST请求(到servlet)有哪些不同的方法? – John

+0

将鼠标放在问题下面的'servlets'标签上方,直到弹出一个框,点击其中的* info *链接,然后开启自己。 – BalusC

+0

@BalusC从来不知道_info_中有那么精致的东西。谢谢 – John

回答

1

您可以编写一个客户端,该客户端创建GETPOST HTTP消息并调用一个servlet。但是,您可以使用Apache Commons HTTP Client来做到这一点。

另外,从你的问题你似乎很薄,全部 Servlets通过POST请求处理GET请求。这是不正确的。它在您查看的servlet中完成的原因是因为servlet对GETPOST请求都执行相同的操作。所以为了最大限度地减少重复代码的数量,它是这样写的。

更新:看来Apache Commons HTTP Client现在已经结束了,并且不再被开发。它已被其HttpClientHttpCore模块中的Apache HttpComponents项目取代,该模块提供更好的性能和更大的灵活性。

UPDATE2:我把你最初的问题作为“我们如何从浏览器以外调用servlet”。那么,浏览器只是一个客户端,它可以高效,轻松地让我们向服务器发送GETPOST请求[在我们的案例中为Servlet]。我们也可以编写一个Java proram来向我们的Servlet发送GETPOST请求,但是这将是单调乏味和繁琐的。所以,我们可以使用上面指定的库来做到这一点。这些库不限于客户端Java prorams,可以从任何可调用Java代码的应用程序(包括JSP)使用。

+0

好的。我以前从未使用过它。所以我们你在JSP代码中使用这些吗? – John

+0

@John ...看到我的更新2. –

+0

你能列出不同的方式从浏览器调用一个servlet吗? – John

0

您可以使用java.net.UrlConnectionjava.net.URL

2

POST请求到Servlet请求一个servlet,我们用这样一个链接一个GET上的servlet

这不会让 请求感觉和不正确。

客户端请求GETPOST请求。在html表单中,您可以指定方法属性中的哪一个,并且在使用ajax/javascript时还指定哪一个。

是的,在servlet中指定doGet和doPost。约定是使用POST向服务器发送(发布)数据,而get则用于返回数据;然而这并不是被执行。

0

看看servlet api(http://download.oracle.com/javaee/1.2.1/api/javax/servlet/http/HttpServlet.html)。

支持四种方法(GET,POST,PUT,DELETE)。理论上你可以使用客户端的任何一个。

但事实上,您的客户端通常是浏览器或Web服务使用者。实际上,经常只使用GET和POST。

-1

有两个是调用servlet,调用doGet()的HTTP GET和调用doPost()的HTTP POST。 HTTP协议很简单,可以使用多个客户端。你可以编写你自己的,你可以使用现成的java库,你可以使用像curl这样的命令行实用程序。

doGet()和doPost()方法可以做同样的事情或不同的事情。

有设计的servlet的两种常用方法:

  1. 每个servlet做同样的的doGet()和doPost(),有一个叫其他。

例子: FindCustomerServlet - 找到客户记录 UpdateCustomerServlet - 更新客户记录

  1. 该servlet做不同的事情中的doGet()和doPost()。

示例: CustomerServlet - 使用GET查找记录,POST进行更新。

0

我会使用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(); 
0

你有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请求。