我一直在阅读关于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