`
xly1981
  • 浏览: 143398 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

URL对象连接url并获取值

    博客分类:
  • java
阅读更多
新老系统同时运行,在请求发往新系统时,通过filter方式吧request中的参数转发到老系统中,老系统返回的页面中的token被找出并保留,在提交form并再转发到老系统时重新写入。
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ConnectUrlTool {
private HttpServletRequest request;
private HttpServletResponse response;
private HttpURLConnection urlconn;
private String address;
private int timeOut=3000000;
private String sessionId;
private String tokenId;
private String params;


public ConnectUrlTool(){

}

public void setInfo(HttpServletRequest request,HttpServletResponse response,boolean addToken){
this.request=request;
this.response=response;
ParamTools paramTools = new ParamTools();
    paramTools.initParam(request);
      if(!addToken){
      this.tokenId=null;
      }
      else if(null!=this.tokenId && addToken){
      paramTools.addParam("org.apache.struts.taglib.html.TOKEN", this.tokenId);
      }
    this.params=paramTools.getUrlValue();
}


/**
* 发送参数params (like a=ds&b=asd&),地址为:address(like http://www.sina.com.cn)
* @param address
* @throws IOException
*/
public void sendToOld(String address)throws IOException{
this.address=address;
BufferedInputStream   bis =sendRequest(params);
byte[] buffer = new byte[8092];
StringBuffer sb=new StringBuffer("");
int bytesRead = 0;
    while ((bytesRead = bis.read(buffer)) != -1) {
      String chunk = new String(buffer, 0, bytesRead);
//       System.out.print(chunk);
      sb.append(chunk);
    }
getTokenId(sb.toString(),"org.apache.struts.taglib.html.TOKEN");
if(bis!=null)
   {
   bis.close(); 
   }
   urlconn.disconnect();
}
/**
* 返回的数据在BufferedInputStream
* @param params
* @return
* @throws IOException
*/
private BufferedInputStream sendRequest(String params) throws IOException
{
URL url = new URL(address);    
urlconn= this.getHttpConnect(address);
urlconn.setDoOutput(true);  
urlconn.setRequestMethod("POST");
urlconn.connect();
BufferedInputStream   bis   =   null;    
OutputStream os = urlconn.getOutputStream();     
os.write(params.toString().getBytes("utf-8"));     
os.flush();
os.close();  
int   code   =   urlconn.getResponseCode();
System.out.println("error   code   "+   code);
    if(code == HttpURLConnection.HTTP_OK)  
    {  
       bis = new BufferedInputStream(urlconn.getInputStream()); 
}
    return bis;
}
/**
* 创建连接对象
* @param url
* @return
* @throws UnknownHostException
*/
private HttpURLConnection getHttpConnect(String url) throws UnknownHostException
{
try
{
urlconn = (HttpURLConnection)new URL(url).openConnection();
urlconn.setConnectTimeout(timeOut);
urlconn.setReadTimeout(timeOut);
}
catch (MalformedURLException e)
{
e.printStackTrace();

}
catch (IOException e)
{
e.printStackTrace();
}
if (urlconn == null)
throw new UnknownHostException();

return urlconn;
}
/**
* 从返回的页面中找到input 的name对应的value的值
* @param str
* @param name
*/
private  void getTokenId(String str,String name){
String tokenId="";
String[] splitStr=str.split("<");
boolean find=false;
for(int i=0;i<splitStr.length;i++){
delKg(splitStr[i]);
String[] temp=splitStr[i].split(" ");
int len=0;
if(temp[0].equalsIgnoreCase("input")){
for(int j=0;j<temp.length;j++){
String[] temp1=temp[j].split("=");
for(int k=0;k<temp1.length;k++){
if(temp1[0].length()==4 && temp1[0].substring(0, 4).equalsIgnoreCase("name")){
String[] temp2=temp1[1].split("\"");
if(temp2[1].equalsIgnoreCase(name)){
len=i;
}
}
if(len==i)break;
}
if(len==i)break;
}
if(len==0)continue;
for(int j=0;j<temp.length;j++){
String[] temp1=temp[j].split("=");
for(int k=0;k<temp1.length;k++){
if(temp1[0].length()==5 && temp1[0].substring(0, 5).equalsIgnoreCase("value")){
String[] temp2=temp1[1].split("\"");
this.tokenId=temp2[1];
break;
}
}
}
if(len==i)break;
}
}
}

private  String delKg(String  a){
    a = a.trim();
    while(a.startsWith(" ")){
       a = a.substring(1,a.length()).trim();
    }
    while(a.endsWith(" ")){
       a = a.substring(0,a.length()-1).trim();
    }
    return a;
  }
}
分享到:
评论

相关推荐

    JAVA通过url获取网页内容

    通过使用 URLConnection 类,可以获取指定 URL 的内容,并读取输入流。在上面的代码中,我们使用了 URLConnection 类的 getInputStream() 方法来获取输入流,然后使用输入流读取网页内容。 三、使用 ...

    JavaScript获取链接url参数并生成对象

    js地址栏参数获取,并生成对象

    Android 创建HttpPost对象 获取HTTP连接.rar

    //获得EditText对象   etGet.setText(result);//为EditText设置内容   }  } catch (Exception e) {//捕获并打印异常   EditText etGet = (EditText)findViewById(R.id.etGet);//获得EditText对象   etGet....

    PHP一键上传图片到阿里云OSS对象存储并返回路径

    2.要获取AccessKey及找准Endpoint,修改代码中相应的部分;3.点击即上传,只支持图片格式,成功后向前端返回上传后的图片路径。 下载后,把资源包解压到网站目录,访问upload.php即可,不要改动文件夹结构。 强调...

    jsp九大内置对象

     该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以  获取用户提交的信息。  当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。首先,将...

    Netbeans连接SQL_server_详细方法

    然后,使用 DriverManager.getConnection() 方法连接 SQL Server,获取 Connection 对象。最后,使用 Connection 对象创建 Statement 对象,执行 SQL 语句。 public class lianjie { Connection con = null; ...

    数据连接池

    * 将连接对象返回给由名字指定的连接池 * * @param name 在属性文件中定义的连接池名字 * @param con 连接对象 */ public void freeConnection(String name, Connection con) { DBConnectionPool pool = ...

    AndroidHttpURLConnection发送GET请求

    调用URL对象的openConnection( )来获取HttpURLConnection对象实例: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 设置HTTP请求使用的方法:conn.setRequestMethod("GET"); 设置连接超时,...

    用Java连接SQL Server数据库的多种方法

    驱动程序名称为com.microsoft.jdbc.sqlserver.SQLServerDriver,数据库连接URL为jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname。 其次,通过JTDS JDBC Driver连接SQL Server数据库需要下载jtds-...

    DBCP( Database Connection Pool )数据库连接池

    DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP;...出了连接数据库,还要提供一个获得数据源的方法和一个获取连接的方法;

    HttpClient以及获取页面内容应用

    * 通过url获取网页内容, * 解决中文乱码问题 * @param httpUrl * @return */ public static String downloadPage(String httpUrl) { StringBuffer pageBuffer = new StringBuffer(); URL pageUrl = ...

    jdbc连接数据库的方式2

    可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。  8、使用SQL92语法调用存储过程  在调用存储...

    基于HTTP协议的Android手机数据同步实现.pdf

    通过定义一个Android应用的URL对象,该对象拥有的openStream()方法可以读取URL对象中的输入流,该方法可以非常方便地读取服务器上的数据,并且存入Android系统自带的SQLite数据库,实现Android手机端的数据能够与...

    JAVA通过JDBC连接ORACLE9I

    连接成功后,我们使用Statement对象执行SQL语句,最后使用ResultSet对象获取查询结果。 五、错误处理 在上面的源代码中,我们使用try-catch语句来捕捉可能出现的异常。SQLException是JDBC API中定义的异常类型,...

    AnyFo - 老妈:通用连接池

    AnyFo - 老妈 "老妈"背景 在各种系统中,都有可能会由程序自动的创建多个对...4. 同时支持连接不同URL的多个连接对象的统一管理 5. 调用极为方便,尽提供一个getConnection方法就完全满足程序需要 6. 配置极为简单

    java 连接数据库

    ResultSet 对象提供了next() 方法来移动到下一行数据,并提供了getXXX() 方法来获取当前行的数据。 二、Java 连接数据库的相关类 1. DriverManager 类 DriverManager 类是 Java 连接数据库的核心类。它提供了 get...

    JAVA连接ORACLE数据库方法及测试

    //获取连接对象,可以不声明 ResultSet rs = null; try { Statement st = c.createStatement();// 获取Staetment对象 rs = st.executeQuery(sql);// 执行操作 } catch (Exception e) { System.out....

    分享一个Java建立HTTP连接的例子.rar

    //获取连接  TextBox tb = null; //显示文本的TextBox对象  StringBuffer sb = new StringBuffer(); //字符串缓冲  InputStream is = connection.openInputStream(); //获取输入流  int ch;  while((ch = ...

    Java建立HttpConnection连接的例子.rar

    Java建立HttpConnection连接的例子,支持在手机端运行的的Java小程序,通过建立HttpConnection连接,获取到文本信息并显示在屏幕上,相关的测试代码如下:  ContentConnection connection = (ContentConnection) ...

    JDBC连接数据库的标准步骤

    JDBC连接数据库的标准步骤 1. 载入JDBC驱动程序(dbDriver) 2. 定义URL 3. 建立连接 4 创建Statement对象 5 执行查询或更新 6. 处理结果 7 关闭连接 实例java方式获取连接的一个方法

Global site tag (gtag.js) - Google Analytics