Java 使用Jetty 9.4.1处理来自远程网站/Sigfox的POST请求

Java 使用Jetty 9.4.1处理来自远程网站/Sigfox的POST请求,java,eclipse,embedded-jetty,jetty-9,payload,Java,Eclipse,Embedded Jetty,Jetty 9,Payload,我对Jetty和Java网络还不熟悉,所以请接受我和我的初学者提出的问题 我想做的是处理Sigfox以应用程序/x-www-form-urlencoded格式发送的有效负载,即数据将以“device={device}&data={data}&time={time}”的形式出现 我已经了解到,我实际上可以对Java应用服务器进行Sigfox回调。如果我错了,请纠正我,但我认为servlet可以达到同样的目的? 这就是我决定将Jetty嵌入Java应用程序的原因(我使用的是最新的Jetty 9.4.

我对Jetty和Java网络还不熟悉,所以请接受我和我的初学者提出的问题

我想做的是处理Sigfox以应用程序/x-www-form-urlencoded格式发送的有效负载,即数据将以“device={device}&data={data}&time={time}”的形式出现

我已经了解到,我实际上可以对Java应用服务器进行Sigfox回调。如果我错了,请纠正我,但我认为servlet可以达到同样的目的? 这就是我决定将Jetty嵌入Java应用程序的原因(我使用的是最新的Jetty 9.4.1)

以下是我制作的这个程序:

import java.io.IOException;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入java.net.InetSocketAddress;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.servlet.ServletHandler;
公共类最小servlet
{
公共静态void main(字符串[]args)引发异常
{
//创建将在端口9081上侦听的基本jetty服务器对象。
//请注意,如果您将此设置为端口0,则将创建一个随机可用的端口
//将指定您可以在日志中查找端口,
//或者以编程方式获取它以在测试用例中使用。
服务器服务器=新服务器(新的InetSocketAddress(“MY_IP”,9081));
//ServletHandler是创建上下文处理程序的一种非常简单的方法
//它由一个Servlet实例支持。
//然后需要向服务器对象注册此处理程序。
ServletHandler=新的ServletHandler();
setHandler(handler);
//传入Servlet的类允许jetty实例化
//实例,并将其装载到给定的上下文路径上。
//重要:
//这是一个原始Servlet,而不是已配置的Servlet
//通过web.xml@WebServlet注释或任何类似内容。
handler.addServletWithMapping(HelloServlet.class,“/*”);
//开始吧!
server.start();
//使用server.join()将使当前线程连接并
//等待服务器执行完毕。
//看
// http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()
join();
}
@抑制警告(“串行”)
公共静态类HelloServlet扩展了HttpServlet
{
@凌驾
受保护的无效数据集(HttpServletRequest请求,
HttpServletResponse响应)抛出ServletException,
IOException
{
response.setContentType(“text/html”);
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(“HelloServlet的你好”);
//System.out.println(“\n已连接”);
//System.out.println(request.getParameter(“数据”));
}
@凌驾
受保护的void doPost(HttpServletRequest-req,HttpServletResponse-resp)引发ServletException,IOException
{
//获取POST参数
字符串val=req.getParameter(“数据”);
System.out.println(val);//打印'data'的值
//写一个回复
分别为setContentType(“文本/html”);
分别为setCharacterEncoding(“UTF-8”);
resp.setStatus(HttpServletResponse.SC_OK);//用“200”响应
resp.getWriter().printf(“数据=%s”,val);
}
}

}
除了没有从HttpServletRequest读取数据之外,其余的看起来相当正常。也许Jetty有一些日志输出告诉您发生了什么。@JoakimErdfelt运行此程序时,我在eclipse控制台上得到的唯一输出是:“2017-02-16 12:50:46.528:INFO::main:Logging在sign*7037ms处初始化到org.eclipse.jetty.util.log.StdErrLog 2017-02-16 12:50:47.891:INFO:oejs.Server:main:jetty-9.4.z-SNAPSHOT 2017-02-16 12:50:48.893:INFO:ojs.AbstractConnector:main:startedServerConnectorat sign*1f89fa3{HTTP/1.1,[HTTP/1.1]}{HOSTNAME.internal.local:9081}”2017-02-16 12:50:48.894:INFO:oejs.Server:main:Started*at sign*9587ms“如果我正确,doPost()方法应该是处理来自Sigfox的POST请求的方法,对吗?如果我注释掉doGet()方法,只剩下doPost(),那么我的URL上就会出现错误:“HTTP error 405 Problem accessing/。原因:此URL不支持HTTP方法GET“Sigfox是HTTPS重要吗?它仍然可以向我的HTTP服务器发送有效负载吗?这与我想做的类似,但不是json代码,只是普通的x-www-form-urlencoded。目前执行的是我的doGet而不是doPost。doGet还说请求来自“/favicon.io”"??? 我该如何解决这个问题?