两个java工程之间的相互调用方法

如果你有两个java项目的话,如何向他们之间进行信息的通信
前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径。
其实两个java项目之间的通信还是使用HTTP的请求。主要有两种方式:
①使用apache的HttpClient方式。
②使用JDK自带的java.net包下的HttpURLConnection方式。

这次主要讲解HttpURLConnection方式:
HttpURLConnection传递请求常用的有两种方式:POST和GET方式。使用setRequestMethod()方法设置传递的方式。
①、使用POST的方式传递请求:
第一个应用(发送Http请求的服务端):
在com.servlet下创建一个Servlet_test1.java文件

package com.servlet;  
  
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.net.HttpURLConnection;  
import java.net.URL;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class Servlet_test1 extends HttpServlet {  
  
  
    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        //设置请求的编码方式  
        request.setCharacterEncoding("utf-8");  
        //设置返回时的编码方式  
        response.setContentType("text/html;charset=utf-8");  
        System.out.println("test1");  
        //设置HTTP连接的URL地址,就是第二个应用的URL。如果不在同一个计算机上可以将127.0.0.1变成相应的IP地址
        String http="http://127.0.0.1:8080/test2/Setvlet_test2";  
        URL url=new URL(http);  
        //生成HttpURLConnection连接  
        HttpURLConnection httpurlconnection=(HttpURLConnection) url.openConnection();  
        //设置有输出流,默认为false,就是不能传递参数。  
        httpurlconnection.setDoOutput(true);  
        //设置发送请求的方式。注意:一定要大写  
        httpurlconnection.setRequestMethod("POST");  
        //设置连接超时的时间。不过不设置,在网络异常的情况下,可能会造成程序僵死而无法继续向下执行,所以一般设置一个超时时间。单位为毫秒  
        httpurlconnection.setConnectTimeout(30000);  
        //设置输出流。  
        OutputStreamWriter writer=new OutputStreamWriter(httpurlconnection.getOutputStream(), "utf-8");  
        //传递的参数,中间使用&符号分割。  
        writer.write("username=123&password=456");  
        //用于刷新缓冲流。因为默认她会写入到内存的缓冲流中,到一定的数据量时,才会写入,使用这个命令可以让他立即写入,不然下面就到关闭流了  
        writer.flush();  
        //用于关闭输出流,关闭之后就不可以输出数据了,所以要使用flush刷新缓冲流  
        writer.close();  
        //获得返回的请求吗。  
        int responseCode=httpurlconnection.getResponseCode();  
        //表示请求成功  
        if(responseCode==HttpURLConnection.HTTP_OK){  
            System.out.println("OK"+responseCode);  
            //获得服务端的输出流。得到返回的数据  
            InputStream urlstream=httpurlconnection.getInputStream();  
            BufferedReader reader=new BufferedReader(new InputStreamReader(urlstream));  
            String line;  
            String tline="";  
            while((line=reader.readLine())!=null){  
                tline+=line;  
            }  
            //输出所有的数据  
            System.out.println(tline);  
        }else{  
            System.out.println("ERR"+responseCode);  
        }  
          
          
    }  
      
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        this.doGet(request, response);  
    }  
  
}  
在test1项目中的web.xml文件中的配置servlet:
<servlet>  
   <servlet-name>Servlet_test1</servlet-name>  
   <servlet-class>com.servlet.Servlet_test1</servlet-class>  
 </servlet>  
  
 <servlet-mapping>  
   <servlet-name>Servlet_test1</servlet-name>  
   <url-pattern>/Servlet_test1</url-pattern>  
 </servlet-mapping>

在服务端的代码(接收HTTP请求方)
在test2项目下创建一个com.servlet包下的Servlet_test2.java文件
package com.servlet;  
  
import java.io.IOException;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class Setvlet_test2 extends HttpServlet {  
  
      
    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        request.setCharacterEncoding("utf-8");  
        response.setContentType("text/html;charset=utf-8");  
        System.out.println("test2");  
        System.out.println(request.getParameter("username"));  
        System.out.println(request.getParameter("password"));  
        //获得发送HTTP请求的参数  
        String username=request.getParameter("username");  
        String password=request.getParameter("password");  
        //向HTTP发送方返回响应数据  
        if("123".equals(username)&&"456".equals(password)){  
            response.getWriter().write("{\"falg\":\"success\"}");  
        }else{  
            response.getWriter().write("{\"falg\":\"error\"}");  
        }  
          
    }  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        this.doGet(request, response);  
    }  
  
}  
在test2项目的web.xml文件中的配置如下:
<servlet>  
  <servlet-name>Setvlet_test2</servlet-name>  
  <servlet-class>com.servlet.Setvlet_test2</servlet-class>  
</servlet>  
  
<servlet-mapping>  
  <servlet-name>Setvlet_test2</servlet-name>  
  <url-pattern>/Setvlet_test2</url-pattern>  
</servlet-mapping>

在地址栏中输入http://localhost:8080/test1/Servlet_test1。
就会输出:
test1
test2
123
456
OK200
{"falg":"success"}

以下要注意几点内容:
1.发送请求默认是GET方式.
2.在发送方中,outputStream必须在inptstream之前。否则就会抛出异常
3.一个HTTP请求包括两个部分:一个是报文头信息,一个是正文。

原文地址:https://www.cnblogs.com/qinjf/p/8179236.html

时间: 2024-07-29 17:23:59

两个java工程之间的相互调用方法的相关文章

JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯

分布式开发的历史 利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.NET与JAVA开发当中,对Remote远程对象早已有着足够的支持(对Remote远程对象调用有兴趣的朋友欢迎参考一下利用远程对象实现分布式开发). 从2003年开始.NET当中就盛传着.NET Remoting远程对象调用的分布式开发,.NET Remoting主要用于管理跨应用程序域的同步和异步RPC 会话.在默认情况下,Remoting可以使用 HTTP 或 TCP 协议进行信息通讯,

JAVA与.NET的相互调用——通过Web服务实现相互调用

JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧.在这里在下向各位介绍一下,JAVA与.NET相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 在这章里面先为大家介绍一下最简单,最常用的Web服务相互调用方式.首先

.Net 与 Java 的服务接口相互调用

本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说一下Web服务的来源,Web服务是一种新的Web应用程序分支,可以执行从简单的请求到复杂商务处理等任何功能.一旦部署以后,其他Web服务应用程序可以发现并调用它部署的服务. Web Service是一种应用程序,它可以使用标准的互联网协议,像超文件传输协议(HTTP).简单对象访问协议(SOAP).

两个java项目之间的通讯

两个Java项目,他们之间进行信息的通信 前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径. 其实两个java项目之间的通信还是使用HTTP的请求.主要有两种方式: ①使用apache的HttpClient方式. ②使用JDK自带的java.NET包下的HttpURLConnection方式. HttpURLConnection方式: HttpURLConnection传递请求常用的有两种方式:POST和GET方式.使用setRequestMethod()方法设置传递

内部类和外部类之间的相互调用

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 一般内部类在外部类的成员变量位置,像这样: 1 public class Outer { 2 class Inner{ 3 4 } 5 } 1.外部类访问内部类: 内部类被static修饰:可以直接new Inner in = new Inner(); 内部类没有被static修饰:得先new出来外部类的实例,再new内部类的 Inner in = new Outer().new Inner(

别名现象,java对象之间的相互赋值

请看一下代码 import java.util.*; class book{ static  int c = null; } public static void main(String[] args){ Book book1 = new book(); Book book2 = new book(); book1.c = 6; book2.c = 4; book1 = book2; } 以上,当book1和book2两个对象之间相互赋值的时候,那么当我们调用Book.c的时候,我们就会发现bo

关于cocos2d-x 和安卓之间的相互调用

近期在研究cocos2d游戏移植安卓须要调用非常多方法.所以在研究之中写下它们之间相互调用 首先,cocos2d调用安卓 在一个.h文件里加入头文件 #include <jni.h> #include "platform\android\jni\JniHelper.h" JniMethodInfo minfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 bool isHave = JniHelper:

uLua学习笔记(三):Unity3D和Lua之间的相互调用

这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方法还是比较简单的,所以先说这个,由于这部分在学习笔记(一)中已经说的挺多的了,更多的内容点击这里回去看,所以这里我们就来看一个简单的示例即可: 1 using LuaInterface; 2 using UnityEngine; 3 4 public class UnityCallLua : Mon

Iframe父页面与子页面之间的相互调用

iframe元素就是文档中的文档. window对象: 浏览器会在其打开一个HTML文档时创建一个对应的window对象.但是,如果一个文档定义了一个或者多个框架(即:包含一个或者多个frame或者iframe标签),浏览器就会为原始文档创建一个window对象,再为每个iframe创建额外的window对象,这些额外的window对象是原始窗口的子窗口. contentWindow: 是指指定的iframe或者iframe所在的window对象 Demo1 父页面fu.html: <!DOCT