2012-07-01 2 views
0

Я пытаюсь вставить Jetty в обработчик эскиза. До сих пор я работал, чтобы обслуживать статические файлы (каталог html в папке Sketch).Jetty embed in 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

Да, Причал может быть очень запутанным в начале, особенно если вы только хотите, чтобы сделать несколько простых вещей (не обязательно полноценными веб-приложений).

Ключ к созданию этой работы заключается в использовании ContextHandler для каждого из других обработчиков (например ResourceHandler). Вы можете указать ContextHandler, какой контекст (например, URL) должен отвечать. После создания ContextHandler для ResourceHandler и пользовательский обработчик (например PostHandler) вы должны поставить как в ContextHandlerCollection (уфф ...), так что ваш сервер знает, что существуют контексты.

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."); 
     } 
    } 
} 
Смежные вопросы