天道酬勤,学无止境

How to send serialized object to a servlet using Apache HttpClient

I have a Main() class where I serialize an object of a class called Names. I am using Apache HttpClient's HttpPost() to call a servlet.

public static void main(String[] args) {

    Names names = new Names();
    names.setName("ABC");
    names.setPlace("Bangalore");
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Name.txt"));
    out.writeObject(names);
    out.close();

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:6080/HttpClientGson/FirstHttpPostServlet");

Now, how do I send the ObjectOutputStream object? I wrote the following line httppost.setEntity(out)

But setEntity() can only take objects of HttpEntity type. Is there any other method of HttpClient that I can use to send serialized object?

评论

You could SerializableEntity class shipped with HttpClient

httpost.setEntity(new SerializableEntity(mySerializableObj, false));

Please note, though, that binary object serialization should be used only when absolutely required. Other serialization formats such as XML or JSON should generally be preferred.

You can use XStream to serialize an object to XML/JSON. http://x-stream.github.io/ and then to pass it.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 对 HttpClient 中创建 cookie 的不同方法感到困惑(Confused with different methods of creating cookie in HttpClient)
    问题 在 HttpClient 中有不同的方法来创建 cookie,我很困惑哪一种是最好的。 我需要创建、检索和修改 cookie。 例如,我可以使用以下代码查看 cookie 列表并修改它们,但如何创建它们? 这是检索它们的正确方法吗? 我需要它们在所有课程中都可以访问。 此外,我发现的其他方法通常需要 httpresponse、httprequest 对象将 cookie 发送到浏览器,但是如果我不想使用它们呢? 代码 import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpState; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; public class GetCookiePrintAndSetValue { public static void main(String args[]) throws Exception { HttpClient client = new HttpClient(); client.getParams().setParameter("http.useragent",
  • 使用HTTP客户端将序列化对象从Android发送到Servlet(Sending a serialized object from Android to a servlet using HTTP client)
    问题 我尝试创建一个Android应用程序,该程序将手机中的序列化对象发送到Servlet,该对象的内容是用户的输入,我将使用休眠将其存储在数据库中。 我相信问题在于代码下面的对象的序列化和反序列化。 如果有人可以帮助我,我将非常感激。 ps类User实现了可序列化的接口 客户 public class Adduser extends Activity implements OnClickListener { EditText uname; EditText password; EditText rating; EditText date; Button add; User user; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); uname = (EditText) findViewById(R.id.Usernamei); password = (EditText) findViewById(R.id.passwordi); rating = (EditText) findViewById(R.id.ratingi); date = (EditText)
  • Sending a serialized object from Android to a servlet using HTTP client
    I have tried to create a android application that sends a serialzed object from the phone to a servlet the contents of the object is the input from the user which i will store in a database using hibernate. I believe the problem is around the serializing and deserializing of the object the code is below. If anyone could help i would very greatful. p.s the class User implements the serializable interface client public class Adduser extends Activity implements OnClickListener { EditText uname; EditText password; EditText rating; EditText date; Button add; User user; @Override public void
  • 从 Java Servlet 向 Web API 发送 get 请求(To send get request to Web API from Java Servlet)
    问题 常见问题 是否可以从 Java servlet 的doGet方法发送 get 请求? 我需要根据我的 Web API .NET 服务检查一些“票证”,所以我可以在doGet方法中从我的自定义 servlet 调用这个服务吗? public class IdentityProviderServlet extends HttpServlet { ... @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { ... // make request to Web API and save received user name to response ... } 细节 我们有使用 TIBCO Spotfire 7.0 作为分析报告引擎的 Web 应用程序(.NET、MVC5)。 为了让我们的用户在 Web 应用程序中查看报告,我们使用了 Spotfire WebPlayer(IIS Web 应用程序)和 JavaScript API。 我们在 Web 应用程序中对我们的用户进行身份验证,然后允许他们利用 JS API 获取对 WebPlayer 的请求。 为了使用已经过身份验证的用户,我们在 WebPlayer
  • 将 blobstore 与谷歌云端点和 android 一起使用(using blobstore with google cloud endpoint and android)
    问题 我正在使用 eclipse 插件开发一个应用引擎连接的 android 项目。 该应用程序的一个方面是允许用户 Alpha 向用户 Bravo 发送图片。 为此,我有以下设置: 用户 Alpha 发帖: 通过端点将图像发送到我的应用引擎服务器服务器将图像存储在 blob 存储中服务器将 blobkey 存储在数据存储中 用户 Bravo 获得: 服务器从数据存储中获取 blobkey 服务器使用 blob 键获取图像服务器使用端点将图像发送到 android 应用程序 从我的 android 应用程序发送图像到我可以在 blob 疮中看到它,此设置需要两 (2) 分钟以上的时间。 不用说,这是完全不能接受的。 我的服务器正在通过以下代码以编程方式处理图像: public static BlobKey toBlobstore(Blob imageData) throws FileNotFoundException, FinalizationException, LockException, IOException { if (null == imageData) return null; // Get a file service FileService fileService = FileServiceFactory.getFileService(); // Create a
  • WSO2 ESB 4.0.3 - 从 4.0.* 存储库安装数据服务功能时出错(WSO2 ESB 4.0.3 - Error installing Data Services feature from 4.0.* repositories)
    问题 我下载了 WSO2 ESB 4.0.3 并将其解压缩到我的 MAC book PRO 上,使用 MAC OSX 10.7.5。 我通过管理 UI 添加了以下存储库。 http://dist.wso2.org/p2/carbon/releases/4.0.3/ 我搜索了数据服务功能并尝试安装它。 我无法安装数据服务功能 4.0.2。 它在 WSO2 控制台上给了我以下错误。 [2013-01-15 16:01:13,157] INFO - HTTPSender Unable to sendViaPost to url[https://17.209.23.156:9443/services/ProvisioningAdminService] java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293) at com.sun.net.ssl.internal
  • WSO2 ESB 4.0.3 - Error installing Data Services feature from 4.0.* repositories
    I downloaded WSO2 ESB 4.0.3 and unzipped it on my MAC book PRO with MAC OSX 10.7.5. I added following repository via admin UI. http://dist.wso2.org/p2/carbon/releases/4.0.3/ I searched Data Services feature and try to install it. I am not able to install the Data Services feature 4.0.2. It gives me following error on the WSO2 console. [2013-01-15 16:01:13,157] INFO - HTTPSender Unable to sendViaPost to url[https://17.209.23.156:9443/services/ProvisioningAdminService] java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net
  • Create json object in servlet
    I want to send retrieved data from sever to my Android client... I used a json object to do that. Here is my servlet code. import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import
  • 远程Servlet之间的通信(communication between remote servlets)
    问题 我有两个Web应用程序,分别是App1和App2。 我想从App1中的servlet调用App2中的servlet。 我为此使用URLConnection。 我还可以将参数传递给App2中的servlet,也可以接收来自servlet的响应作为字符串。 但是我想从App2中的servlet发送Java对象,并在App1的servlet中接收它们。 如何实现呢? 回答1 依靠。 如果这些Web应用程序实际上在同一servlet容器中的同一Web服务器上运行,则只需将其设置为request属性,然后将请求转发到其他上下文: request.setAttribute("name", object); ServletContext app2 = getServletContext().getContext("app2"); app2.getRequestDispacher("servletUrl").forward(request, response); 另一个上下文将能够按如下方式获取对象: Object object = request.getAttribute("name"); 这仅需要服务器设置,即可相互访问上下文。 如何执行此操作取决于servlet容器。 例如,在Tomcat中,您只需crossContext webapp的<Context
  • HTTP 415 不支持的媒体类型(HTTP 415 Unsupported Media Type)
    问题 我创建了一个示例 Web 服务来进行后期调用。 我正在使用 Jersey JAX-RS 和 Maven。 网页.xml <servlet> <servlet-name>provider-serlvet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>org.is.ws.provider.rest.ProviderAggregateApplication</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>provider-serlvet</servlet-name>
  • Java:如何从servlet上载文件到WebDAV服务器?(Java: How to upload a file to a WebDAV server from a servlet?)
    问题 我的ajax应用程序从用户的浏览器将文件上传到Java应用程序容器。 我想做的是:上传完成后,我想将文件“发送”到WebDAV服务器,该服务器由主机名(即localhost),端口(即8080)和我想要的位置标识存储文件(即dir1 / dir2)。 我所追求的基本上是一个WebDAV客户端框架,该框架使我能够将文件上传到WebDAV。 在我的应用程序中,我已经在使用“ webdavclient4j”,但是我似乎找不到一种使用它上传文件的方法吗? 有任何想法吗? 在此先感谢您提供的任何帮助。 F 回答1 使用我最近发布的Java沙丁鱼超级简单易用的现代webdav客户端,只需几行代码即可完成此操作。 这是几个示例(第一个示例使用commons-io读取文件): Sardine sardine = SardineFactory.begin("username", "password"); byte[] data = FileUtils.readFileToByteArray(new File("/file/on/disk")); sardine.put("http://yourdavserver.com/adirectory/nameOfFile.jpg", data); 或使用流: Sardine sardine = SardineFactory.begin(
  • 嵌入式 Jetty 服务器挂起(Embedded Jetty server hangs)
    问题 我试图在我的程序中嵌入一个码头服务器,它似乎在每个线程到达服务器一个请求后挂起。 我写的测试用例代码是: import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.concurrent.atomic.AtomicLong; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client
  • Apache HttpClient 4.0.3 - how do I set cookie with sessionID for POST request?
    can you tell me how to store jsessionid in cookie, so it can be passed to the servlet with post request? I'm using Apache HttpClient version 4.0.3. All the solutions I've found explains how to do this with HttpClient 3.1. I've read tutorial and tried this, but it isn't working. HttpPost httppost = new HttpPost(postData); CookieStore cookieStore = new BasicCookieStore(); BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", getSessionId()); cookieStore.addCookie(cookie); client.setCookieStore(cookieStore); response = client.execute(httppost); Edit - further explanations I'm connecting
  • 什么是Apache-HttpClient / UNAVAILABLE错误(Android,Google App Engine)?(What is Apache-HttpClient/UNAVAILABLE error (Android, Google App Engine)?)
    问题 我面临着一个我不知道该如何解释的问题。 我正在使用Android和Google App Engine做一个项目。 当我尝试直接从servlet(硬编码)将信息保存在Google App Engine的Big Table中时,执行保存就没有问题了。 但是,当我尝试从Android设备保存数据时,未执行保存,并且日志指示Apache-HttpClient / UNAVAILABLE错误。 更具体: 405 55ms 0kb Apache-HttpClient/UNAVAILABLE (java 1.4) 82.155.246.249 - - [10/Jun/2013:05:20:59 -0700] "POST /servletnamehere HTTP/1.1" 405 306 - "Apache-HttpClient/UNAVAILABLE (java 1.4)" "appnamehere.appspot.com" ms=56 cpu_ms=21 cpm_usd=0.000034 app_engine_release=1.8.0 instance=00c61b117cede3f754aa1ece730dc88287a20199 我已经看到405 HTTP错误出现在POST方法的上下文中(“ 405错误通常发生在POST方法中。您可能正在尝试在网站上引入某种输入形式
  • 在servlet中创建json对象(Create json object in servlet)
    问题 我想将检索到的数据从服务器发送到我的 Android 客户端......我使用了一个 json 对象来做到这一点。 这是我的 servlet 代码。 import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json
  • 什么导致 HttpHostConnectException?(What causes HttpHostConnectException?)
    问题 我在搜索我的网站时有一个自动完成/提前输入功能。 我看到有一段时间他们是与之相关的例外。 我们正在使用代理服务器。 org.apache.http.conn.HttpHostConnectException: Connection to http://proxy.xyz.com:60 refused at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:159) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) at org.apache.http.impl.client.AbstractHttpClient.execute
  • Embedded Jetty server hangs
    I am trying to embedded a jetty server in my program and it seems to hang after each thread gets to server one request. The test case code I wrote is: import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.concurrent.atomic.AtomicLong; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient
  • 使用 HTTP Commons 客户端的基本身份验证(Basic Authentication using HTTP Commons Client)
    问题 我正在查看此链接并尝试向服务器发送请求 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html public class Test { public static void main(String[] args) throws ClientProtocolException, IOException { DefaultHttpClient httpClient; URL url = new URL("https://9.5.127.34:443"); httpClient = getSSLHttpClient(url); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope("https://9.5.127.34", AuthScope.ANY_PORT), new UsernamePasswordCredentials("root", "passw0rd")); httpClient.setCredentialsProvider(credsProvider); HttpGet httpget = new
  • Apache HttpClient 4.0.3-如何为POST请求设置带有sessionID的cookie?(Apache HttpClient 4.0.3 - how do I set cookie with sessionID for POST request?)
    问题 您能告诉我如何将jsessionid存储在cookie中,以便可以在发布请求后将其传递给servlet吗? 我正在使用Apache HttpClient版本4.0.3。 我找到的所有解决方案都说明了如何使用HttpClient 3.1做到这一点。 我已经阅读了教程并尝试了此操作,但是它不起作用。 HttpPost httppost = new HttpPost(postData); CookieStore cookieStore = new BasicCookieStore(); BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", getSessionId()); cookieStore.addCookie(cookie); client.setCookieStore(cookieStore); response = client.execute(httppost); 编辑-进一步的解释我正在连接由朋友编写的servlet。 我已经登录并获得了jsessionid 。 现在,我想发送另一个请求,并且需要传递jsessionid以进行授权。 Servlet可以正常工作,因为我使用了Java HttpURLConnection,设置了cookie,并通过了它,并且可以正常工作。 现在
  • 在Java中使用JSON进行HTTP POST(HTTP POST using JSON in Java)
    问题 我想在Java中使用JSON进行简单的HTTP POST。 假设网址是www.site.com 例如,它采用标为'details'的值{"name":"myname","age":"20"} 。 我将如何为POST创建语法? 我似乎也无法在JSON Javadocs中找到POST方法。 回答1 这是您需要做的: 获取Apache HttpClient ,这将使您能够发出所需的请求使用它创建一个HttpPost请求,并添加标头application/x-www-form-urlencoded 创建一个StringEntity ,将JSON传递给它执行通话 该代码大致如下所示(您仍然需要对其进行调试并使之正常工作): // @Deprecated HttpClient httpClient = new DefaultHttpClient(); HttpClient httpClient = HttpClientBuilder.create().build(); try { HttpPost request = new HttpPost("http://yoururl"); StringEntity params = new StringEntity("details={\"name\":\"xyz\",\"age\":\"20\"} "); request.addHeader(