【问题标题】:how to execute c++ code at server side using tomcat server?如何使用tomcat服务器在服务器端执行c++代码?
【发布时间】:2011-06-22 09:39:31
【问题描述】:

我是编写Web应用程序的初学者,所以如果这是一个愚蠢的问题,请合作。我们的 Web 应用程序使用 tomcat 6 托管。当用户单击相应的按钮时,我有一些 C++ 代码要在服务器中执行。客户端用 html/JS 编写并使用 tomcat 托管。

所以,我的问题是我不知道在 html 页面中单击按钮时如何执行此 C++ 代码。谁能帮帮我?
[更新]
我可以从 tomcat 更改为任何其他服务器,但代码必须在 c++ 中。因此,如果您有任何其他服务器(wamp 或 smthing)或链接来做同样的事情。请告诉我

【问题讨论】:

  • 您需要将您的 C++ 与某种 CGI 调用相关联,然后将您的 HTML 按钮与之相关联,但我不知道详细信息。

标签: c++ web-applications


【解决方案1】:

Tomcat,一个 Java Servlet 容器绝对不是执行 C++ 代码的最合适的工具。您可以尝试使用 JNI 让 servlet 运行 C++ 代码,但在我看来,有很多更简单可靠的方法,比如好的旧 CGI。正如here 解释的那样,Tomcat 可以做 CGI,但有一些限制和限制。

更新:我认为我们可以同意 CGI 路线是要走的路。大多数网络服务器都允许您运行 cgi,而且它肯定会比使用 Tomcat 更简单。我还建议您将代码连接到 Web 服务器的工作委托给一个库,例如 gnu cgicc(很好的教程 here)或 cgic。一个普通的旧 WAMP(您将在这里只使用 WA 部分),并且该示例代码应该可以让您立即加快速度。其余的将是非常标准的 Web 开发。

【讨论】:

  • 那么我应该使用哪个服务器来执行 c++ 代码(wamp 或 smthing)。我可以更改服务器,但代码必须在 c++ 中
【解决方案2】:

https://stackoverflow.com/questions/175507/c-c-web-server-library 的答案可能会对您有所帮助。

鉴于不再需要 Tomcat,使用不同的 http 前端可能会让您的生活更轻松。

如果您决定使用 Tomcat,Which C++ Library for CGI Programming? 可能会帮助您选择一个库。

除此之外,如果您使用 Apache,您可以自己编写插件模块,而不是 CGI,这将为您提供更好的性能。 (其他网络服务器通常也有类似的插件方法......)

祝你好运

【讨论】:

    【解决方案3】:

    我不确定这些答案是否解决了这个问题。使用 C++ 编写 CGI 意味着读取由 Web 服务器设置的环境变量,无论您是否使用第三方库或运行哪个 Web 服务器,包括 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;
    }
    

    注意输出中的内容类型。那是一个 HTTP 标头。您可以在双 endl 之前添加任意数量的标题。暂时尝试将 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
    

    要发送 post 请求,请使用 CURL:

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

    要从 tomcat 提供 C++,您可以编辑 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      相关资源
      最近更新 更多