先上代碼
服務器端
package com.yan.intf.helloworld.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class HelloWorldServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public HelloWorldServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request , response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String requestXml = request.getParameter("requestXml");
java.io.ObjectInputStream oi = null;
java.io.ObjectOutputStream ot = null;
System.out.println("server:\n"+requestXml);
try
{
oi = new java.io.ObjectInputStream(request.getInputStream());
Object o = oi.readObject();
System.out.println("server:\n"+o.toString());
oi.close();
oi = null;
String outObj = requestXml + o.toString();
ot = new java.io.ObjectOutputStream(response.getOutputStream());
ot.writeObject(outObj);
ot.flush();
ot.close();
ot = null;
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
try
{
if (oi != null)
{
oi.close();
oi = null;
}
if (ot != null)
{
ot.close();
ot = null;
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void init() throws ServletException {
// Put your code here
}
}
客戶端
package test;
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import com.yan.intf.helloworld.common.XmlDtoUtil;
import com.yan.intf.helloworld.dto.BizMainDto;
import com.yan.intf.helloworld.dto.RequestBodyDto;
import com.yan.intf.helloworld.dto.RequestDto;
import com.yan.intf.helloworld.dto.RequestHeadDto;
public class MyTest {
public static void main(String[] args) throws IOException, ClassNotFoundException
{
RequestDto requestDto = new RequestDto();
RequestHeadDto requestHeadDto = new RequestHeadDto();
requestHeadDto.setRequest_type("01010001");
requestHeadDto.setServer_version("1.0");
requestHeadDto.setSender("yan");
requestHeadDto.setPassworld("123456");
requestHeadDto.setFlowintime(new Date());
requestHeadDto.setUuid("11111111");
RequestBodyDto requestBodyDto = new RequestBodyDto();
BizMainDto bizMainDto = new BizMainDto();
bizMainDto.setBizNo("0001");
bizMainDto.setBizName("費率");
bizMainDto.setOperater("yan");
bizMainDto.setBizValue("0.03");
requestBodyDto.setBizMainDto(bizMainDto);
requestDto.setRequestHeadDto(requestHeadDto);
requestDto.setRequestBodyDto(requestBodyDto);
String requestXml = XmlDtoUtil.dtoToXml(requestDto);
String url = "http://localhost:8090/ws/servlet/HelloWorldServlet";
String queryString = "requestXml=hello";
String inputObj = requestXml;
Serializable s = getObjFromServer(url, queryString, inputObj);
System.out.println(s.toString());
}
/**
* @param url
* @param queryString 類似a=b&c=d 形式的參數
*
* @param inputObj 發送到服務器的對象。
*
* @return 服務器返回到客戶端的對象。
* @throws IOException
*/
public static Serializable getObjFromServer(String url, String queryString, Serializable inputObj) throws IOException
{
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
post.setQueryString(queryString);
post.setRequestHeader("Content-Type", "application/octet-stream");
java.io.ByteArrayOutputStream bOut = new java.io.ByteArrayOutputStream(1024);
java.io.ByteArrayInputStream bInput = null;
java.io.ObjectOutputStream out = null;
Serializable returnObj = null;
try
{
out = new java.io.ObjectOutputStream(bOut);
out.writeObject(inputObj);
out.flush();
out.close();
out = null;
bInput = new java.io.ByteArrayInputStream(bOut.toByteArray());
RequestEntity re = new InputStreamRequestEntity(bInput);
post.setRequestEntity(re);
client.executeMethod(post);
java.io.InputStream in = post.getResponseBodyAsStream();
java.io.ObjectInputStream oInput = new java.io.ObjectInputStream(in);
returnObj = (Serializable) oInput.readObject();
oInput.close();
oInput = null;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if (out != null)
{
out.close();
out = null;
}
if (bInput != null)
{
bInput.close();
bInput = null;
}
//釋放連接
post.releaseConnection();
}
return returnObj;
}
}
客戶端代碼中
String queryString = "requestXml=hello";
post.setQueryString(queryString);
這中方式是將參數以get的方式傳給服務器端。
get方式穿參數會有長度限制,url的長度超過255的會報錯,org.apache.commons.httpclient.URIException: Invalid query
java.io.ByteArrayOutputStream bOut = new java.io.ByteArrayOutputStream(1024);
java.io.ObjectOutputStream out = null;
out = new java.io.ObjectOutputStream(bOut);
out.writeObject(inputObj);
out.flush();
out.close();
這種方式是以post的方式穿參數給服務器端。