少年阿宾

那些青春的岁月

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

#

package org.abin.lee;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;
  

/**    
 * 自定义的认证管理类。    
 *     
 * @author JAVA世纪网(java2000.net)    
 *     
 */     
class Java2000TrustManager implements X509TrustManager {      
  Java2000TrustManager() {      
    // 这里可以进行证书的初始化操作      
  }      
  // 检查客户端的可信任状态      
  public void checkClientTrusted(X509Certificate chain[], String authType) throws CertificateException {      
    System.out.println("检查客户端的可信任状态...");      
  }      
  // 检查服务器的可信任状态      
  public void checkServerTrusted(X509Certificate chain[], String authType) throws CertificateException {      
    System.out.println("检查服务器的可信任状态");      
  }      
  // 返回接受的发行商数组      
  public X509Certificate[] getAcceptedIssuers() {      
    System.out.println("获取接受的发行商数组...");      
    return null;      
  }      
}    








package org.abin.lee;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

/**
 * JAVA操作SSL协议,通过Socket访问Https的程序代码例子。
 *
 * @author JAVA世纪网(java2000.net)
 *
 */
public class ReadHttpsURL {
 // 默认的HTTPS 端口
 static final int HTTPS_PORT = 443;

 public static void main(String argv[]) throws Exception {
  // 受访主机
  String host = "www.google.com";
  // 受访的页面
  String url = "/adsense/?sourceid=aso&subid=ZH_CN-ET-AS-ADSBY6&medium=link&hl=zh_CN";
  // 自定义的管理器
  X509TrustManager xtm = new Java2000TrustManager();
  TrustManager mytm[] = { xtm };
  // 得到上下文
  SSLContext ctx = SSLContext.getInstance("SSL");
  // 初始化
  ctx.init(null, mytm, null);
  // 获得工厂
  SSLSocketFactory factory = ctx.getSocketFactory();
  // 从工厂获得Socket连接
  Socket socket = factory.createSocket(host, HTTPS_PORT);
  // 剩下的就和普通的Socket操作一样了
  BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
    socket.getOutputStream()));
  BufferedReader in = new BufferedReader(new InputStreamReader(
    socket.getInputStream()));
  out.write("GET " + url + " HTTP/1.0\n\n");
  out.flush();
  System.out.println("start   work!");
  String line;
  StringBuffer sb = new StringBuffer();
  while ((line = in.readLine()) != null) {
   sb.append(line + "\n");
  }
  out.close();
  in.close();
  System.out.println(sb.toString());
 }
}





http://ming-fanglin.iteye.com/blog/574596

posted @ 2012-08-16 00:35 abin 阅读(983) | 评论 (0)编辑 收藏

Here’s a simple Java HTTPS client to demonstrate the use of HttpsURLConnection class to print a https URL content and certificate detail.

Access https URL : https://www.google.com/


package com.mkyong.client;
 
import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.Certificate;
import java.io.*;
 
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;
 
public class HttpsClient{
 
   public static void main(String[] args)
   {
        new HttpsClient().testIt();
   }
 
   private void testIt(){
 
      String https_url = "https://www.google.com/";
      URL url;
      try {
 
	     url = new URL(https_url);
	     HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
 
	     //dumpl all cert info
	     print_https_cert(con);
 
	     //dump all the content
	     print_content(con);
 
      } catch (MalformedURLException e) {
	     e.printStackTrace();
      } catch (IOException e) {
	     e.printStackTrace();
      }
 
   }
 
   private void print_https_cert(HttpsURLConnection con){
 
    if(con!=null){
 
      try {
 
	System.out.println("Response Code : " + con.getResponseCode());
	System.out.println("Cipher Suite : " + con.getCipherSuite());
	System.out.println("\n");
 
	Certificate[] certs = con.getServerCertificates();
	for(Certificate cert : certs){
	   System.out.println("Cert Type : " + cert.getType());
	   System.out.println("Cert Hash Code : " + cert.hashCode());
	   System.out.println("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm());
	   System.out.println("Cert Public Key Format : " + cert.getPublicKey().getFormat());
	   System.out.println("\n");
	}
 
	} catch (SSLPeerUnverifiedException e) {
		e.printStackTrace();
	} catch (IOException e){
		e.printStackTrace();
	}
 
     }
 
   }
 
   private void print_content(HttpsURLConnection con){
	if(con!=null){
 
	try {
 
	   System.out.println("****** Content of the URL ********");			
	   BufferedReader br = 
		new BufferedReader(
			new InputStreamReader(con.getInputStream()));
 
	   String input;
 
	   while ((input = br.readLine()) != null){
	      System.out.println(input);
	   }
	   br.close();
 
	} catch (IOException e) {
	   e.printStackTrace();
	}
 
       }
 
   }
 
}

Output…

Response Code : 200
Cipher Suite : SSL_RSA_WITH_RC4_128_SHA
 
Cert Type : X.509
Cert Hash Code : 7810131
Cert Public Key Algorithm : RSA
Cert Public Key Format : X.509
 
Cert Type : X.509
Cert Hash Code : 6042770
Cert Public Key Algorithm : RSA
Cert Public Key Format : X.509
 
****** Content of the URL ********
<!doctype html><html><head><meta http-equiv="content-type" ......
posted @ 2012-08-16 00:17 abin 阅读(1925) | 评论 (1)编辑 收藏

 
京-pk发型不乱CEO<wuraolong@126.com>  23:33:00
  public String executeHttpRequest(String url, String requestContent,Log log) {
        Log logHttp= log;  //logHttp对应的可能是开放平台、酒店开放平台、酒店
        HttpClient client = new HttpClient();
        PostMethod postMethod = new PostMethod(url);
        try {
            postMethod.setRequestEntity(new StringRequestEntity(requestContent, "text/xml; charset=" + charSet, charSet));
            postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charSet);
            postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, soTimeOut);
            int statusCode = client.executeMethod(postMethod);
            BufferedReader in = new BufferedReader(new InputStreamReader(postMethod.getResponseBodyAsStream(), charSet));
            StringBuffer sb = new StringBuffer();
            String line;
            while ((line = in.readLine()) != null) {
                sb.append(line);
            }
            in.close();
            if (statusCode != HttpStatus.SC_OK) {
                logHttp.error("Method:HttpClientUtil.executeHttpRequest---->请求返回状态不为200,url:" + url + ",返回结果:" + sb.toString());
                return "";
            }
             logHttp.info("Method:HttpClientUtil.executeHttpRequest---->请求返回状态为200,url:" + url + ",返回结果:" + sb.toString());
            return sb.toString();
        }
        catch (Exception e) {
            logHttp.error("Method:HttpClientUtil.executeHttpRequest---->发生异常!请检查网络和参数", e);
        }
        finally {
            postMethod.releaseConnection();
        }
        return null;
    }
}
posted @ 2012-08-15 23:43 abin 阅读(1073) | 评论 (0)编辑 收藏

完美的解决方法从辟谣开始:
1)JDOM是否生成UTF-8的文件与Format是否设置无关,只有输出其他字符编码才需要设置,见下面的注释。
2)JDOM输出UTF-8文件乱码的根本原因并非在JDOMAPI,而是在JDK。
具体描述:
    JDOM的输出类XMLOutputter有两个output接口,除了都具有一个Document参数外,分别接受Writer和 OutputStream参数。
    这给我们一个错觉,两个接口可以任意使用。
    首先我们用output(doc,System.out)来做测试,此时得到乱码,
      然后我们改为output(doc,new PrintWriter(System.out))来测试,输出不是乱码,
      也就是说在控制台的时候一定要用一个Writer接口包装一下。
     然后我们用output(doc,new FileWriter(path))来做测试,结果却得到乱码,
      然后我们改为output(doc,new FileOutputStream(path))来测试,输出不是乱码,
      也就是说在输出文件的时候一定要用一个OutputStream接口包装一下。
     疯了吧?呵呵,很搞笑是吧。经过到JDOM的源码中调试,发现没有任何问题,问题出在了JDK里面。
JDK内的对应接口处理:
1)PrintWriter类有参数为OutputStream的构造方法,因此可以从System.out包装到PrintWriter
2)FileWriter类没有参数为OutputStream的构造方法,因此不能从FileOutputStream包装到 FileWriter
3)如果PrintWriter类用了参数为Writer的构造方法(Writer实现为FileWriter),最后输出也是乱码
4)如果用一个FileOutputStream来包装一个控制台输出,也是乱码
因此,对于JDK内的各种输出体系,各种InputStream、OutputStream、reader和writer要充分认识,否则极容易出现一些意想不到的问题。


posted @ 2012-08-15 09:34 abin 阅读(679) | 评论 (0)编辑 收藏

-- Create table
create table ABING1
(
  ID         INTEGER not null,
  CREATETIME DATE default sysdate not null,
  FIRSTNAME  NVARCHAR2(100) not null,
  LASTNAME   CLOB not null,
  MIDDLENAME NCLOB not null
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints
alter table ABING1
  add constraint PK_ABING primary key (ID)
  using index
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );




create or replace procedure abin55(abing in varchar2,abin out sys_refcursor)
as
begin
declare
createtime date:=to_date(abing,'yyyy:MM:dd HH24:MI:SS');
cursor mycur is select * from abing1 t where t.createtime=createtime;
abin mycur%rowtype;
begin
open mycur;
loop
     fetch mycur into abin;
     exit when mycur%NOTFOUND;
end loop;
close mycur;
end;
end;
posted @ 2012-08-15 00:57 abin 阅读(525) | 评论 (0)编辑 收藏

//建表:
-- Create table
create table EMP
(
  ID         NUMBER,
  ENAME      VARCHAR2(50),
  EMPNO      VARCHAR2(50),
  SALARY     NUMBER(10),
  DEPTNO     VARCHAR2(50),
  CREATETIME DATE default sysdate
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );


建立历史表:
create table emp_his as select * from emp where 1=2



建立oracle触发器:
create or replace trigger tri_del_emp
before delete on emp
for each row
begin
insert into emp_his(id,ename,empno,salary,deptno,createtime) values
(:old.id,:old.ename,:old.empno,:old.salary,:old.deptno,:old.createtime);
end;


执行测试操作:
delete emp where id=8

这个时候,历史表,信息已经插入进去了,呵呵


posted @ 2012-08-14 00:01 abin 阅读(299) | 评论 (0)编辑 收藏

建立异常表:

-- Create table
create table ORACLEEXCEPTION
(
  ID          VARCHAR2(36),
  CREATETIME  DATE,
  SQLCODE1    NVARCHAR2(300),
  SQLERRM1    NVARCHAR2(300),
  MYEXCEPTION NVARCHAR2(100)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

 

 

编写oracle--function:

create or replace function getabin(abin in varchar2)
return varchar2
is
result varchar2(50);
sqlcode2 nvarchar2(500):='';
sqlerrm2 nvarchar2(500):='';
myexception nvarchar2(500):='';
exception1 exception;
begin
if(abin is not null) then
select count(1) into result from bing1 t where t.name1 like abin;
return(result);
elsif(abin is null) then
result:='there is a defined exception';
raise exception1;
end if;

exception
when exception1 then
sqlcode2:=sqlcode;
sqlerrm2:=sqlerrm;
begin
insert into oracleexception(id,createtime,sqlcode1,sqlerrm1,myexception) values (sys_guid(),sysdate,sqlcode2,sqlerrm2,'exception1');
commit;
end;
return(result);
when others then
result:='there is a other exception';
sqlcode2:=sqlcode;
sqlerrm2:=sqlerrm;
begin
insert into oracleexception(id,createtime,sqlcode1,sqlerrm1,myexception) values (sys_guid(),sysdate,sqlcode2,sqlerrm2,'others');
commit;
end;
return(result);
end;

 

 

 

测试oracle--function代码:

declare 
ename varchar2(50):='';
result varchar2(50);
begin
result:=getabin(ename);
dbms_output.put_line(result);
end;

 

posted @ 2012-08-13 23:34 abin 阅读(843) | 评论 (0)编辑 收藏

ORACLE PL/SQL编程-异常错误处理(下)
http://hi.baidu.com/mylin/blog/item/5a3ca6c2b321fd0c0ef4779b.html

ORACLE PL/SQL编程之八:

把触发器说透
http://www.cnblogs.com/huyong/archive/2011/04/27/2030466.html

posted @ 2012-08-13 01:10 abin 阅读(322) | 评论 (0)编辑 收藏

oracle函数一:
create or replace function getBin
return varchar2
is
result varchar2(50);
begin
select count(1) into result from bing1;
return(result);
end;

测试代码:
declare
result varchar2(50);
begin
result:=getBin;
dbms_output.put_line(result);
end;

oracle函数二:
create or replace function getBin3(ename in varchar2)
return varchar2
is
result varchar(50);
begin
select count(1) into result from bing1 t where t.name1 like '%'||ename||'%';
return(result);
end;

测试代码二:
declare
result varchar2(50);
ename varchar2(10):='a';
begin
result:=getBin3(ename);
dbms_output.put_line(result);
end;


posted @ 2012-08-12 21:01 abin 阅读(332) | 评论 (0)编辑 收藏

函数调用限制
1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数
2、SQL只能调用带有输入参数,不能带有输出,输入输出函数
3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)
4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句

1.function函数的语法如下:

      create or replace function function_name (

       argu1 [mode1] datatype1, --定义参数变量

       argu2 [mode2] datatype2 --定义参数变量

   ) return datatype --定义返回的数据类型

  is 

  begin

  end;

执行 var v1 varchar2(100)
      exec :v1:=function_name

2.不带任何参数的定义

create or replace function get_user 

return varchar2 

is 

Result varchar2(50); --定义变量

begin 

select username into Result from user_users; 

return(Result); --返回值

end get_user;

3.带有in参数的

create or replace function get_sal(

empname in varchar2

) return number 

is 

Result number; 

begin 

select sal into Result from emp where ename=empname; 

return(Result); 

end;

执行: SQL> var sal number
SQL> exec :sal:=get_sal('scott');

4.带out参数的

create or replace function get_info(

e_name varchar2,

job out varchar2

) return number 

Is

Result number; 

begin 

select sal,job into Result,job from emp where ename=e_name;
return(Result);
end;

执行: SQL> var job varchar2(20)
SQL> var dname varchar2(20)
SQL> exec :dname:=get_info('SCOTT',:job)

5.带in out参数的

6.函数调用举例

create or replace function f_sys_getseqid(
    v_seqname           IN VARCHAR2,
    v_provincecode      IN VARCHAR2    --省编码
) return Varchar2
IS
    iv_date             VARCHAR2(8);
    iv_seqname          VARCHAR2(50);
    iv_sqlstr           VARCHAR2(200);
    iv_seq              VARCHAR2(8);
    iv_seqid            VARCHAR2(16);
BEGIN
    iv_seqname := LOWER(TRIM(v_seqname));
    iv_sqlstr := 'SELECT '||iv_seqname||'.nextval FROM DUAL';
    EXECUTE IMMEDIATE iv_sqlstr INTO iv_seq;--执行动态的sql语句,执行相似的一组语句
    IF v_seqname = 'SEQ_FUNCROLE_ID' THEN
      iv_seqid:= 'ESS' || LPAD(iv_seq,5,'0');
    ELSE
      SELECT substrb(v_provincecode,1,2)||TO_CHAR(SYSDATE,'yymmdd') INTO iv_date FROM DUAL;
      iv_seqid:= iv_date || LPAD(iv_seq,8,'0');
    END IF;
    RETURN iv_seqid;
EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
END;

  调用方式如下:

    SELECT TO_NUMBER(F_SYS_GETSEQID('SEQ_TERMTRADE_ID', V_PROVINCE_CODE)) INTO V_BATCH_ID FROM DUAL;

   EXECUTE IMMEDIATE的说明:执行动态的sql语句。

posted @ 2012-08-12 20:42 abin 阅读(33339) | 评论 (2)编辑 收藏

仅列出标题
共50页: First 上一页 33 34 35 36 37 38 39 40 41 下一页 Last