Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet和树莓皮IO_Java_Tomcat_Servlets_Io_Raspberry Pi2 - Fatal编程技术网

Java servlet和树莓皮IO

Java servlet和树莓皮IO,java,tomcat,servlets,io,raspberry-pi2,Java,Tomcat,Servlets,Io,Raspberry Pi2,我正在尝试学习如何编写简单的servlet来与Raspberry Pi一起使用。 我想通过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.pi4

我正在尝试学习如何编写简单的servlet来与Raspberry Pi一起使用。 我想通过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();
  }
package com.luca.servlet;
导入com.pi4j.io.gpio.GpioController;
导入com.pi4j.io.gpio.gpio工厂;
导入com.pi4j.io.gpio.gpiopingitaloutput;
导入com.pi4j.io.gpio.RaspiPin;
导入com.pi4j.io.gpio.PinState;
公共类MyServlet扩展了javax.servlet.http.HttpServlet{
私有GpioController gpio=GpioFactory.getInstance();
private gpiopingitaloutput redLed=gpio.provisionDigitalOutputPin(RaspiPin.gpio_23,PinState.LOW);
private gpiopingitaloutput greenLed=gpio.provisionDigitalOutputPin(RaspiPin.gpio_22,PinState.LOW);
私有gpiopingitaloutput blueLed=gpio.provisionDigitalOutputPin(RaspiPin.gpio_21,PinState.LOW);
私有GPIOPIIndigitaLoutput[]引脚=新GPIOPIIndigitaLoutput[]{redLed、greenLed、blueLed};
@凌驾
public void doGet(javax.servlet.http.HttpServletRequest请求,javax.servlet.http.HttpServletResponse响应)抛出java.io.IOException{
java.io.PrintWriter print=response.getWriter();
打印。写入(““+
“选择一种颜色!

”+ ""+ ""+ ""+ ""+ ""+ ""+ ""+ ""+ ""+ ""); } public void doPost(javax.servlet.http.HttpServletRequest请求,javax.servlet.http.HttpServletResponse响应)抛出java.io.IOException{ java.io.PrintWriter pw=response.getWriter(); String act=request.getParameter(“按钮”); 开关(act){ 案例“红色”: togglePin(); 红色。高(); pw.写入(“led为红色!

”; 打破 案例“绿色”: togglePin(); 绿色。高(); pw.写入(“led为绿色”

”; 打破 案例“蓝色”: togglePin(); 蓝色。高(); pw.写入(“led为蓝色!

”); 打破 } } 私有void togglePin(){ 用于(GPIOPIIndigitaLoutput引脚:引脚) if(pin.isHigh())pin.toggle(); }
它编译得很好,我在tomcat中手动部署了它,并使用部署描述符和其他所有工具。 但当我连接时,它告诉我资源不可用。 如果我删除与GPIO相关的代码,它就可以正常工作


有人能帮我一下吗?谷歌搜索似乎没有什么帮助

你需要设置一个Url模式,以便访问你的servlet方法,如POSTGET

例如,使用:

@WebServlet("/raspberryServelt")
public class MyServlet extends javax.servlet.http.HttpServlet {
...
然后访问执行POSTGET请求的servlet方法

例如,进行一次访问:

本地主机:8080/yourWebAppName/raspberryServelt


将工作…

您必须在项目中放置路径WEB-INF/lib中的pi4j库

当tomcat启动时,您是否看到日志?启动时可能有一些错误…。当我使用它在本地闪烁led时,它工作”-这确切地说是什么意思?当您从客户端Java应用程序测试库时,它工作(使用公共静态void main())?这听起来好像你没有加载GPIO代码所在的库。这个链接指向Ubuntu,但它可能会为你指明正确的方向。从catalina.log发布输出将帮助我们诊断这个问题。@DaveH是的,这很正确!我忘了在lib文件夹中添加Pi4J JAR。如果它能与GPIO代码一起工作,那真是愚蠢:D删除,这不太可能是映射问题吗?我将servlet映射到web.xml文件中。这不是映射问题