java发送HttpClient请求及接收请求结果过程的简单实例_java

一.

1、写一个HttpRequestUtils工具类,包括post请求和get请求

package com.brainlong.framework.util.httpclient;
import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;import java.net.URLDecoder; public class HttpRequestUtils {
private static Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class);
//日志记录   /**   * httpPost   * @param url 路径   * @param jsonParam 参数   * @return   */
public static JSONObject httpPost(String url,JSONObject jsonParam){
return httpPost(url, jsonParam, false);
}
/**   * post请求   * @param url     url地址   * @param jsonParam   参数   * @param noNeedResponse  不需要返回结果   * @return   */
public static JSONObject httpPost(String url,JSONObject jsonParam, boolean noNeedResponse){
//post请求返回结果
DefaultHttpClient httpClient = new DefaultHttpClient();
JSONObject jsonResult = null;
HttpPost method = new HttpPost(url);
try {
if (null != jsonParam) {
//解决中文乱码问题
StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
method.setEntity(entity);      }
HttpResponse result = httpClient.execute(method);
url = URLDecoder.decode(url, "UTF-8");
/**请求发送成功,并得到响应**/
if (result.getStatusLine().getStatusCode() == 200) {
String str = "";
try {
/**读取服务器返回过来的json字符串数据**/
str = EntityUtils.toString(result.getEntity());
if (noNeedResponse) {
return null;
}
/**把json字符串转换成json对象**/
jsonResult = JSONObject.fromObject(str);
} catch (Exception e) {
logger.error("post请求提交失败:" + url, e);
}
}
} catch (IOException e) {
logger.error("post请求提交失败:" + url, e);
}
return jsonResult;
}
/**   * 发送get请求   * @param url  路径   * @return   */
public static JSONObject httpGet(String url){
//get请求返回结果
JSONObject jsonResult = null;
try {
DefaultHttpClient client = new DefaultHttpClient();
//发送get请求
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/**读取服务器返回过来的json字符串数据**/
String strResult = EntityUtils.toString(response.getEntity());
/**把json字符串转换成json对象**/
jsonResult = JSONObject.fromObject(strResult);
url = URLDecoder.decode(url, "UTF-8");
} else {
logger.error("get请求提交失败:" + url);
}
} catch (IOException e) {
logger.error("get请求提交失败:" + url, e);
}
return jsonResult;  }}

2、写业务代码发送Http请求

3、MVC配置文件设置Controller扫描目录

<!-- 自动扫描且只扫描@Controller -->
<context:component-scan base-package="com.wiselong.multichannel" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

4、接收Http请求

接收post请求

@Controller

@RequestMapping(value = "/api/platform/exceptioncenter/exceptioninfo")

public class ExceptionInfoController {

//注入

@Autowired

private ExceptionInfoBiz exceptionInfoBiz;

/**

* 创建异常信息请求

* @param requestBody 请求消息内容

* @param request 请求消息头

* @return jsonObject

*/

@RequestMapping(

value="/create",

method = RequestMethod.POST

)

public ModelAndView createExceptionInfo(@RequestBody String requestBody, HttpServletRequest request) {

JSONObject jsonObject = JSONObject.fromObject(requestBody);

ComExceptionInfo comExceptionInfo = new ComExceptionInfo();

comExceptionInfo.setProjectName(jsonObject.getString("projectName"));

comExceptionInfo.setTagName(jsonObject.getString("tagName"));

exceptionInfoBiz.insert(comExceptionInfo);

//返回请求结果

JSONObject result= new JSONObject();

result.put("success", "true");

return new ModelAndView("", ResponseUtilsHelper.jsonSuccess(result.toString()));

}

}

接收get请求

@Controller

@RequestMapping(value="/api/platform/messagecenter/messages/sms")

public class SmsController {

@Autowired

SmsSendBiz smsSendBiz;

/**

* 接收手机号码和内容往短信发送表插入一条记录

* @param requestbody 请求消息内容

* @param request 请求消息头

* @return jsonObject

*/

@RequestMapping(

value="/send",

method= RequestMethod.GET

)

public ModelAndView sendSms(@RequestBody String requestbody, HttpServletRequest request) {

//获取请求URL及url后面传输的参数

String url = request.getRequestURL() + "?" + request.getQueryString();

url = BuildRequestUrl.decodeUrl(url);

String telePhone = RequestUtils.getStringValue(request, "telePhone");

String content = RequestUtils.getStringValue(request, "content");

smsSendBiz.insertTtMsQuequ(telePhone,content);

return new ModelAndView("", ResponseUtilsHelper.jsonResult("", true));

}

}

二.

get

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpMethod;

import org.apache.commons.httpclient.methods.GetMethod;

public class H_client_get {

public static void main(String[] args) throws IOException {

// new类对象

HttpClient client = new HttpClient();

// 使用 GET 方法 与URL服务器进行交互

// HttpMethod method = new GetMethod("http://192.168.111.128/bak/regist.php?email=admin@admin.com&password=1234567&re_password=1234567&username=admin&nickname=管理员");

HttpMethod method = new GetMethod("http://192.168.111.128/bak/login.php?username=");

// 使用 GET 方法 ,实行与url服务器连接

client.executeMethod(method);

// 数据流输出

// method.getResponseBodyAsStream 创建字节流对象为inputStream

InputStream inputStream = method.getResponseBodyAsStream();

// InputStreamReader(inputStream)字节流转换成字符流 BufferedReader封装成带有缓冲的字符流对象了 

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));

// StringBuffer是字符串变量,它的对象是可以扩充和修改的 创建一个空的StringBuffer类的对象 

StringBuffer stringBuffer = new StringBuffer();

// 定义字符串常量

String str= "";

// br字符流赋值给str字符串常量 str不等于空 按行输出

while((str = br.readLine()) != null){ 

// StringBuffer 是字符串变量,它的对象是可以扩充和修改的 将str数据赋予 stringBuffer 

stringBuffer .append(str ); 

} 

// 按照字符串循环输出stringBuffer

System.out.println(stringBuffer.toString());

// 关闭method 的 httpclient连接

method.releaseConnection();

}

}

post

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.apache.commons.httpclient.methods.PostMethod;

import org.apache.commons.httpclient.*;

public class H_client_post {

public static void main(String[] args) throws IOException {

HttpClient client = new HttpClient();

PostMethod method = new PostMethod("http://192.168.111.128/bak/login_post.php");

//表单域的值,既post传入的key=value

NameValuePair[] date = { new NameValuePair("username","admin"),new NameValuePair("password","123457")};

//method使用表单阈值

method.setRequestBody(date);

//提交表单

client.executeMethod(method);

//字符流转字节流 循环输出,同get解释

InputStream inputStream = method.getResponseBodyAsStream();

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));

StringBuffer stringBuffer = new StringBuffer();

String str= "";

while((str = br.readLine()) != null){ 

stringBuffer .append(str ); 

} 

System.out.println(stringBuffer.toString());

method.releaseConnection();

}

}

三.

Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入。

一、简介

HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。

二、特性

1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1

2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。

3. 支持HTTPS协议。

4. 通过Http代理建立透明的连接。

5. 利用CONNECT方法通过Http代理建立隧道的https连接。

6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。

7. 插件式的自定义认证方案。

8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案。

9. 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。

10. 自动处理Set-Cookie中的Cookie。

11. 插件式的自定义Cookie策略。

12. Request的输出流可以避免流中内容直接缓冲到socket服务器。

13. Response的输入流可以有效的从socket服务器直接读取相应内容。

14. 在http1.0和http1.1中利用KeepAlive保持持久连接。

15. 直接获取服务器发送的response code和 headers。

16. 设置连接超时的能力。

17. 实验性的支持http1.1 response caching。

18. 源代码基于Apache License 可免费获取。

三、使用方法

使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。

1. 创建HttpClient对象。

2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

6. 释放连接。无论执行方法是否成功,都必须释放连接

四、实例

package com.test; 

import java.io.File; 

import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
public class HttpClientTest {
  @Test
  public void jUnitTest() {
    get();
  }
  /**
   * HttpClient连接SSL
   */
  public void ssl() {
    CloseableHttpClient httpclient = null;
    try {
      KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
      FileInputStream instream = new FileInputStream(new File("d:\\tomcat.keystore"));
      try { 54.
        // 加载keyStore d:\\tomcat.keystore
        trustStore.load(instream, "123456".toCharArray());
      } catch (CertificateException e) {
        e.printStackTrace();
      } finally {
        try {
          instream.close();
        } catch (Exception ignore) {
        }
      }
      // 相信自己的CA和所有自签名的证书
      SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build();
      // 只允许使用TLSv1协议
      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null,
          SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
      httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
      // 创建http请求(get方式)
      HttpGet httpget = new HttpGet("https://localhost:8443/myDemo/Ajax/serivceJ.action");
      System.out.println("executing request" + httpget.getRequestLine());
      CloseableHttpResponse response = httpclient.execute(httpget);
      try {
        HttpEntity entity = response.getEntity();
        System.out.println("----------------------------------------");
        System.out.println(response.getStatusLine());
        if (entity != null) {
          System.out.println("Response content length: " + entity.getContentLength());
          System.out.println(EntityUtils.toString(entity));
          EntityUtils.consume(entity);
        }
      } finally {
        response.close();
      }
    } catch (ParseException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (KeyManagementException e) {
      e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (KeyStoreException e) {
      e.printStackTrace();
    } finally {
      if (httpclient != null) {
        try {
          httpclient.close();
        } catch (IOException e) {
          e.printStackTrace(); 

        }
      }
    }
  } 

  /**
   * post方式提交表单(模拟用户登录请求)
   */
  public void postForm() {
    // 创建默认的httpClient实例.
    CloseableHttpClient httpclient = HttpClients.createDefault();
    // 创建httppost
    HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action");
    // 创建参数队列
    List<namevaluepair> formparams = new ArrayList<namevaluepair>();
    formparams.add(new BasicNameValuePair("username", "admin")); 

    formparams.add(new BasicNameValuePair("password", "123456")); 

    UrlEncodedFormEntity uefEntity; 

    try { 

      uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8"); 

      httppost.setEntity(uefEntity); 

      System.out.println("executing request " + httppost.getURI()); 

      CloseableHttpResponse response = httpclient.execute(httppost); 

      try { 

        HttpEntity entity = response.getEntity(); 

        if (entity != null) { 

          System.out.println("--------------------------------------"); 

          System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8")); 

          System.out.println("--------------------------------------"); 

        } 

      } finally { 

        response.close(); 

      } 

    } catch (ClientProtocolException e) { 

      e.printStackTrace(); 

    } catch (UnsupportedEncodingException e1) { 

      e1.printStackTrace(); 

    } catch (IOException e) { 

      e.printStackTrace(); 

    } finally { 

      // 关闭连接,释放资源  

      try { 

        httpclient.close(); 

      } catch (IOException e) { 

        e.printStackTrace(); 

      } 

    } 

  }
  /**
   * 发送 post请求访问本地应用并根据传递参数不同返回不同结果
   */ 

  public void post() { 

    // 创建默认的httpClient实例.  

    CloseableHttpClient httpclient = HttpClients.createDefault(); 

    // 创建httppost  

    HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action"); 

    // 创建参数队列  

    List<namevaluepair> formparams = new ArrayList<namevaluepair>(); 

    formparams.add(new BasicNameValuePair("type", "house")); 

    UrlEncodedFormEntity uefEntity; 

    try { 

      uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
      httppost.setEntity(uefEntity);
      System.out.println("executing request " + httppost.getURI());
      CloseableHttpResponse response = httpclient.execute(httppost);
      try {
        HttpEntity entity = response.getEntity(); 

        if (entity != null) { 

          System.out.println("--------------------------------------"); 

          System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8")); 

          System.out.println("--------------------------------------"); 

        } 

      } finally { 

        response.close(); 

      } 

    } catch (ClientProtocolException e) { 

      e.printStackTrace(); 

    } catch (UnsupportedEncodingException e1) { 

      e1.printStackTrace(); 

    } catch (IOException e) { 

      e.printStackTrace(); 

    } finally { 

      // 关闭连接,释放资源  

      try { 

        httpclient.close(); 

      } catch (IOException e) { 

        e.printStackTrace(); 

      } 

    } 

  } 

  /** 

   * 发送 get请求
   */ 

  public void get() { 

    CloseableHttpClient httpclient = HttpClients.createDefault(); 

    try { 

      // 创建httpget.  

      HttpGet httpget = new HttpGet("http://www.baidu.com/"); 

      System.out.println("executing request " + httpget.getURI()); 

      // 执行get请求.  

      CloseableHttpResponse response = httpclient.execute(httpget); 

      try { 

        // 获取响应实体  

        HttpEntity entity = response.getEntity(); 

        System.out.println("--------------------------------------"); 

        // 打印响应状态  

        System.out.println(response.getStatusLine()); 

        if (entity != null) { 

          // 打印响应内容长度  

          System.out.println("Response content length: " + entity.getContentLength()); 

          // 打印响应内容  

          System.out.println("Response content: " + EntityUtils.toString(entity)); 

        } 

        System.out.println("------------------------------------"); 

      } finally { 

        response.close(); 

      } 

    } catch (ClientProtocolException e) { 

      e.printStackTrace(); 

    } catch (ParseException e) { 

      e.printStackTrace(); 

    } catch (IOException e) { 

      e.printStackTrace(); 

    } finally { 

      // 关闭连接,释放资源  

      try { 

        httpclient.close(); 

      } catch (IOException e) { 

        e.printStackTrace(); 

      } 

    } 

  } 

  /**
   * 上传文件 

   */ 

  public void upload() { 

    CloseableHttpClient httpclient = HttpClients.createDefault(); 

    try { 

      HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceFile.action"); 

      FileBody bin = new FileBody(new File("F:\\image\\sendpix0.jpg")); 

      StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN); 

      HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("bin", bin).addPart("comment", comment).build(); 

      httppost.setEntity(reqEntity); 

      System.out.println("executing request " + httppost.getRequestLine()); 

      CloseableHttpResponse response = httpclient.execute(httppost); 

      try { 

        System.out.println("----------------------------------------"); 

        System.out.println(response.getStatusLine()); 

        HttpEntity resEntity = response.getEntity(); 

        if (resEntity != null) { 

          System.out.println("Response content length: " + resEntity.getContentLength()); 

        } 

        EntityUtils.consume(resEntity); 

      } finally { 

        response.close(); 

      } 

    } catch (ClientProtocolException e) { 

      e.printStackTrace(); 

    } catch (IOException e) { 

      e.printStackTrace(); 

    } finally { 

      try { 

        httpclient.close(); 

      } catch (IOException e) { 

        e.printStackTrace(); 

      } 

    } 

  } 

}</namevaluepair></namevaluepair></namevaluepair></namevaluepair> 

以上这篇java发送HttpClient请求及接收请求结果过程的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索httpclient发送请求
httpclient接收请求、httpclient发送请求、soap请求的发送与接收、json发送请求以及接收、httpclient post请求,以便于您获取更多的相关知识。

时间: 2024-09-17 04:23:07

java发送HttpClient请求及接收请求结果过程的简单实例_java的相关文章

Java微信支付之公众号支付、扫码支付实例_java

微信支付现在已经变得越来越流行了,随之也出现了很多以可以快速接入微信支付为噱头的产品,不过方便之余也使得我们做东西慢慢依赖第三方,丧失了独立思考的能力,这次打算分享下我之前开发过的微信支付. 一 .H5公众号支付 要点:正确获取openId以及统一下单接口,正确处理支付结果通知,正确配置支付授权目录 H5的支付方式是使用较为广泛的方式,这种支付方式主要用于微信内自定义菜单的网页,依赖手机上安装的微信客户端,高版本的微信才支持微信支付,下面按我的流程注意说明 1  编写用于支付的页面,由于是测试用

Java 反射调用静态方法的简单实例_java

以往都是使用反射调用实例方法,那么反射如何调用静态方法呢?看下面的例子 Class<?> threadClazz = Class.forName("java.lang.Math"); Method method = threadClazz.getMethod("abs", long.class); System.out.println(method.invoke(null, -10000l)); 只需要将invoke方法的第一个参数设为null即可! 以

java从字符串中提取数字的简单实例_java

随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法,正则表达式,集合类,还有就是String类提供的方法. 1 String类提供的方法: package 测试练习; import Java.util.*; public class get_StringNum { /** *2016.10.25 */ public static void main(Strin

Java实现一个小说采集程序的简单实例_java

被标题吸引进来的不要骂我. 只是一个简单的实现,随手写了来下载一部喜欢的小说的.示例中的小说只是示例,不是我的菜. 使用了jsoup.挺好用的一个工具. 有需要的话,参考下自己改吧.挺简单的,是吧. 代码如下: package com.zhyea.doggie; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.n

java读取文件和写入文件的方式(简单实例)_java

Java代码 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读

JAVA按字节读取文件的简单实例_java

JAVA的IO流一直都是我比较头疼的部分(我没有系统学过JAVA,一般需要实现什么功能再去看文档). 最近遇到一个需求:一个字节一个字节地读取一个文件.网上很多方法,代码一大堆.我在这里和大家分享一个简单的办法(至少对我的需求是有效的). File file= new File(fileName); //filename为 文件目录,请自行设置 InputStream in= null; byte[] bytes= null; in = new FileInputStream(file); //

用Java程序判断是否是闰年的简单实例_java

我们知道,(1)如果是整百的年份,能被400整除的,是闰年:(2)如果不是整百的年份,能被4整除的,也是闰年.每400年,有97个闰年.鉴于此,程序可以作以下设计: 第一步,判断年份是否被400整除,能的话,就是闰年.比如1600.2000.2400年是闰年. 第二步,在第一步不成立的基础上,判断年份能否被100整除,如果是,则不是闰年.比如1900.2100.2200年不是闰年. 第三步,在第二步不成立的基础上,判断年份能否被4整除,如果是,则是闰年.比如1996.2004.2008年是闰年.

Java互斥锁简单实例_java

本文实例讲述了Java互斥锁.分享给大家供大家参考.具体分析如下: 互斥锁,常常用于多个线程访问独占式资源,比如多个线程同时写一个文件,虽然互斥访问方式不够高效,但是对于一些应用场景却很有意义 //没有互斥锁的情况(可以自己跑跑看运行结果): public class LockDemo { // private static Object lock = new Object(); // static确保只有一把锁 private int i = 0; public void increaseI(

Java读取txt文件和写入txt文件的简单实例_java

写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂! package edu.thu.keyword.test; import java.io.File; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream;