我正在尝试学习如何编写与 Raspberry Pi 一起使用的简单 servlet。 我想通过 web 控制板 I/O。我正在使用 Pi4J 库,它是 WiringPi C 库的包装器。当我用它在本地闪烁 LED 时它起作用,所以我假设我做错了什么编码我的 servlet。
这是我写的代码:
package com.luca.servlet;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.PinState;
public class MyServlet extends javax.servlet.http.HttpServlet {
private GpioController gpio=GpioFactory.getInstance();
private GpioPinDigitalOutput redLed=gpio.provisionDigitalOutputPin(RaspiPin.GPIO_23,PinState.LOW);
private GpioPinDigitalOutput greenLed=gpio.provisionDigitalOutputPin(RaspiPin.GPIO_22,PinState.LOW);
private GpioPinDigitalOutput blueLed=gpio.provisionDigitalOutputPin(RaspiPin.GPIO_21,PinState.LOW);
private GpioPinDigitalOutput[] pins=new GpioPinDigitalOutput[]{redLed,greenLed,blueLed};
@Override
public void doGet(javax.servlet.http.HttpServletRequest request,javax.servlet.http.HttpServletResponse response) throws java.io.IOException {
java.io.PrintWriter print=response.getWriter();
print.write("<body>"+
"<p> Choose a color! </p>"+
"<form action=\"first\" method=\"POST\">"+
"<input type=\"submit\" name=\"button\" value=\"red\"/>"+
"</form>"+
"<form action=\"first\" method=\"POST\">"+
"<input type=\"submit\" name=\"button\" value=\"green\"/>"+
"</form>"+
"<form action=\"first\" method=\"POST\">"+
"<input type=\"submit\" name=\"button\" value=\"blue\"/>"+
"</form>"+
"</body>");
}
public void doPost(javax.servlet.http.HttpServletRequest request,javax.servlet.http.HttpServletResponse response) throws java.io.IOException {
java.io.PrintWriter pw=response.getWriter();
String act=request.getParameter("button");
switch(act) {
case "red":
togglePin();
redLed.high();
pw.write("<p>the led is red!</p>");
break;
case "green":
togglePin();
greenLed.high();
pw.write("<p>the led is green</p>");
break;
case "blue":
togglePin();
blueLed.high();
pw.write("<p>the led is blue!</p>");
break;
}
}
private void togglePin() {
for (GpioPinDigitalOutput pin : pins)
if (pin.isHigh()) pin.toggle();
}
它编译得很好,我用部署描述符和所有东西手动将它部署到 tomcat 中。 但是当我连接时它告诉我资源不可用。 如果我删除与 GPIO 相关的代码,它就可以正常工作。
有人可以帮帮我吗?谷歌搜索似乎没有帮助
最佳答案
您需要设置一个 Url Pattern 以访问您的 servlet 方法,例如 POST 和 GET .
例如使用:
@WebServlet("/raspberryServelt")
public class MyServlet extends javax.servlet.http.HttpServlet {
...
然后访问执行 POST 或 GET 请求的 servlet 方法...
例如获取:
localhost:8080/yourWebAppName/raspberryServelt
会工作...
关于Java Servlets 和 Raspberry Pi IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34159237/