java 以post方式传参给URL服务器 ,打开相应地址

NickCheng 2012-06-12 06:18:43
门户程序里 打开 COGNOS报表 ,需要传参 “报表地址”,“用户名”,“用户机构”。由于保密性要求,以post 方式传参数“用户名”,“用户机构”。
URL服务器最后以 “报表地址+用户名+用户机构”( 如“http://10.2.2.3:8085/cognos8/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run &ui.object=%2fcontent%2fpackage%5b%40n&ui.name=%e4%ba%a7%e5%93%81&run.outputFormat=&run.prompt=true&p_username=0000&p_comcode=01" )的地址打开相应的cognos报表。
请问如何实现。
代码如下:
package com.sinosoft;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import javax.servlet.http.HttpServletRequest;




public class loginCognos {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
@SuppressWarnings("deprecation")
//数据库URL、数据库用户名、数据库密码、COGNOS用户名、COGNOS密码、COGNOS的URL
public String loginCognos(String url,String dbUserName,String dbpassWord,String userName,String cognos_url){
/**
连接数据库
根据传递的 URL(如:jdbc:odbc:数据源名称),数据库用户名,数据库用户密码建立连接
**/
String result = "" ;
try {
con = DriverManager.getConnection(url,dbUserName, dbpassWord);
stmt = con.createStatement();
//根据用户名从数据库查出对应记录
String buffer ="SELECT userId,userName,comCode,endDate FROM USER_INFO WHERE USERNAME='"+userName +"'";
System.out.println(buffer);
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(buffer);
if(rs.next()){
//从数据库查出用户名、密码、失效日期
String userName_db= rs.getString("userName");
String comCode_db = rs.getString("comCode");
System.out.println("cognos_url=="+cognos_url);
login(cognos_url,userName_db,comCode_db);
}
else{
result = "无此用户" ;
}
} catch (SQLException e) {
e.printStackTrace();
}
finally{
try {
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
/**
* 登录COGNOS
* @param cognos_url 地址
* @param userName 用户名
* @param comCode 机构
* @throws IOException
*/
public void login(String cognos_url,String userName,String comCode){
URL url = null;
HttpURLConnection httpurlconnection = null;
try {
url = new URL(cognos_url);
httpurlconnection = (HttpURLConnection) url.openConnection();
httpurlconnection.setDoInput(true);
httpurlconnection.setDoOutput(true);
httpurlconnection.setUseCaches(false);
//httpurlconnection.setRequestProperty("Content-type", "10");
httpurlconnection.setRequestProperty("Content-Language", "zh-CN");
httpurlconnection.setRequestMethod("POST");
System.out.println("httpurlconnection=="+httpurlconnection);
httpurlconnection.connect();
OutputStream outStrm = httpurlconnection.getOutputStream();
String test1="ui.object=%2fcontent%2fpackage%5b%40name%3d%27%e5%85%b3%e9%94%ae%e8%bf%90%e8%90%a5%e6%8c%87%e6%a0%87%e5%88%86%e6%9e%90(%e6%97%a5%e5%8e%86%e5%b9%b4%e5%ba%a6)%27%5d%2freport%5b%40name%3d%27%e4%ba%a7%e5%93%81%e6%af%8f%e6%97%a5%e4%b8%80%e8%a7%88(%e6%97%a5%e5%8e%86%e5%b9%b4%e5%ba%a6)%27%5d";
outStrm.write(test1.getBytes());
outStrm.flush();
outStrm.close();
InputStream inStrm = httpurlconnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inStrm,"UTF-8"));
String temp="";
while((temp=br.readLine())!=null){
System.out.println(temp);
}
}catch(Exception e){
e.printStackTrace();
}
}
这是用httpurlconnection 做的,不明白,没做成。请高人指点啊。
...全文
2496 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
NickCheng 2012-06-13
  • 打赏
  • 举报
回复
有高人能指导一下 如何以POST方式传参给URL服务器,然后打开相应网址的方法吗?急求!!!万分感谢!!
NickCheng 2012-06-12
  • 打赏
  • 举报
回复
求助高人指导一下应该如何写方法,实现 URL服务器最后以 “报表地址+用户名+用户机构”( 如“http://10.2.2.3:8085/cognos8/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run &ui.object=%2fcontent%2fpackage%5b%40n&ui.name=%e4%ba%a7%e5%93%81&run.outputFormat=&run.prompt=true&p_username=0000&p_comcode=01" )的地址打开相应的cognos报表。
NickCheng 2012-06-12
  • 打赏
  • 举报
回复
主要是我不知道该怎么写代码,LOGIN方法 是我根据网上找的瞎凑的。。。。
qybao 2012-06-12
  • 打赏
  • 举报
回复
会不会是ui.object=%2fcontent%2fpackage%5b%40name...这样的字符串是encode过的字符串?把它还原再发送试试看
String test1 = URLDecode.decode(...);
存在不存在编码问题?
OutputStream outStrm = httpurlconnection.getOutputStream();
PrintWriter pw = new PrintWriter(new OutStreamWriter(outStream, "编码"));
pw.write(test1);
LZ试试看吧
香蕉猪 2012-06-12
  • 打赏
  • 举报
回复
你写那么大一片,,,又没报错,,又没写哪里有问题,,,你是要别人怎么帮你????

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧