最近做一個項目不能使用webservice,必須使用http+post+xml的方式。具體流程是A項目嗲用B項目的介面,參數和傳回值的傳送接收。以下代碼測試可用。
1.請求端代碼
package action;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.URL;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ClientAction extends HttpServlet{ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //req.setCharacterEncoding("utf-8"); StringBuffer reqXml = new StringBuffer();/* reqXml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); reqXml.append("<request>"); reqXml.append(" <meta>"); reqXml.append(" <channeltype>001</channeltype> "); reqXml.append(" <reqserialno>02340385038080</reqserialno>"); reqXml.append(" <trancode>DX001</trancode>"); reqXml.append(" <sourceid>10</sourceid>"); reqXml.append("</meta>"); reqXml.append("<data>"); reqXml.append(" <channeltype>001</channeltype>"); reqXml.append(" <username>gjjxc</username> "); reqXml.append("<password>gjjxc</password> "); reqXml.append(" <phone>18662536750</phone>"); reqXml.append("<content>測試</content>"); reqXml.append("</data>"); reqXml.append("</request>");*/ InputStream input = this.getClass().getClassLoader().getResourceAsStream("message.txt"); BufferedReader reqReader = new BufferedReader(new InputStreamReader(input,"utf-8")); String line2 = null; while((line2 = reqReader.readLine()) != null){ reqXml.append(line2); } reqReader.close(); URL url = new URL("http://localhost:8080/SMSPLANT/testServlet"); HttpURLConnection uc = (HttpURLConnection)url.openConnection(); uc.setConnectTimeout(10000); uc.setReadTimeout(120000); uc.setRequestMethod("POST");// uc.setRequestProperty("Pragma:", "no-cache");// uc.setRequestProperty("Cache-Control", "no-cache");// uc.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); uc.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(),"utf-8"); System.out.println("用戶端發送xml:"+reqXml.toString()); out.write(reqXml.toString()); out.flush(); out.close(); int state = uc.getResponseCode(); if(state == 200){ //擷取返回資料 BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream(),"utf-8")); String line = null; StringBuffer con = new StringBuffer(); while((line = in.readLine()) != null){ //line為傳回值,這就可以判斷是否成功、 con.append(line); } System.out.println("用戶端接收xml:"+con.toString()); in.close(); resp.sendRedirect("http://www.baidu.com"); } }}
2.服務端代碼
package com.szwx.servlet;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Writer;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import com.szwx.webservice.CustomerSmsService;import com.szwx.webservice.impl.CustomerSmsServiceImpl;/** * @author fanzhigang * */public class testAction extends HttpServlet {private CustomerSmsService customerSmsService;//private Logger log = Logger.getLogger(this.getClass());@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {InputStream in = req.getInputStream();BufferedReader read = new BufferedReader(new InputStreamReader(in,"utf-8"));StringBuffer reqXml = new StringBuffer();String line = null;while((line = read.readLine()) != null){reqXml.append(line);}read.close();in.close();System.out.println("服務端接收xml:"+reqXml.toString());customerSmsService = new CustomerSmsServiceImpl();String res = customerSmsService.sendGjjxc(reqXml.toString());//返回resp.setContentType("text/xml;charset=utf-8");Writer out = resp.getWriter();System.out.println("服務端返回xml:"+res);out.write(res);out.flush();out.close();}}