2012-07-01 96 views
0

我試圖將Jetty嵌入到處理草圖中。到目前爲止,我的工作是爲靜態文件(Sketch文件夾中的html目錄)提供服務。Jetty嵌入在Processing.org,靜態資產+ POST

我想用一個來自其中一個靜態頁面的用戶輸入對一個POST做出反應。

由於我對Jetty沒有任何認識,並且來自PHP & Ruby(RoR)網頁編程背景,所以我對Jetty中的事情非常困惑。

我只是想要一些類似於路線的東西,

"localhost:8080/post?string=whatever" 

是一個靜態文件。

post?string =任何應該可能觸發處理提交的字符串的函數(處理中)。

我一直在閱讀Jetty文檔很多,但目前無法弄清楚如何做到這一點。

非常感謝您的幫助!

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.ServletException; 
import java.io.IOException; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.Request; 
import org.eclipse.jetty.server.handler.AbstractHandler; 

String poststr; 

void setup() { 

    Server server = new Server(); 
    SelectChannelConnector connector = new SelectChannelConnector(); 
    connector.setPort(8080); 
    server.addConnector(connector); 

    ResourceHandler resource_handler = new ResourceHandler(); 
    resource_handler.setDirectoriesListed(true); 
    resource_handler.setWelcomeFiles(new String[] { 
    "index.html" 
    } 
); 

    resource_handler.setResourceBase(sketchPath("")+"pftf"); 

    HandlerList handlers = new HandlerList(); 
    handlers.setHandlers(new Handler[] { 
    resource_handler, new DefaultHandler() 
    } 
); 
    server.setHandler(handlers); 




    try { 
    server.start(); 
    server.join(); 
    } 
    catch(Exception e) { 
    }; 


} 

回答

3

是,碼頭可在一開始很混亂,尤其是當你只希望做一些簡單的事情(不一定是全面的Web應用程序)。

的鑰匙,使這項工作是使用ContextHandler中爲其他每個處理器(例如ResourceHandler)的。你可以告訴ContextHandler它應該響應哪個上下文(即URL)。製作ContextHandler中的ResourceHandler和自定義處理程序(例如PostHandler)之後,你必須把兩者在ContextHandlerCollectionUFF ...),讓您的服務器知道什麼情況下存在。

Jetty

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.ServletException; 
import java.io.IOException; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.Request; 
import org.eclipse.jetty.server.handler.AbstractHandler; 


void setup() { 
    /* Configure the http server */ 
    Server server = new Server(); 
    SelectChannelConnector connector = new SelectChannelConnector(); 
    connector.setPort(8080); 
    server.addConnector(connector); 

    /* Resources */ 
    ResourceHandler resourceHandler = new ResourceHandler(); 
    resourceHandler.setDirectoriesListed(true); 
    resourceHandler.setWelcomeFiles(new String[] { 
     "index.html" 
    } 
    ); 

    resourceHandler.setResourceBase(sketchPath("")+"pftf"); 
    ContextHandler resourceContext = new ContextHandler(); 
    resourceContext.setContextPath("/"); 
    resourceContext.setHandler(resourceHandler); 


    /* Post API */ 
    PostHandler postHandler = new PostHandler(); 
    ContextHandler postContext = new ContextHandler(); 
    postContext.setContextPath("/post"); 
    postContext.setHandler(postHandler); 

    ContextHandlerCollection contexts = new ContextHandlerCollection(); 
    contexts.setHandlers(new Handler[] { 
     resourceContext, postContext 
    } 
    ); 

    server.setHandler(contexts); 


    /* Start the server (finally) */ 

    try { 
     server.start(); 
     server.join(); 
    } 
    catch(Exception e) { 
     println("Could not start http server. Reason: " + e.toString()); 
    }; 
} 


void printCard(String mtext) { 
    println("Printing card with text: " + mtext); 
} 

PostHandler可能是這個樣子:

public class PostHandler extends AbstractHandler 
{ 
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
     response.setContentType("text/html;charset=utf-8"); 

     String stringParameter = request.getParameter("string"); 

     /* Check if the string parameter is there and not empty */ 
     if (stringParameter != null && !stringParameter.trim().equals("")) { 

      response.setStatus(HttpServletResponse.SC_OK); 
      baseRequest.setHandled(true); 
      response.getWriter().println("<h1>You sent me: " + stringParameter + "</h1>"); 

      println("Received a string via /post: " + stringParameter); 

      printCard(stringParameter); 
     } 
     else { 
      // Parameter is missing 
      response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 
      baseRequest.setHandled(true); 
      response.getWriter().println("<h1>Error: Missing string parameter</h1>"); 

      println("Missing string via /post."); 
     } 
    } 
}