嗨,我有一个从Servlet返回数据到Java客户端的问题.这是我第一次使用servlet.我在网上看到的所有示例都将数据返回到HTML页面,但我想制作服务器客户端软件,其中服务器执行某些操作并返回字符串列表.
如何从GET/POST方法返回一个数组到客户端?我在setContentType中设置了什么?我不明白我怎么能回应我想要的信息(如int,array,String)并返回客户端.
如果有人可以举例说明Java客户端发出POST请求并且Servlet向他返回一个数组或ArrayList,我将非常高兴.
您遇到了序列化的问题.序列化是将某些数据转换为可以传输的格式的地方.有几种方法可以做到这一点,其他答案中提到了一些方法.
我建议使用JSON作为您的格式.你可以从json.org获得一个很好的Java JSON库.然后,您可以使用库创建一个JSON数组,并将其写入servlet的OutputStream.
public void service(ServletRequest req, ServletResponse res) {
final JSONArray arr=new JSONArray();
for (String s : this.myListOfStrings){
arr.put(s);
}
//Here we serialize the stream to a String.
final String output = arr.toString();
res.setContentLength(output.length());
//And write the string to output.
res.getOutputStream().write(output.getBytes());
res.getOutputStream().flush();
res.getOutputStream().close();
}
Run Code Online (Sandbox Code Playgroud)
现在,从您的客户端,您可以发出请求并返回您的ArrayList,如下所示:
public ArrayList<String> contactServer(){
final URL url = new URL(serverURL);
final URLConnection connection=url.openConnection();
connection.setDoOutput(true);
/*
* ...
* write your POST data to the connection.
* ...
*/
final BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
final char[] buffer=new char[Integer.parseInt(connection.getHeaderField("Content-Length"))];
int bytesRead=0;
while (bytesRead < buffer.length){
bytesRead += br.read(buffer, bytesRead, buffer.length - bytesRead + 1);
}
final JSONArray arr = new JSONArray(new String(buffer));
final ArrayList<String> ret = new ArrayList<String>(arr.length());
for (int i=0; i<arr.length(); i++) {
ret.add(arr.get(i));
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15065 次 |
| 最近记录: |