JAVA利用HttpClient进行POST请求(HTTPS)

JAVA利用HttpClient进行POST请求(HTTPS)
JAVA利用HttpClient进行POST请求(HTTPS)

JAVA利用HttpClient进行POST请求(HTTPS)

分类:

java(31) jsp(1)

目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目

用jQuery post进行请求。

但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post

请求是不允许跨域的。

这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避

免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。

1.写一个SSLClient类,继承至HttpClient

[java]view plain copy

1.import java.security.cert.CertificateException;

2.import java.security.cert.X509Certificate;

3.import https://www.360docs.net/doc/5c7253189.html,.ssl.SSLContext;

4.import https://www.360docs.net/doc/5c7253189.html,.ssl.TrustManager;

5.import https://www.360docs.net/doc/5c7253189.html,.ssl.X509TrustManager;

6.import org.apache.http.conn.ClientConnectionManager;

7.import org.apache.http.conn.scheme.Scheme;

8.import org.apache.http.conn.scheme.SchemeRegistry;

9.import org.apache.http.conn.ssl.SSLSocketFactory;

10.import org.apache.http.impl.client.DefaultHttpClient;

11.//用于进行Https请求的HttpClient

12.public class SSLClient extends DefaultHttpClient{

13.public SSLClient() throws Exception{

14.super();

15. SSLContext ctx = SSLContext.getInstance("TLS");

16. X509TrustManager tm = new X509TrustManager() {

17.@Override

18.public void checkClientTrusted(X509Certificate[] chain,

19. String authType) throws CertificateException {

20. }

21.@Override

22.public void checkServerTrusted(X509Certificate[] chain,

23. String authType) throws CertificateException {

24. }

25.@Override

26.public X509Certificate[] getAcceptedIssuers() {

27.return null;

28. }

29. };

30. ctx.init(null, new TrustManager[]{tm}, null);

31. SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALL

OW_ALL_HOSTNAME_VERIFIER);

32. ClientConnectionManager ccm = this.getConnectionManager();

33. SchemeRegistry sr = ccm.getSchemeRegistry();

34. sr.register(new Scheme("https", 443, ssf));

35. }

36.}

[java]view plain copy

1.import java.security.cert.CertificateException;

2.import java.security.cert.X509Certificate;

3.import https://www.360docs.net/doc/5c7253189.html,.ssl.SSLContext;

4.import https://www.360docs.net/doc/5c7253189.html,.ssl.TrustManager;

5.import https://www.360docs.net/doc/5c7253189.html,.ssl.X509TrustManager;

6.import org.apache.http.conn.ClientConnectionManager;

7.import org.apache.http.conn.scheme.Scheme;

8.import org.apache.http.conn.scheme.SchemeRegistry;

9.import org.apache.http.conn.ssl.SSLSocketFactory;

10.import org.apache.http.impl.client.DefaultHttpClient;

11.//用于进行Https请求的HttpClient

12.public class SSLClient extends DefaultHttpClient{

13.public SSLClient() throws Exception{

14.super();

15. SSLContext ctx = SSLContext.getInstance("TLS");

16. X509TrustManager tm = new X509TrustManager() {

17.@Override

18.public void checkClientTrusted(X509Certificate[] chain,

19. String authType) throws CertificateException {

20. }

21.@Override

22.public void checkServerTrusted(X509Certificate[] chain,

23. String authType) throws CertificateException {

24. }

25.@Override

26.public X509Certificate[] getAcceptedIssuers() {

27.return null;

28. }

29. };

30. ctx.init(null, new TrustManager[]{tm}, null);

31. SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALL

OW_ALL_HOSTNAME_VERIFIER);

32. ClientConnectionManager ccm = this.getConnectionManager();

33. SchemeRegistry sr = ccm.getSchemeRegistry();

34. sr.register(new Scheme("https", 443, ssf));

35. }

36.}

2.写一个利用HttpClient发送post请求的类

[java]view plain copy

1.import java.util.ArrayList;

2.import java.util.Iterator;

3.import java.util.List;

4.import java.util.Map;

5.import java.util.Map.Entry;

6.import org.apache.http.HttpEntity;

7.import org.apache.http.HttpResponse;

8.import https://www.360docs.net/doc/5c7253189.html,ValuePair;

9.import org.apache.http.client.HttpClient;

10.import org.apache.http.client.entity.UrlEncodedFormEntity;

11.import org.apache.http.client.methods.HttpPost;

12.import org.apache.http.message.BasicNameValuePair;

13.import org.apache.http.util.EntityUtils;

14./*

15. * 利用HttpClient进行post请求的工具类

16. */

17.public class HttpClientUtil {

18.public String doPost(String url,Map map,String charset){

19. HttpClient httpClient = null;

20. HttpPost httpPost = null;

21. String result = null;

22.try{

23. httpClient = new SSLClient();

24. httpPost = new HttpPost(url);

25.//设置参数

26. List list = new ArrayList();

27. Iterator iterator = map.entrySet().iterator();

28.while(iterator.hasNext()){

29. Entry elem = (Entry) iterator

.next();

30. list.add(new BasicNameValuePair(elem.getKey(),elem.getValue(

)));

31. }

32.if(list.size() > 0){

33. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,

charset);

34. httpPost.setEntity(entity);

35. }

36. HttpResponse response = httpClient.execute(httpPost);

37.if(response != null){

38. HttpEntity resEntity = response.getEntity();

39.if(resEntity != null){

40. result = EntityUtils.toString(resEntity,charset);

41. }

42. }

43. }catch(Exception ex){

44. ex.printStackTrace();

45. }

46.return result;

47. }

48.}

[java]view plain copy

1.import java.util.ArrayList;

2.import java.util.Iterator;

3.import java.util.List;

4.import java.util.Map;

5.import java.util.Map.Entry;

6.import org.apache.http.HttpEntity;

7.import org.apache.http.HttpResponse;

8.import https://www.360docs.net/doc/5c7253189.html,ValuePair;

9.import org.apache.http.client.HttpClient;

10.import org.apache.http.client.entity.UrlEncodedFormEntity;

11.import org.apache.http.client.methods.HttpPost;

12.import org.apache.http.message.BasicNameValuePair;

13.import org.apache.http.util.EntityUtils;

14./*

15. * 利用HttpClient进行post请求的工具类

16. */

17.public class HttpClientUtil {

18.public String doPost(String url,Map map,String charset){

19. HttpClient httpClient = null;

20. HttpPost httpPost = null;

21. String result = null;

22.try{

23. httpClient = new SSLClient();

24. httpPost = new HttpPost(url);

25.//设置参数

26. List list = new ArrayList();

27. Iterator iterator = map.entrySet().iterator();

28.while(iterator.hasNext()){

29. Entry elem = (Entry) iterator

.next();

30. list.add(new BasicNameValuePair(elem.getKey(),elem.getValue(

)));

31. }

32.if(list.size() > 0){

33. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,

charset);

34. httpPost.setEntity(entity);

35. }

36. HttpResponse response = httpClient.execute(httpPost);

37.if(response != null){

38. HttpEntity resEntity = response.getEntity();

39.if(resEntity != null){

40. result = EntityUtils.toString(resEntity,charset);

41. }

42. }

43. }catch(Exception ex){

44. ex.printStackTrace();

45. }

46.return result;

47. }

48.}

3.调用post请求的测试代码

[java]view plain copy

1.import java.util.HashMap;

2.import java.util.Map;

3.//对接口进行测试

4.public class TestMain {

5.private String url = "https://192.168.1.101/";

6.private String charset = "utf-8";

7.private HttpClientUtil httpClientUtil = null;

8.

9.public TestMain(){

10. httpClientUtil = new HttpClientUtil();

11. }

12.

13.public void test(){

14. String httpOrgCreateTest = url + "httpOrg/create";

15. Map createMap = new HashMap();

16. createMap.put("authuser","*****");

17. createMap.put("authpass","*****");

18. createMap.put("orgkey","****");

19. createMap.put("orgname","****");

20. String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTes

t,createMap,charset);

21. System.out.println("result:"+httpOrgCreateTestRtn);

22. }

23.

24.public static void main(String[] args){

25. TestMain main = new TestMain();

26. main.test();

27. }

28.}

[java]view plain copy

1.import java.util.HashMap;

2.import java.util.Map;

3.//对接口进行测试

4.public class TestMain {

5.private String url = "https://192.168.1.101/";

6.private String charset = "utf-8";

7.private HttpClientUtil httpClientUtil = null;

8.

9.public TestMain(){

10. httpClientUtil = new HttpClientUtil();

11. }

12.

13.public void test(){

14. String httpOrgCreateTest = url + "httpOrg/create";

15. Map createMap = new HashMap();

16. createMap.put("authuser","*****");

17. createMap.put("authpass","*****");

18. createMap.put("orgkey","****");

19. createMap.put("orgname","****");

20. String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTes

t,createMap,charset);

21. System.out.println("result:"+httpOrgCreateTestRtn);

22. }

23.

24.public static void main(String[] args){

25. TestMain main = new TestMain();

26. main.test();

27. }

28.}

httpClient4.2的jar包下载路径:

https://www.360docs.net/doc/5c7253189.html,/detail/hqmryang/4582440#comment

Java面向对象习题

选择题 1、下列关于变量的叙述哪个是错的?() A. 实例变量是类的成员变量。 B. 在方法中定义的局部变量在该方法被执行时创建。 C. 实例变量用关键字static声明。 D. 局部变量在使用前必须被初始化。 2、在Java语言中,下列哪个包是编译器自动导入的?() A. java.applet B. https://www.360docs.net/doc/5c7253189.html,ng C. java.io D. java.awt 3、当类的成员未用访问权限修饰符时,Java认为此成员的访问权限为()。 A. private B. protected C.friendly D.public 4、下面哪个关键字不是用来控制对类成员的访问的?() A. public B. protected C. default D. private 5、下面哪一个特性不是面向对象编程主要体现的()。 A. 封装性 B. 继承 C. 多态 D. 类 6、不允许作为类及类成员的访问控制符的是()。 A. public B. private C. static D. protected 7、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB 作为前缀就可以调用它,该方法头的形式为()。 A、static void method( ) B、public void method( ) C、final void method( ) D、abstract void method( ) 8、可以在下面代码段point x处写入的是?() //point x public class Interesting{ //do something } A. String str; B. static int PI=3.14; C. public class MyClass{//do other thing…} D. import java.awt.*; 9、下列关于变量的叙述哪个是错的?() A、实例变量是类的成员变量。 B、在方法中定义的局部变量在该方法被执行时创建。 C、实例变量用关键字static声明。 D、局部变量在使用前必须被初始化。 10、下列哪个类声明是正确的?() A、abstract final class HI{} B、abstract private move(){} C、protected private number; D、public abstract class Car{}

JAVA中常用类的常用方法

JAVA屮常用类的常用方法 一.java?丨ang.Object 类 1、clone()方法 创建丼返M此对象的一个副木。要进行“克隆”的对象所属的类必须实现https://www.360docs.net/doc/5c7253189.html,ng. Cloneable 接口。 2、equals(Objectobj)方法 0 功能:比较引用类型数据的等价性。 0 等价标准.?引用类型比较引用,基木类型比较值。 0 存在特例.?对File、String、Date及封装类等类型来说,是比较类型及对象的内稃而+ 考虑引用的是否为同一实例。 3、finalize〇方法 当垃圾丨"丨收器确定>(、存在对该对象的更多引用时,由对象的垃圾丨"丨收器调用此方法。 4、hashCode〇方法返 回该对象的哈希码值。 5、notify〇方法 唤醒在此对象监视器上等待的中?个线祝。 6、notifyAII〇方法 唤醒在此对象监视器上等待的所有线程= 7、toString()方法 返W该对象的字符串表示。在进行String与其它类型数据的连接操作时,&动调用tostringo 方法。可以根据耑要重写toStringO方法。 8、wait()方法 在其他线程调用此对象的n〇tify()方法或notifyAIIO方法前,异致当前线程等待。 二、字符串相关类 I String 类 charAt(int index)返回指定索引处的char值。compareTo{String anotherString)按字

典顺序比较两个字符串。compareTolgnoreCase(Stringstr)按字典顺序比较两个字 符串,不考虑人小写。concat(String str)将指定字符串连接到此字符串的结尾。 endsWith(String suffix)测试此字符串是否以指定的〗?缀结束。equals{Object anObject)将此字符串与指定的对象比较。 equalslgnoreCase(String anotherString)将此String 与另一个String 比较,考虑人小'与’。indexOf(int ch)返H指定字符在此字符串屮第一次出现处的索引。 indexOf(String str)返回第一次出现的指定子字符串在此字符串屮的索引, lastlndexOf(intch)返回指定字符在此字符串中最后??次出现处的索引。 length()返|n丨此字符串的长度。 replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。 split(String regex)根据给定正则表达式的匹配拆分此字符串。startsWith{String prefix)测试此字符 串是否以指定的前缀开始。substring(int beginlndex) 返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。 substring(int beginlndex, int endlndex) 返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的beginlndex 处开始,一直到索引endlndex-1处的字符。 t〇CharArray()将此字符串转换为一个新的字符数组。

(完整版)Java创建对象的四种方法

Java中创建对象的四种方式 1.用new语句创建对象,这是最常见的创建对象的方法。 2.运用反射手段,调用https://www.360docs.net/doc/5c7253189.html,ng.Class或者https://www.360docs.net/doc/5c7253189.html,ng.reflect.Constructor类的newInstance()实例方法。 3.调用对象的clone()方法。 4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。 以下是代码片段: package org.whb.test.demo724; /* *测试Cloneable接口的使用 *包含第一种和第三种方法clone() *不过要注意在clone()中深复制和潜复制的理解 *实例化对象 */ class Person implements Cloneable{ private String name; private int age; public Person( String name,int age) { https://www.360docs.net/doc/5c7253189.html, = name; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name){ https://www.360docs.net/doc/5c7253189.html, =name; } @Override public Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone();

Java常用类和方法面试题+答案

2015年12月20日18:25:21 Java常用类和方法重点总结 作者:数据分析玩家 1、简述Java中内存分配的问题 1>凡是new()出来的东西,都是在堆中进行分配的 2>局部变量【数据类型+变量名】都是在栈中进行分配的 3>静态变量【static】和字符串常量【“String”】都是在数据区进行分配的 4>方法【代码】都是在代码区进行存放的 2、简述Java中Object类的地位 1>Java中所有的类【自己定义的类以及Sun公司提供的类】都默认自动继承了Object类 2>Java中所有的类都从Object类中继承了toString()方法、hashCode()方法和equals()等方法 3、简述Object类中toString()方法的注意事项 1>toString()方法的返回值是一个字符串 2>toString()方法返回的是类的名字和该对象的哈希码组 成的一个字符串,即toString()方法返回的是该对象的字符串表示形式 3>在Java中System.out.println(类对象名)实际输出的是该对象的toString()方法返回的字符串,即括号中的内容等价于类对象名.toString(),toString方法的好处是在碰到

println方法的时候会被自动调用,不用显示的写出来 4>建议所有的子类都重写从Object类中继承过来toString 方法,否则toString方法的返回值没有什么实际含义 4、简述Object类中equals()方法的注意事项 1>equals方法的返回值为true或false 2>Object类中equals方法只有在两个对象是同一块内存区域时,即不但内容相同、地址还必须相同时才返回true,否则即便内容相同、如果地址不同只会返回false 3>重写Object类中的equals方法目的在于:保证只要两个对象的内容相同,equals方法就返回true 5、简述Object类中hashCode()方法的注意事项 1>哈希码原本指的是内存空间地址的十六进制表示形式 2>hashCode()方法返回的是该对象的哈希码、即该对象的真实内存地址的十六进制表示形式,但是重写完hashCode()方法之后,返回的不再是该对象真实内存地址的十六进制表示形式 6、学习Java中toString方法、equals方法、hashCode方法共同的一个注意事项 在Java中,凡是动态分配的内存都是没有名字的,而是将其地址赋给一个指针变量【引用】,用指针变量去代表这个事物,所以引用和动态分配的内存有本质上的区别,但是在学习Java中的toString方法、equals方法和hashCode方

详解 JAVA 创建对象 NEW

类名自定义名= new 类名() 假设我们在函数中写了如下这个简单的语句: StringBuffer str = new StringBuffer("Hello world"); 别看这个语句简单,其实包含了如下三个步骤: 首先,newStringBuffer("Helloworld")在堆里申请了一坨内存,把创建好的StringBuffer 对象放进去。 其次,StringBufferstr声明了一个指针。这个指针本身是存储在栈上的(因为语句写在函数中),可以用来指向某个StringBuffer类型的对象。或者换一种说法,这个指针可以用来保存某个StringBuffer对象的地址。 最后,当中这个等于号(赋值符号)把两者关联起来,也就是把刚申请的那一坨内存的地址保存成str的值。

引用对象之间的赋值、判相等 通过上述的图解,大伙儿应该明白指针变量和该指针变量指向的对象是一个什么关系了吧。 还是接着刚才的例子,再来看赋值的问题。对于如下语句: StringBuffer str2 = str; 这个赋值语句是啥意思捏?实际上就是把str的地址复制给str2,记住,是地址的复制,StringBuffer对象本身并没有复制。所以两个指针指向的是同一个东东。 再搞一张示意图,如下(今天画这些图把我累坏了):

实际上两个指针的值相同,则肯定是指向同一个对象(所以对象内容必定相同)。但是两个内容相同的对象,它们的地址可能不一样(比如克隆出来的多个对象之间,地址就不同)。 final常量的问题 针对引用类型变量的final修饰符也是很多人搞混淆的地方。实际上final只是修饰指针的值(也就是限定指针保存的地址不能变)。至于该指针指向的对象,内容是否能变,那就管不着了。所以,对于如下语句: final StringBuffer strConst = new StringBuffer(); 你可以修改它指向的对象的内容,比如: strConst.append(" "); 但是不能修改它的值,比如: strConst = null; 传参的问题 引用类型(在函数调用中)的传参问题,是一个相当扯的问题。有些书上说是传值,有些书上说是传引用。搞得Java程序员都快成神经分裂了。所以,我们最后来谈一下“引用类型参数传递”的问题。 v还是拿刚才的例子,假设现在要把刚才创建的那一坨字符串打印出来,我们会使用如下语句: System.out.println(str);这个语句又是什么意思捏?这时候就两说了。 第一种理解:可以认为传进函数的是str这个指针,指针说白了就是一个地址的值,说得再白一点,就是个整数。按照这种理解,就是传值的方式。也就是说,参数传递的是指针本身,所以是传值的。 第二种理解:可以认为传进去的是StringBuffer对象,按照这种理解,就是传引用方式了。因为我们确实是把对象的地址(也就是引用)给传了进去。

JAVA类与对象的创建

试验四 类和对象的创建 一.类的定义 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类用来定义对象的模板。 类的实现包括两部分:类声明和类体。基本格式为: 修饰符class类名[extends父类名]{ /*类体的内容*/ } 1.类声明 以下是一个类声明的例子。 class People成为类声明,People是类名。习惯上,类名的第一个字母大写,但这不是必须的。类的名字不能是Java中的关键字,要符合标识符规定,即类的名字可以由字母、下划线、数字或美元符号组成,并且第一个字母不能是数字。但给类命名时,最好遵守下列规则: (1)如果类名使用拉丁字母,那么名字的首写字母使用大写字母,如Hello、Time、People等。 (2)类名最好容易识别,当类名由几个“单词”复合而成时,每个单词的首写字母使用大写,如BeijingTi me、AmericanGame、HelloChina等。 2.类体 编写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现。类声明之后的一对大括号“{”、“}”以及它们之间的内容称为类体,大括号之间的内容称为类体的内容。 类体的内容由两部分构成:一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。 下面是一个类名为“Trapezia”的类,类体内容的变量定义部分定义了4个float类型变量:top、bottom、h igh和laderArea,方法定义部分定义了两个方法:“getArea”和“setHigh”。

二.对象 1.对象的创建 创建一个对象包括对象的声明和为对象分配内存两个步骤。 (1)对象的声明。 一般格式为: 类的名字对象名字; 如: 这里People是类的名字,zhubajie是我们声明的对象的名字。 (2)为声明的对象分配内存。 使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(你一定还记得构造方法的名字必须和类名相同这一规定),如: 例1: 「注」如果类里定义了一个或多个构造方法,那么Java不提供默认的构造方法。 2.对象的使用 对象不仅可以改变自己变量的状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。 通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。 例2:

抓包实验

:利用Wireshark软件进行数据包抓取 1.3.2 抓取一次完整的网络通信过程的数据包实验 一,实验目的: 通过本次实验,学生能掌握使用Wireshark抓取ping命令的完整通信过程的数据包的技能,熟悉Wireshark软件的包过滤设置和数据显示功能的使用。 二,实验环境: 操作系统为Windows 7,抓包工具为Wireshark. 三,实验原理: ping是用来测试网络连通性的命令,一旦发出ping命令,主机会发出连续的测试数据包到网络中,在通常的情况下,主机会收到回应数据包,ping采用的是ICMP协议。 四,验步骤: 1.确定目标地址:选择https://www.360docs.net/doc/5c7253189.html,作为目标地址。 2.配置过滤器:针对协议进行过滤设置,ping使用的是ICMP协议,抓包前使用捕捉过滤器,过滤设置为icmp,如图 1- 1

图 1-1 3.启动抓包:点击【start】开始抓包,在命令提示符下键入ping https://www.360docs.net/doc/5c7253189.html,, 如图 1-2

图 1-2 停止抓包后,截取的数据如图 1-3 图 1-3 4,分析数据包:选取一个数据包进行分析,如图1- 4

图1-4 每一个包都是通过数据链路层DLC协议,IP协议和ICMP协议共三层协议的封装。DLC协议的目的和源地址是MAC地址,IP协议的目的和源地址是IP地址,这层主要负责将上层收到的信息发送出去,而ICMP协议主要是Type和Code来识别,“Type:8,Code:0”表示报文类型为诊断报文的请求测试包,“Type:0,Code:0”表示报文类型为诊断报文类型请正常的包。ICMP提供多种类型的消息为源端节点提供网络额故障信息反馈,报文类型可归纳如下: (1)诊断报文(类型:8,代码0;类型:0代码:0); (2)目的不可达报文(类型:3,代码0-15); (3)重定向报文(类型:5,代码:0--4); (4)超时报文(类型:11,代码:0--1); (5)信息报文(类型:12--18)。

Java类 类型的数组创建与使用方法

Java类数组的使用方法一 注意一定要把类数组的每一个元素都赋值,否则就报错,既对类数组对象的一空声明,如果并没有实例化,会报空指针异常:NullPointerException 1.创建类类型的数组方法一: 创建一个Person类,在main方法中创建p1,p2,p3,p4 几个Person 类的实例化对象。然后再使用如下代码创建类类型的数组p。Product [] p=new Product[]{p1,p2,p3,p4}; public class Test { public static void main(String[] args) { Product p1=new Product(); https://www.360docs.net/doc/5c7253189.html,="豆浆机"; Product p2=new Product(); https://www.360docs.net/doc/5c7253189.html,="电视机"; Product p3=new Product(); Product p4=new Product(); Product [] p=new Product[]{p1,p2,p3,p4};//创建类类型的数组方法一 for(int i=0;i

} } class Product{ int Num; String name; } 2.创建类类型的数组方法二: public class Test { public static void main(String[] args) { Product p1=new Product(); Product p2=new Product(); Product p3=new Product(); Product p4=new Product(); Product [] p={p1,p2,p3};//创建类类型的数组方法二for(int i=0;i

java创建对像实例的三种方法

Java有一下三种方法可以创建对象实例。 1.new 通常都是使用java的关键字new来创建对象实例。 若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。 Something somethingNew = new Something(); 通过new创建对象实例必须把类名写在原代码里面。 2.clone 若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数). public class Something implements Cloneable{ private Something obj; public Something cloneSomething() { try { obj = (Something)this.clone(); // obj = (Something)clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return obj; } } 如果需要复制上面的那个obj指向的对象实例时,调用 somethingNew.cloneSomething()方法就ok了。 但是为什么不直接使用somethingNew.clone()呢? JDK中Object# clone()方法的原型是: protected native Object clone() throws CloneNotSupportedException; 方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。

HTTPS请求工具类汇总

HTTPS请求 package com.sunzk.dreamsunlight.weixin.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import https://www.360docs.net/doc/5c7253189.html,.ConnectException; import https://www.360docs.net/doc/5c7253189.html,.URL; import https://www.360docs.net/doc/5c7253189.html,.ssl.HttpsURLConnection; import https://www.360docs.net/doc/5c7253189.html,.ssl.SSLContext; import https://www.360docs.net/doc/5c7253189.html,.ssl.SSLSocketFactory; import https://www.360docs.net/doc/5c7253189.html,.ssl.TrustManager; import net.sf.json.JSONException; import net.sf.json.JSONObject; import org.apache.log4j.Logger;

import com.sunzk.dreamsunlight.weixin.certificate.MyX509 TrustManager; import com.sunzk.dreamsunlight.weixin.model.Menu; import com.sunzk.dreamsunlight.weixin.token.AccessToken; /** * * @ClassName: WeiXinHttpsUtil * * @Description: TODO(微信HTTPS请求工具类) * * @author sunzk-dreamsunlight-QQ(1131341075) * * @date 2016-11-14 上午10:05:56 * */ public class WeiXinHttpsUtil {

《JAVA面向对象编程》([PDF] 孙卫琴著)

《JAVA面向对象编程》[PDF] 孙卫琴著 【目录】 第1章面向对象开发方法概述 1 1.1 结构化的软件开发方法简介3 1.2 面向对象的软件开发方法简介5 1.2.1 对象模型6 1.2.2 UML:可视化建模语言6 1.2.3 Rational Rose:可视化建模工具7 1.3 面向对象开发中的核心思想和概念7 1.3.1 问题领域、对象、属性、状态、行为、方法、实现7 1.3.2 类、类型9 1.3.3 消息、服务10 1.3.4 接口11 1.3.5 封装、透明12 1.3.6 抽象16 1.3.7 继承、扩展、覆盖17 1.3.8 组合19 1.3.9 多态、动态绑定22 1.4 UML语言简介24 1.4.1 用例图24 1.4.2 类框图25 1.4.3 时序图26 1.4.4 协作图27 1.4.5 状态转换图27 1.4.6 组件图28 1.4.7 部署图29 1.5 类之间的关系29 1.5.1 关联(Association)29 1.5.2 依赖(Dependency)31 1.5.3 聚集(Aggregation)31 1.5.4 泛化(Generalization)32 1.5.5 实现(Realization)32 1.5.6 区分依赖、关联和聚集关系33 1.6 实现Panel系统35 1.6.1 扩展Panel系统37 1.6.2 用配置文件进一步提高Panel系统的可维护性39 1.6.3 运行Panel系统40 1.7 小结41 1.8 思考题42 第2章第一个Java应用43 2.1 创建Java源文件43 2.1.1 Java源文件结构44

使用wireshark分析HTTPS流程的建立

使用wireshark分析HTTPS流程的建立

使用wireshark分析HTTPS流程的建立 摘要: https流程 一、概要 为了网站以及用户的安全性,现在很多的网站都是https,大家都知道tcp通过三次握手建立连接,并且还有很多的同学对https连接建立的流程不太明白,包括我自己,通过借助于wireshark这种抓包工具,我们可以尝试着了解一下大概的流程。 (图1) 本图是客户端(10.0.45.103)访问服务端(114.215.88.85)通过wireshark 抓包显示出来的双方交互数据,访问是通过https访问服务器上的一台nginx 服务器服务。请关注第一列的No。下文中很多时候会用no表示一次交互。 图中可以很明显的看出tcp的三次握手以及之后的TLS加密流程的建立。二、tcp的三次握手 通过流程图可以看出(也可以看图1 的19368到19370这三个编号),首先客户端向服务端发起一个SYN的请求,序号(Seq)为0,确认号(ACK)也为0,这代表是本次是由客户端发起的首次请求。本次请求的数据长度为0 然后服务端给客户端响应,此时服务端的Seq也是0,值得是服务端的第一回应,并且给客户端说,你的请求我已经收到了(ACK=1),

最后返还给客户端以后,客户端的序号+1,并且对服务端的响应做出确认,最后回给服务端,此时ACK=1,Seq=1 tcp的握手过程建立成功。 三、ssl连接的建立 通过以上可以看出,SSL也是建立在TCP的基础上的,经过tcp的三次握手,接下来才是加密信道的建立。 客户端和服务端建立安全连接大致经过以下几个步骤 1.客户端:ClientHello 2.服务端:Server Hello,Server certificate,Server Exchange,Server Hello Done 3.客户端:client Exchange 4.客户端:Application Data 5.服务端:New Session 6.服务端:Application Data 接下来看这几个步骤中具体的每一个步骤传输的内容 ClientHello client首先给服务端打招呼,对服务端说hello 应用层没什么特别的

实验四 Java类的编写及对象的创建

天津天狮学院 Java程序设计实验 实验题目:实验四Java类的编写及对象的创建学时:2学时 学号:122031110 姓名:张阳 成绩: 专业班级:2012级计算机应用技术

实验4:Java类的编写及对象的创建 一、实验目的 1、掌握Java类的声明方法、Java对象的声明与访问及使用。 2、掌握构造器的使用以及参数传递、this关键字的使用。 二、实验要求 1、实验前认真预习,完成实验内容2中的源程序并分析运行结果。 2、在记事本里完成程序的编辑,利用JDK6.0完成程序的编译、运行,获得程序结果。要求在实验报告中记录所有程序实际运行结果。 3、按照实验内容中各个题目具体要求,认真完成实验报告。 三、实验内容 1、启动记事本。 2、完成以下题目 1)下面定义一个Student类,在这个类中,定义了4个成员变量No、name、sex和birthday,分别用于描述学号、姓名、性别与出生日期;定义了4个用于设置学生信息的成员方法、定义了4个用于获取信息的成员方法、定义了一个用于对学生信息初始化的构造函数。 要求:仿照上述方法定义一个Date类,在该类中,含有3个成员变量,分别是year、month、day,分别表示年、月、日,3个用于设置日期的成员方法,3个用于获取日期的成员方法以及一个设置日期的构造函数。 package显示时间日期; import java.util.*; public class Date{ private int year,month,day; public Date(){ } public void input_Date(int year,int month,int day){ this.year = year; this.month = month; this.day = day; } public void output_Date(){ 1

JAVA中常用类的常用方法

JAVA中常用类的常用方法 一、类 1、clone()方法 创建并返回此对象的一个副本。要进行“克隆”的对象所属的类必须实现. Cloneable接口。 2、equals(Object obj)方法 功能:比较引用类型数据的等价性。 等价标准:引用类型比较引用,基本类型比较值。 存在特例:对File、String、Date及封装类等类型来说,是比较类型及对象的内容而不考虑引用的是否为同一实例。 3、finalize()方法 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 4、hashCode()方法返回该对象的哈希码值。 5、notify()方法唤醒在此对象监视器上等待的单个线程。 6、notifyAll()方法唤醒在此对象监视器上等待的所有线程。 7、toString()方法 返回该对象的字符串表示。在进行String与其它类型数据的连接操作时,自动调用toString()方法。可以根据需要重写toString()方法。 8、wait()方法 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

二、字符串相关类 l String类 charAt(int index) 返回指定索引处的 char 值。 compareTo(String anotherString) 按字典顺序比较两个字符串。compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。concat(String str) 将指定字符串连接到此字符串的结尾。 endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 equals(Object anObject) 将此字符串与指定的对象比较。 equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 indexOf(String str) 返回第一次出现的指定子字符串在此字符串中的索引。lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。length() 返回此字符串的长度。 replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 split(String regex) 根据给定正则表达式的匹配拆分此字符串。 startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。

java类与对象的创建方法

类与对象的创建与使用方法 //声明RectTest类 class RectTest{ public static void main(String args[]){ Rect rect1=new Rect(); System.out.println("矩形1的信息"+rect1.toString()); Rect rect2=new Rect(33,44); System.out.println("矩形2的信息"+rect2.toString()); rect1 = rect2; System.out.println("矩形1的信息"+rect1.toString()); System.out.println("矩形1的周长: "+rect1.getPerimeter()); System.out.println("矩形1的面积: "+rect1.getArea()); System.out.println("矩形2的周长: "+rect2.getPerimeter()); System.out.println("矩形2的面积: "+rect2.getArea()); } } //声明矩形类Rect class Rect { private float length; //矩形的长度 private float width; //矩形的宽度 public Rect(){ //默认构造方法 length=0; width=0; } public Rect(float l, float w){ //带参数的构造方法 length=l; width=w; } public void setLength(float l){ //改变矩形的长度 length=l; } public float getLength(){ //得到矩形的长度 return length; } public void setWidth(float w){ //改变矩形的宽度 width=w; }

java中对象创建和初始化过程

?JAVA中对象创建和初始化过程 ? ?分析一下JAVA中对象创建和初始化过程中涉及的相关概念问题,java中栈(st ack)与堆(heap),对象、引用、句柄的概念。 @Author:ZJ 06-11-25 Blog: https://www.360docs.net/doc/5c7253189.html,/ 1.Java中的数据类型 Java中有3个数据类型:基本数据类型(在Java中,boolean、byte、short、int、lo ng、char、float、double这八种是基本数据类型)、引用类型和null类型。其中,引用类型包括类类型(含数组)、接口类型。 下列语句声明了一些变量: 以下是引用片段: int k ; A a; //a是A数据类型的对象变量名。 B b1,b2,…,b10000;// 假定B是抽象类或接口。 String s; 注意:从数据类型与变量的角度看,基本数据类型变量k、类类型变量a和s、抽象类或接口类型变量b(1万个),它们都是变量(标识符)。 2.关于句柄(handle) 为了区别引用类型的变量标识符和基本数据类型变量标识符,我们特别的使用Handle 来称呼引用类型的变量标识符。上面例子中b1至b10000、a、s都是Handle。Handle直观的看就是手柄、把手,我们采用计算机界常用的中文翻译“句柄”。 2.1【Windows编程中的】句柄的含义 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。 如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存的。 如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟

https请求的抓包方法

对于https协议的接口的抓包方法 一、使用fiddler 1.使用fiddler对浏览器访问的https接口抓包 默认设置下的fiddler是不能解密https协议的请求的内容的,在fiddler上抓到的https 协议的请求都是如下图所示,但是看不到其中的传参以及返回结果的内容: 如果想要用fiddler抓到浏览器访问的https接口,需要在fiddler做如下设置: a)进入菜单栏,Tools->Fiddler Options: b)切换到https选项卡,勾选如下选项: c)按照上面步骤勾选后,会弹出如下提示框,提示意思大概就是fiddler会生成 一个唯一的根证书,我们要配置Windows,使Windows信任这个CA证书,

所以点击Yes即可: d)点击Yes之后,Windows会马上弹出下面的弹窗,我们点击“是”,就能将 DO_NOT_TRUST_FiddlerRoot这个由fiddler生成的CA证书导入到浏览器,也就 完成了上面C步骤所述的配置Windows,使Windows信任这个CA证书的步 骤: 完成了上面的配置后,即可以在浏览器发起一个https协议的请求: 此时可以在fiddler抓到这个请求,并能看到传参内容和返回的内容

返回的内容: 2.使用fiddler对app访问的https接口抓包 首先要先在fiddler进行设置,步骤与上面的一样,但是不用导入证书到浏览器,这里不再赘述。 Android: 要使用fiddler抓到app发出的https请求,需要在app端安装fiddler生成的CA证书,在Android的app端安装fiddler生成的CA证书步骤如下: a)设置手机代理服务器,代理到自己的电脑:

http 使用curl发起https请求

http 使用curl发起https请求 今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed” 很明显,验证证书的时候出现了问题。 使用curl如果想发起的https请求正常的话有2种做法: 方法一、设定为不验证证书和host。 在执行curl_exec()之前。设置option $ch = curl_init(); ...... curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 方法二、设定一个正确的证书。 本地ssl判别证书太旧,导致链接报错ssl证书不正确。 我们需要下载新的ssl 本地判别文件 http://curl.haxx.se/ca/cacert.pem 放到程序文件目录 curl 增加下面的配置 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); ; curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem'); 大功告成 (本人验证未通过。。。报错信息为:SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed) 如果对此感兴趣的话可以参看国外一大神文章。 https://www.360docs.net/doc/5c7253189.html,/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected -sites/ 为了防止某天该文章被Q今复制过来。内容如下: Using cURL in PHP to access HTTPS (SSL/TLS) protected sites From PHP, you can access the useful cURL Library (libcurl) to make requests to URLs using a variety of protocols such as HTTP, FTP, LDAP and even Gopher. (If you’ve spent time on the *nix command line, most environments also have the curl command available that uses the libcurl library) In practice, however, the most commonly-used protocol tends to be HTTP, especially when usingPHP for server-to-server communication. Typically this involves accessing another web server as part of a web service call, using some method such as XML-RPC or REST to query a resource. For example, Delicious offers a HTTP-based API to manipulate and read a user’s posts. However, when trying to access a HTTPS resource (such as the delicious API), there’s a little more configuration you have to do before you can get cURL working right in PHP. The problem If you simply try to access a HTTPS (SSL or TLS-protected resource) in PHP using cURL, you’re likely to run into some difficulty. Say you have the following code: (Error handling omitted for brevity) // Initialize session and set URL. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // Set so curl_exec returns the result instead of outputting it. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Get the response and close the channel. $response = curl_exec($ch);

相关文档
最新文档