Jetty嵌入Processing.org,静态资产+;邮递

Jetty嵌入Processing.org,静态资产+;邮递,jetty,processing,embedded-jetty,Jetty,Processing,Embedded Jetty,我正在尝试将Jetty嵌入到一个处理草图中。到目前为止,我使它能够服务于静态文件(草图文件夹中的html目录) 我想用一个静态页面的用户输入对一篇文章做出反应 由于我对Jetty一无所知,并且来自PHP&Ruby(RoR)web编程背景,我对Jetty的工作方式感到非常困惑 我只是想要一些类似路线的东西,除了 "localhost:8080/post?string=whatever" 是一个静态文件 post?string=任何可能触发函数(正在处理中)的内容,在该函数中处理提交的字符串 我已

我正在尝试将Jetty嵌入到一个处理草图中。到目前为止,我使它能够服务于静态文件(草图文件夹中的html目录)

我想用一个静态页面的用户输入对一篇文章做出反应

由于我对Jetty一无所知,并且来自PHP&Ruby(RoR)web编程背景,我对Jetty的工作方式感到非常困惑

我只是想要一些类似路线的东西,除了

"localhost:8080/post?string=whatever"
是一个静态文件

post?string=任何可能触发函数(正在处理中)的内容,在该函数中处理提交的字符串

我已经阅读了很多Jetty文档,但到目前为止还不知道怎么做

非常感谢您的帮助

import javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.ServletException;
导入java.io.IOException;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.Request;
导入org.eclipse.jetty.server.handler.AbstractHandler;
字符串poststr;
无效设置(){
服务器=新服务器();
SelectChannelConnector=new SelectChannelConnector();
连接器。设置端口(8080);
addConnector(连接器);
ResourceHandler resource_handler=新的ResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(新字符串[]{
“index.html”
}
);
resource_handler.setResourceBase(sketchPath(“”+“pftf”);
HandlerList handlers=new HandlerList();
setHandlers(新处理程序[]{
资源处理程序,新的DefaultHandler()
}
);
setHandler(处理程序);
试一试{
server.start();
join();
} 
捕获(例外e){
};
}

是的,Jetty一开始可能会非常混乱,特别是当您只想做一些简单的事情(不一定是成熟的web应用程序)时

这项工作的关键是为每个其他处理程序(例如ResourceHandler)使用ContextHandler。您可以告诉ContextHandler它应该响应哪个上下文(即URL)。为ResourceHandler和自定义处理程序(例如PostHandler)创建ContextHandler后,必须将两者都放入ContextHandlerCollection(uff…)中,以便服务器知道存在哪些上下文

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.");
        }
    }
}
公共类PostHandler扩展了AbstractHandler
{
公共无效句柄(字符串目标、请求baseRequest、HttpServletRequest、HttpServletResponse响应)引发IOException、ServletException{
setContentType(“text/html;charset=utf-8”);
String stringParameter=request.getParameter(“字符串”);
/*检查字符串参数是否存在且不为空*/
如果(stringParameter!=null&&!stringParameter.trim()等于(“”){
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println(“您发送给我:“+stringParameter+”);
println(“通过/post:+stringParameter接收到字符串);
打印卡(stringParameter);
} 
否则{
//缺少参数
response.setStatus(HttpServletResponse.SC_BAD_请求);
baseRequest.setHandled(true);
response.getWriter().println(“错误:缺少字符串参数”);
println(“通过/post缺少字符串”);
}
}
}

是的,Jetty一开始可能会非常混乱,特别是当您只想做一些简单的事情(不一定是成熟的web应用程序)时

这项工作的关键是为每个其他处理程序(例如ResourceHandler)使用ContextHandler。您可以告诉ContextHandler它应该响应哪个上下文(即URL)。为ResourceHandler和自定义处理程序(例如PostHandler)创建ContextHandler后,必须将两者都放入ContextHandlerCollection(uff…)中,以便服务器知道存在哪些上下文

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.");
        }
    }
}
公共类PostHandler扩展了AbstractHandler
{
公共无效句柄(字符串目标、请求baseRequest、HttpServletRequest、HttpServletResponse响应)引发IOException、ServletException{
setContentType(“text/html;charset=utf-8”);
String stringParameter=request.getParameter(“字符串”);
/*检查字符串参数是否存在且不为空*/
如果(stringParameter!=null&&!stringParameter.trim()等于(“”){
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println(“您发送给我:“+stringParameter+”);
println(“通过/post:+stringParameter接收到字符串);
打印卡(stringParameter);
} 
否则{
//缺少参数
response.setStatus(HttpServletResponse.SC_BAD_请求);
baseRequest.setHandled(true);
response.getWriter().println(“错误:缺少字符串参数”);
println(“通过/post缺少字符串”);
}
}
}