我一直在阅读servlet,所有书籍都涉及通过表单(POST请求)调用servlet。 我想知道是否有其他方法可以由客户端调用servlet。
以下是我的理解:对于对servlet的POST请求,我们使用一个链接,因此在该servlet上发出GET请求,在servlet中我们需要从doGet()调用doPost()。
答案 0 :(得分:2)
对于对servlet的POST请求,我们使用链接进行GET 请求该servlet
这没有意义,也是不正确的。
客户端提出GET或POST请求。在html表单中,您可以指定method属性中的哪个,以及使用ajax / javascript时还指定哪个。
是的,在servlet中指定了doGet和doPost。惯例是使用POST将数据发送(发布)到服务器,而get用于返回数据;但是这不会 强制执行。
答案 1 :(得分:1)
您可以编写一个创建GET
和POST
HTTP消息的客户端并调用servlet。但是,您可以使用Apache Commons HTTP Client来执行此操作。
此外,根据您的问题,您似乎很难通过GET
请求所有 Servlet处理POST
请求。那是不对的。在您查看的servlet中完成它的原因是因为servlet对GET
和POST
请求执行相同的操作。因此,为了最大限度地减少重复代码的数量,就这样写了。
更新:似乎Apache Commons HTTP Client现已结束,不再被开发。它已被Apache HttpComponents和HttpClient模块中的HttpCore项目取代,后者提供了更好的性能和更大的灵活性。
UPDATE2:我把你原来的问题称为“我们如何调用除浏览器以外的servlet”。好吧,浏览器只是一个客户端,可以高效,轻松地让我们向服务器发出GET
和POST
个请求[在我们的例子中为Servlet
]。我们还可以编写Java proram来向GET
请求POST
和Servlet
,但这将是繁琐而繁琐的。因此,我们可以使用上面指定的库来做到这一点。这些库不仅限于客户端Java prorams,可以在任何可以调用Java代码[包括JSP]的应用程序中使用。
答案 2 :(得分:0)
您可以使用java.net.UrlConnection
和java.net.URL
答案 3 :(得分:0)
查看servlet api(http://download.oracle.com/javaee/1.2.1/api/javax/servlet/http/HttpServlet.html)。
支持四种方法(GET,POST,PUT,DELETE)。理论上你可以使用客户端的任何一个。
但实际上,您的客户端通常是浏览器或Web服务使用者。实际上,经常只使用GET和POST。
答案 4 :(得分: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();
答案 5 :(得分: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()(以接受和处理表单数据)。
以下是我的理解:对于对servlet的POST请求,我们使用一个链接,从而在该servlet上发出GET请求,在servlet中我们需要从doGet()调用doPost()
我不明白这一部分,但我认为你错了。 service()方法根据HTTP方法(例如GET,POST)确定要调用的servlet方法。如果客户端发送了HTTP GET请求,则service()方法将调用doGet()方法,并将请求和响应对象作为参数传递。为方便起见,一些IDE设置servlet,因此它们的doPost()方法调用doGet(),因为它们旨在以相同的方式处理GET和POST请求。
答案 6 :(得分:-1)
有两个是调用servlet,HTTP GET调用doGet()和HTTP POST调用doPost()。 HTTP协议很简单,可以使用大量客户端。你可以编写自己的,你可以使用现成的java库,你可以使用像curl这样的命令行实用程序。
doGet()和doPost()方法可以做同样的事情或不同的事情。
设计servlet有两种常用方法:
实施例: FindCustomerServlet - 查找客户记录 UpdateCustomerServlet - 更新客户记录
实施例: CustomerServlet - 使用GET查找记录,使用POST进行更新。