on 06-08-2015 3:16 AM
您好,我不太确定您是怎么在jsp实现的,不过您可以尝试下下面这段示例代码,我在我的Tomcat环境中测试是可以取到中文的,它的逻辑就是,先登录获取token,然后获取指定报表的第一个query里的参数。
我个人觉得比较重要的是处理返回文字的这一行:
String responseBody = new String(EntityUtils.toString(entity).getBytes("ISO_8859_1"), "UTF-8");
因为httpclient对restful获取的结果解析,貌似默认是ISO_8859_1编码,因此需要上面的语句来重新转码回UTF-8,便可以使中文不再乱码。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "org.apache.http.client.ResponseHandler"%>
<%@ page import = "org.apache.http.client.HttpClient"%>
<%@ page import = "org.apache.http.client.methods.HttpGet"%>
<%@ page import = "org.apache.http.client.methods.HttpPost"%>
<%@ page import = "org.apache.http.impl.client.BasicResponseHandler"%>
<%@ page import = "org.apache.http.impl.client.DefaultHttpClient"%>
<%@ page import = "org.apache.http.entity.StringEntity"%>
<%@ page import = "org.apache.http.client.HttpResponseException"%>
<%@ page import = "org.apache.http.HttpResponse"%>
<%@ page import = "org.apache.http.HttpEntity"%>
<%@ page import = "org.apache.http.client.methods.HttpPut"%>
<%@ page import = "org.apache.http.util.EntityUtils"%>
<%@ page import = "javax.xml.parsers.DocumentBuilderFactory"%>
<%@ page import = "javax.xml.parsers.DocumentBuilder"%>
<%@ page import = "org.w3c.dom.*"%>
<%@ page import = "org.w3c.dom.Node.*"%>
<%@ page import = "org.w3c.dom.Element"%>
<%@ page import = "com.sun.org.apache.xerces.internal.parsers.*"%>
<%@ page import = "org.xml.sax.InputSource"%>
<%@ page import = "org.apache.http.client.entity.UrlEncodedFormEntity"%>
<%@ page import = "org.apache.http.client.utils.URLEncodedUtils"%>
<%@ page import = "org.apache.http.message.BasicNameValuePair"%>
<%@ page import = "org.apache.http.NameValuePair"%>
<%@ page import = "org.apache.http.HttpHost"%>
<%@ page import = "org.apache.http.conn.params.*"%>
<%@ page import = "java.io.*"%>
<%@ page import = "java.util.List"%>
<%@ page import = "java.util.ArrayList"%>
<%
// Enterprise Authentication Credentials
String boUsername = "bouser";
String boPassword = "bopassword";
String boAuthType = "secEnterprise";
// Sample Reports
String reportID = "8190";
// Restful URL's
final String baseURL = "http://localhost:6405/biprws";
final String logonURL = baseURL + "/logon/long";
final String logoffURL = baseURL + "/logoff";
final String baseWebiURL = baseURL + "/raylight/v1/documents";
String Parameters = "";
try {
String xmlString = "";
String documentID = "";
String logonToken = "";
// Logon Post
xmlString = "<attrs><attr name=\"userName\" type=\"string\" >" + boUsername + "</attr><attr name=\"password\" type=\"string\" >" + boPassword + "</attr><attr name=\"auth\" type=\"string\" possibilities=\"secEnterprise,secLDAP,secWinAD,secSAPR3\">" + boAuthType + "</attr></attrs>";
String logonXML = restPost(logonURL, xmlString, "","","","");
// Get the token
logonToken = "\"" + getLogonTokenFromXML(logonXML) + "\"";
String exportFormatHeader;
String fileExt;
String dataprovidersURL = baseWebiURL + "/" + reportID +"/dataproviders";
HttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet(dataprovidersURL);
httpget.addHeader("X-SAP-LogonToken",logonToken);
httpget.addHeader("Accept", "application/xml");
httpget.addHeader("Content-Type", "application/xml");
HttpResponse myResponse = httpclient.execute(httpget);
int statusCode = myResponse.getStatusLine().getStatusCode();
// Get the 1st DP
HttpEntity entity = myResponse.getEntity();
String responseBody = new String(EntityUtils.toString(entity).getBytes("ISO_8859_1"), "UTF-8");
String dpid = getFirstDataProviderFromXML(responseBody);
httpget = new HttpGet(dataprovidersURL + "/" + dpid + "/parameters?LovInfo=false");
httpget.addHeader("X-SAP-LogonToken",logonToken);
httpget.addHeader("Accept", "application/xml");
httpget.addHeader("Content-Type", "application/xml");
myResponse = httpclient.execute(httpget);
statusCode = myResponse.getStatusLine().getStatusCode();
// Get the Parameter (Prompt) Info
entity = myResponse.getEntity();
responseBody = new String(EntityUtils.toString(entity).getBytes("ISO_8859_1"), "UTF-8");
Parameters = getParametersFromXML(responseBody);
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
} catch (IOException eIO) {
out.println("IO Exception: " + eIO);
} catch (Exception ex) {
out.println("Exception: " + ex);
}
%>
<%!
public Document convertStringToDom(String domXMLSTring) throws Exception {
DOMParser parser = new DOMParser();
parser.parse(new InputSource(new java.io.StringReader(domXMLSTring)));
return (parser.getDocument());
}
public String getLogonTokenFromXML(String xmlString) throws Exception {
Document doc = convertStringToDom(xmlString);
NodeList nodes = doc.getElementsByTagName("attr");
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
// Is this the correct XML token
if (element.getAttribute("name").equals("logonToken")) {
return(element.getTextContent());
}
}
return("");
}
public String getFirstDataProviderFromXML(String xmlString) throws Exception {
Document doc = convertStringToDom(xmlString);
NodeList nodes = doc.getElementsByTagName("id");
Element element = (Element) nodes.item(0);
return(element.getTextContent());
}
public String getParametersFromXML(String xmlString) throws Exception {
Document doc = convertStringToDom(xmlString);
NodeList nodes = doc.getElementsByTagName("name");
String Parameters = "";
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
if (i != 0)
{
Parameters = Parameters + " ";
}
// Is this the correct XML token
Parameters = Parameters + element.getTextContent();
}
return(Parameters);
}
public static String restPost(String urlStr, String XMLString, String param1Name, String param1Value, String param2Name, String param2Value ) throws Exception {
HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httpPost = new HttpPost(urlStr);
httpPost.addHeader("Accept", "application/xml");
httpPost.addHeader("Content-Type", "application/xml");
if (!param1Name.equals("")) {
httpPost.addHeader(param1Name, param1Value);
}
if (!param2Name.equals("")) {
httpPost.addHeader(param2Name, param2Value);
}
httpPost.setEntity(new StringEntity(XMLString));
HttpResponse response = httpclient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String responseBody = new String(EntityUtils.toString(entity).getBytes("ISO_8859_1"), "UTF-8");
return responseBody;
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
%>
<html>
<head>
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
</head>
<body>
<%=Parameters%>
</body>
</html>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.