Как выполнить код C ++ на стороне сервера с помощью сервера Tomcat? - PullRequest
3 голосов
/ 22 июня 2011

Я новичок в написании веб-приложений, поэтому, пожалуйста, сотрудничайте, если это глупый вопрос.Наше веб-приложение размещено на tomcat 6. У меня есть код C ++, который нужно выполнить на сервере, когда пользователь нажимает соответствующую кнопку.Клиентская часть написана на html / JS и размещена с использованием tomcat.

Итак, моя проблема в том, что я не знаю, как будет выполняться этот код C ++ при нажатии кнопки на html-странице.Может кто-нибудь помочь мне?
[обновлено]
Я могу перейти с tomcat на любой другой сервер, но код должен быть на С ++.Так что если у вас есть другой сервер (wamp или smthing) или ссылки, чтобы сделать то же самое.Пожалуйста, дайте мне знать

Ответы [ 3 ]

5 голосов
/ 22 июня 2011

Tomcat, контейнер сервлетов Java, определенно не является наиболее подходящим средством для выполнения кода C ++. Вы можете попытаться использовать JNI, чтобы сервлет выполнял код C ++, но мне кажется, что гораздо проще и надежнее, как старые добрые CGI. Tomcat может выполнять CGI, как объяснено здесь , с некоторыми ограничениями.

Обновление: я думаю, что мы можем согласиться, что путь CGI - путь. Большинство веб-серверов позволяют запускать cgi, и это определенно будет проще, чем с Tomcat. Я также предлагаю вам делегировать работу по подключению вашего кода к веб-серверу к библиотеке, например gnu cgicc (хороший учебник здесь ) или cgic . Простой старый WAMP (вы просто будете использовать здесь часть WA), и этот пример кода поможет вам быстро освоиться. В остальном будет довольно стандартная веб-разработка.

1 голос
/ 12 ноября 2013

Я не уверен, что какой-либо из этих ответов касался вопроса.Кодирование CGI с использованием C ++ будет означать чтение переменных среды, которые устанавливаются веб-сервером, независимо от того, используете ли вы стороннюю библиотеку или какой веб-сервер запущен, включая tomcat.Следующий пример - простой и быстрый способ получить наиболее интересный ввод - строку запроса.Если вы только начинаете, я думаю, что лучше начать с основ, поэтому, если вы решите использовать какую-то внешнюю библиотеку, это будет казаться менее мистическим.Это должно дать вам достаточно, чтобы нажать Google и понять, что происходит.

#include <stdlib.h>
#include <iostream>

using namespace std;

int
main(int argc, char** argv)
{
    string method = getenv("REQUEST_METHOD");
    string query;
    if (method == "GET")
        query = getenv("QUERY_STRING");
    else if (method == "POST")
        cin >> query;
    else
        query = "Not sure what to do with method " + method;

    cout << "Content-Type: text/html" << endl << endl
         << "<html>" << endl
         << query << endl
         << "</html>" << endl;
}

Примечание. Content-Type в выводе.Это заголовок HTTP.Вы можете добавить любое количество заголовков перед двойным концом.На мгновение попробуйте изменить Content-Type на text / plain.

Скомпилируйте пример кода в shiney_cpp_cgi, скопируйте его в каталог cgi (для tomcat это обычно tomcat_root / webapps / ROOT / WEB-INF / cgi), а затем нажмите его в своем браузере, чтобы использовать метод GET:

myserver.mydomain:myport/cgi-bin/shiney_cpp_cgi?foo=bar

Чтобы отправить запрос по почте, используйте CURL следующим образом:

curl --data 'foo=bar' myserver.mydomain:myport/cgi-bin/shiney_cpp_cgi

Для обслуживания C ++ изtomcat, вы можете отредактировать tomcat_root / conf / web.xml и изменить исполняемый файл на пустую строку.По умолчанию tomcat попытается запустить ваш C ++ как скрипт perl, который perl (надеюсь!) Не сможет проанализировать.

<servlet>
    <servlet-name>cgi</servlet-name>
    <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
    ...
    <init-param>
        <param-name>executable</param-name>
        <param-value></param-value>
    </init-param>
    ...
</servlet>
1 голос
/ 22 июня 2011

https://stackoverflow.com/questions/175507/c-c-web-server-library ответы могут вам помочь.

Учитывая, что Tomcat больше не требуется, использование другого внешнего интерфейса http может значительно облегчить вашу жизнь.

Если вы решите использовать Tomcat Какая библиотека C ++ для программирования CGI? может помочь вам выбрать библиотеку.

За исключением того, что если вы используете Apache, вы можете написать сам модуль плагина, а не CGI, что даст вам гораздо лучшую производительность. (Другие веб-серверы обычно имеют аналогичные методологии плагинов ...)

Удачи

...