CGI Support on Jetty

459 views
Skip to first unread message

Renato Riolino

unread,
Oct 22, 2014, 10:04:53 AM10/22/14
to ope...@googlegroups.com
Hi guys,

This is not a question specific to Openhab, but as have zero experience with Java I'll ask here anyway:

What I want to do is to execute some CGIs on Jetty.  I want to embed some audio/video players controls on OH interface thru a web page that will be generated via a CGI I'll build.

As I said, I have zero experience with Java but I am very confortable with C/C++ (that's why I prefer to make a CGI and not use PHP or Java).

I found on the internet a java "plugin" called "org.mortbay.jetty-5.1.9.jar".  I have putted it in my OPENHAB/server/plugins folder and changed my OPENHAB/etc/webdefault.xml adding the following:

  <servlet>
    <servlet-name>CGI</servlet-name>
    <servlet-class>org.mortbay.servlet.CGI</servlet-class>
    <init-param>
      <param-name>cgibinResourceBase</param-name>
      <param-value>/opt/openhab/webapps/admin/cgi-bin</param-value>
    </init-param>
  </servlet>

  <servlet-mapping><servlet-name>CGI</servlet-name><url-pattern>/admin/cgi-bin/*</url-pattern></servlet-mapping>

Then, I created a folder admin inside OPENHAB/webapps and another folder "cgi-bin" inside OPENHAB/webapps/admin

After restarting OH, the CGI plugin is not found. Log output:

10:29:50.510 WARN  o.eclipse.jetty.servlet.Holder[:98]-
java.lang.ClassNotFoundException: org.mortbay.servlet.CGI
        at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
        at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:424)
10:29:50.531 WARN  admin[:1957]- unavailable
javax.servlet.UnavailableException: org.mortbay.servlet.CGI
        at org.eclipse.jetty.servlet.Holder.doStart(Holder.java:99)
        at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:291)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:778)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)


Anyone could give some help with this??

Thanks

Renato

Renato Riolino

unread,
Oct 28, 2014, 1:03:26 PM10/28/14
to ope...@googlegroups.com
Hi!! I'm still trying to enable CGI on Jetty.

I found that Jetty already have a CGI servlet:

unzip -t /opt/openhab/server/plugins/org.eclipse.jetty.servlets_8.1.3.v20120522.jar | grep CGI

gave me this output:

    testing: org/eclipse/jetty/servlets/CGI$EnvList.class   OK
    testing: org/eclipse/jetty/servlets/CGI$1.class   OK
    testing: org/eclipse/jetty/servlets/CGI.class   OK


But how do I enable cgi on webdefault.xml?

I tried this:

  <servlet>
    <servlet-name>CGI</servlet-name>
    <servlet-class>org.eclipse.jetty.servlet.CGI</servlet-class>
    <load-on-startup>1</load-on-startup>

  </servlet>
 
  <servlet-mapping>
    <servlet-name>CGI</servlet-name>
    <url-pattern>/admin/cgi-bin/*</url-pattern>
  </servlet-mapping>


But when trying to start OH it reports it couldnt find org.eclipse.jetty.servlet.CGI

java.lang.ClassNotFoundException: org.eclipse.jetty.servlet.CGI
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:415)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377)

What I'm missing??

Thanks

Renato
Reply all
Reply to author
Forward
0 new messages