【问题标题】:Configuring java webapp to transfer data via http using curl command使用 curl 命令配置 java webapp 以通过 http 传输数据
【发布时间】:2016-07-20 23:43:20
【问题描述】:

我目前在 tomcat 8 上运行一个 webapp,并希望在终端屏幕上显示接收某个发布请求的输出而不呈现网页。例如,我希望使用类似于以下的命令:

curl -d "param1=xxx&param2=yyy" localhost:8080/webapp

并获得类似于此的(简短)响应:

"some data here"

如果我在浏览器中点击 URL,我不想获取将呈现的网页的 HTML。有什么办法可以在Tomcat中完成吗?

【问题讨论】:

    标签: java tomcat curl


    【解决方案1】:

    AFAIK 响应内容由 Web 应用程序(servlet、JSP 或其他)在 Tomcat 中生成。您可能应该创建这样一个 web 应用程序,它只会输出没有标签和其他 html 内容的文本,例如 f.e.在 tomcat webapps 根目录(通常是 tomcat_root\webapps\ROOT)中创建一个 index.jsp 文件,其中包含以下内容(是的,只有一小行):

    <%="some data here"%>

    您将通过此请求获得原始数据,但无论如何这将是一个 HTTP 响应。如果您打算在较低级别(例如 TCP)处理这些数据,您将从服务器获得额外数据,例如标头值等。

    此外,如果您的客户端软件关心它,您可能必须关心设置正确的标题作为响应,例如:ContentType: text/plain。或者直接跳过它:无论如何,您将获得独立于内容类型标题值的原始文本内容。

    【讨论】:

    • 很棒的答案。我确实制作了那个 webapp,并且目前正在使用该 webapp 中的一个 servlet 来回答“get”。但是,当我尝试向服务器发送请求时,不会调用我的 servlet 类中的 'doGet()' 和 'doPost()' 方法。我能做些什么来解决这个问题?
    • @AWidget 您能否分享您的示例代码以查看它并在需要时进行更正?如果您使用 servlet 而不是 JSP(JSP 实际上由 servlet 容器编译为类文件),则必须将编译后的类放在 tomcat_root/webapps/ROOT/**WEB-INF/classes** 中,或者如果您有 jar - 到 tomcat_root/webapps/ROOT/**WEB-INF/lib**。此外,您可能必须正确设置您的 Web 应用程序描述符(文件 web.xml),请参见此处:mkyong.com/servlet/a-simple-servlet-example-write-deploy-run
    • OK - 这是带有 web.xml 的类。我正在使用 eclipse 并且我验证这确实是 webapp 的部署方式(在 WEB-INF/classes 中的类)。我也尝试将应用程序移动到“ROOT”目录,但无济于事:当我启动服务器时,构造函数(我可以看到打印行)但请求处理程序被忽略。
    • Servlet 类:linkweb.xml:link
    【解决方案2】:

    您必须指定请求是 POST 请求

    $ curl -i -X POST  -d "param1=xxx&param2=yyy" localhost:8080/webapp
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多