java连接http的简单介绍

博主:adminadmin 2023-01-02 23:33:08 853

今天给各位分享java连接http的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何用java实现HTTP长连接

tomcat9提供了一种叫webSocket的东西,可以实现这个,但是必须要使用tomcat9来支持

另外一个就是运用长轮询,就是前台给后台发一个请求, 然后后台一直不处理, 可以while循环或者sleep(1000), 每隔1秒去检查是否应该返回数据, 如果后台决定要刷新了, 就返回数据, 然后前台接收到返回数据后去刷新你要刷新的东西, 刷新完毕后如果需要, 再次发送这个请求。当然,为了不阻塞其它的ajax请求, 长轮询一般放在一个单独的iframe里

java如何调用对方http接口 新手虚心求教

import java.io.BufferedReader;  

import java.io.DataOutputStream;  

import java.io.InputStreamReader;  

import java.net.HttpURLConnection;  

import java.net.URL;  

import java.net.URLEncoder;  

  

public class DemoTest1 {  

  

    public static final String GET_URL = "";  

//    public static final String POST_URL = "";  

    // 妙兜测试接口  

    public static final String POST_URL = "";  

      

    /** 

     * 接口调用 GET 

     */  

    public static void httpURLConectionGET() {  

        try {  

            URL url = new URL(GET_URL);    // 把字符串转换为URL请求地址  

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打开连接  

            connection.connect();// 连接会话  

            // 获取输入流  

            BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));  

            String line;  

            StringBuilder sb = new StringBuilder();  

            while ((line = br.readLine()) != null) {// 循环读取流  

                sb.append(line);  

            }  

            br.close();// 关闭流  

            connection.disconnect();// 断开连接  

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

        } catch (Exception e) {  

            e.printStackTrace();  

            System.out.println("失败!");  

        }  

    }  

      

    /** 

     * 接口调用  POST 

     */  

    public static void httpURLConnectionPOST () {  

        try {  

            URL url = new URL(POST_URL);  

              

            // 将url 以 open方法返回的urlConnection  连接强转为HttpURLConnection连接  (标识一个url所引用的远程对象连接)  

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此时cnnection只是为一个连接对象,待连接中  

              

            // 设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数)  

            connection.setDoOutput(true);  

              

            // 设置连接输入流为true  

            connection.setDoInput(true);  

              

            // 设置请求方式为post  

            connection.setRequestMethod("POST");  

              

            // post请求缓存设为false  

            connection.setUseCaches(false);  

              

            // 设置该HttpURLConnection实例是否自动执行重定向  

            connection.setInstanceFollowRedirects(true);  

              

            // 设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数)  

            // application/x-javascript text/xml-xml数据 application/x-javascript-json对象 application/x-www-form-urlencoded-表单数据  

            // ;charset=utf-8 必须要,不然妙兜那边会出现乱码【★★★★★】  

            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");     

              

            // 建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)  

            connection.connect();  

              

            // 创建输入输出流,用于往连接里面输出携带的参数,(输出内容为?后面的内容)  

            DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());  

              

            String app_key = "app_key="+ URLEncoder.encode("4f7bf8c8260124e6e9c6bf094951a111", "utf-8");        // 已修改【改为错误数据,以免信息泄露】  

            String agt_num = "agt_num="+ URLEncoder.encode("10111", "utf-8");              // 已修改【改为错误数据,以免信息泄露】  

            String pid = "pid="+ URLEncoder.encode("BLZXA150401111", "utf-8");             // 已修改【改为错误数据,以免信息泄露】  

            String departid = "departid="+ URLEncoder.encode("10007111", "utf-8");         // 已修改【改为错误数据,以免信息泄露】  

            String install_lock_name = "install_lock_name="+ URLEncoder.encode("南天大门", "utf-8");  

            String install_address = "install_address="+ URLEncoder.encode("北京育新", "utf-8");  

            String install_gps = "install_gps="+ URLEncoder.encode("116.350888,40.011001", "utf-8");  

            String install_work = "install_work="+ URLEncoder.encode("小李", "utf-8");  

            String install_telete = "install_telete="+ URLEncoder.encode("13000000000", "utf-8");  

            String intall_comm = "intall_comm="+ URLEncoder.encode("一切正常", "utf-8");  

              

            // 格式 parm = aaa=111bbb=222ccc=333ddd=444  

            String parm = app_key+ agt_num+ pid+ departid+ install_lock_name+ install_address+ install_gps+ install_work+ install_telete+ intall_comm;  

              

            // 将参数输出到连接  

            dataout.writeBytes(parm);  

              

            // 输出完成后刷新并关闭流  

            dataout.flush();  

            dataout.close(); // 重要且易忽略步骤 (关闭流,切记!)   

              

//            System.out.println(connection.getResponseCode());  

              

            // 连接发起请求,处理服务器响应  (从连接获取到输入流并包装为bufferedReader)  

            BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));   

            String line;  

            StringBuilder sb = new StringBuilder(); // 用来存储响应数据  

              

            // 循环读取流,若不到结尾处  

            while ((line = bf.readLine()) != null) {  

//                sb.append(bf.readLine());  

                sb.append(line).append(System.getProperty("line.separator"));  

            }  

            bf.close();    // 重要且易忽略步骤 (关闭流,切记!)   

            connection.disconnect(); // 销毁连接  

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

      

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

      

    public static void main(String[] args) {  

//        httpURLConectionGET();  

        httpURLConnectionPOST();  

    }  

}

java 怎么接收http请求

用servlet接收。

具体步骤是写一个类继承HttpServlet,如果是接收get请求就重写doGet(HttpServletRequest,HttpServletResponse),接收post就重写doPost(HttpServletRequest,HttpServletResponse),共同处理post和get就重写service(HttpServletRequest,HttpServletResponse)

其次在web.xml定义servlet标签,以及你这个servlet要处理的请求mapping

最后把项目部署在tomcat之类的web容器中即可。

如果使用框架的话就另当别论了,比如spring 的DispatcherServlet。当然你也可以自己写servlet。

java如何实现http长连接

通过轮询来实现长连接

轮询:隔一段时间访问服务器,服务器不管有没有新消息都立刻返回。

http长连接实现代码:

客户端:

package houlei.csdn.keepalive;

import java.io.IOException;

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.concurrent.ConcurrentHashMap;

/**

* C/S架构的客户端对象,持有该对象,可以随时向服务端发送消息。

* p

* 创建时间:2010-7-18 上午12:17:25

* @author HouLei

* @since 1.0

*/

public class Client {

/**

* 处理服务端发回的对象,可实现该接口。

*/

public static interface ObjectAction{

void doAction(Object obj,Client client);

}

public static final class DefaultObjectAction implements ObjectAction{

public void doAction(Object obj,Client client) {

System.out.println("处理:\t"+obj.toString());//诊断程序是否正常

}

}

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

String serverIp = "127.0.0.1";

int port = 65432;

Client client = new Client(serverIp,port);

client.start();

}

private String serverIp;

private int port;

private Socket socket;

private boolean running=false;

private long lastSendTime;

private ConcurrentHashMapClass, ObjectAction actionMapping = new ConcurrentHashMapClass,ObjectAction();

public Client(String serverIp, int port) {

this.serverIp=serverIp;this.port=port;

}

public void start() throws UnknownHostException, IOException {

if(running)return;

socket = new Socket(serverIp,port);

System.out.println("本地端口:"+socket.getLocalPort());

lastSendTime=System.currentTimeMillis();

running=true;

new Thread(new KeepAliveWatchDog()).start();

new Thread(new ReceiveWatchDog()).start();

}

public void stop(){

if(running)running=false;

}

/**

* 添加接收对象的处理对象。

* @param cls 待处理的对象,其所属的类。

* @param action 处理过程对象。

*/

public void addActionMap(ClassObject cls,ObjectAction action){

actionMapping.put(cls, action);

}

public void sendObject(Object obj) throws IOException {

ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());

oos.writeObject(obj);

System.out.println("发送:\t"+obj);

oos.flush();

}

class KeepAliveWatchDog implements Runnable{

long checkDelay = 10;

long keepAliveDelay = 2000;

public void run() {

while(running){

if(System.currentTimeMillis()-lastSendTimekeepAliveDelay){

try {

Client.this.sendObject(new KeepAlive());

} catch (IOException e) {

e.printStackTrace();

Client.this.stop();

}

lastSendTime = System.currentTimeMillis();

}else{

try {

Thread.sleep(checkDelay);

} catch (InterruptedException e) {

e.printStackTrace();

Client.this.stop();

}

}

}

}

}

class ReceiveWatchDog implements Runnable{

public void run() {

while(running){

try {

InputStream in = socket.getInputStream();

if(in.available()0){

ObjectInputStream ois = new ObjectInputStream(in);

Object obj = ois.readObject();

System.out.println("接收:\t"+obj);//接受数据

ObjectAction oa = actionMapping.get(obj.getClass());

oa = oa==null?new DefaultObjectAction():oa;

oa.doAction(obj, Client.this);

}else{

Thread.sleep(10);

}

} catch (Exception e) {

e.printStackTrace();

Client.this.stop();

}

}

}

}

}

服务端:

package houlei.csdn.keepalive;

import java.io.IOException;

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.concurrent.ConcurrentHashMap;

/**

* C/S架构的服务端对象。

* p

* 创建时间:2010-7-18 上午12:17:37

* @author HouLei

* @since 1.0

*/

public class Server {

/**

* 要处理客户端发来的对象,并返回一个对象,可实现该接口。

*/

public interface ObjectAction{

Object doAction(Object rev);

}

public static final class DefaultObjectAction implements ObjectAction{

public Object doAction(Object rev) {

System.out.println("处理并返回:"+rev);//确认长连接状况

return rev;

}

}

public static void main(String[] args) {

int port = 65432;

Server server = new Server(port);

server.start();

}

private int port;

private volatile boolean running=false;

private long receiveTimeDelay=3000;

private ConcurrentHashMapClass, ObjectAction actionMapping = new ConcurrentHashMapClass,ObjectAction();

private Thread connWatchDog;

public Server(int port) {

this.port = port;

}

public void start(){

if(running)return;

running=true;

connWatchDog = new Thread(new ConnWatchDog());

connWatchDog.start();

}

@SuppressWarnings("deprecation")

public void stop(){

if(running)running=false;

if(connWatchDog!=null)connWatchDog.stop();

}

public void addActionMap(ClassObject cls,ObjectAction action){

actionMapping.put(cls, action);

}

class ConnWatchDog implements Runnable{

public void run(){

try {

ServerSocket ss = new ServerSocket(port,5);

while(running){

Socket s = ss.accept();

new Thread(new SocketAction(s)).start();

}

} catch (IOException e) {

e.printStackTrace();

Server.this.stop();

}

}

}

class SocketAction implements Runnable{

Socket s;

boolean run=true;

long lastReceiveTime = System.currentTimeMillis();

public SocketAction(Socket s) {

this.s = s;

}

public void run() {

while(running run){

if(System.currentTimeMillis()-lastReceiveTimereceiveTimeDelay){

overThis();

}else{

try {

InputStream in = s.getInputStream();

if(in.available()0){

ObjectInputStream ois = new ObjectInputStream(in);

Object obj = ois.readObject();

lastReceiveTime = System.currentTimeMillis();

System.out.println("接收:\t"+obj);

ObjectAction oa = actionMapping.get(obj.getClass());

oa = oa==null?new DefaultObjectAction():oa;

Object out = oa.doAction(obj);

if(out!=null){

ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());

oos.writeObject(out);

oos.flush();

}

}else{

Thread.sleep(10);

}

} catch (Exception e) {

e.printStackTrace();

overThis();

}

}

}

}

private void overThis() {

if(run)run=false;

if(s!=null){

try {

s.close();

} catch (IOException e) {

e.printStackTrace();

}

}

System.out.println("关闭:"+s.getRemoteSocketAddress());//关闭长连接

}

}

}

长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的。

如果,长时间未发送维持连接包,服务端程序将断开连接。

java连接http的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java连接http的信息别忘了在本站进行查找喔。