Java Servlets 和 Raspberry Pi IO

标签 java tomcat servlets io raspberry-pi2

我正在尝试学习如何编写与 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 方法,例如 POSTGET .

例如使用:

@WebServlet("/raspberryServelt")
public class MyServlet extends javax.servlet.http.HttpServlet {
...

然后访问执行 POSTGET 请求的 servlet 方法...

例如获取:

localhost:8080/yourWebAppName/raspberryServelt

会工作...

关于Java Servlets 和 Raspberry Pi IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34159237/

相关文章:

java - 为什么 mathGPA 不能正常工作?

tomcat - 从源码目录读取静态资源

java - 无法找出 NoClassDefFoundError : aspose/pdf/Paragraph 的原因

java - 由于长时间运行的连接而阻塞线程?

java - Tomcat 上不存在包 javax.servlet

java - Kotlin Array 的 toList 和 asList 有何不同?

java - SimpleDateFormat.parse() 将 DTstring 转换为本地时间。可以转换为源时间吗?

java - 在 Java 中使用 Joda 查找两个日期之间的差异

java - JSP - 如何首先转发到 View ,然后在后台继续处理方法?

java - Servlet 过滤器不工作