我试图嵌入了Jetty在处理草图。 到目前为止,我做这个工作为静态文件(在素描文件夹中的HTML目录)。
我想要一个POST与用户输入从静态页面的一个反应。
由于我没有知识的码头,并从PHP和Ruby的(回报率)的Web编程背景的人我很困惑的事情在码头的路要走。
我只是希望类似的路线这里的一切,除了如东西
"localhost:8080/post?string=whatever"
是一个静态文件。
其中,提交的字符串进行处理后?字符串=无论也许应该触发功能(在处理)。
我一直在读码头DOCS了很多,但无法弄清楚迄今为止如何做到这一点。
非常感谢您的帮助!
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) {
};
}
是的,码头可在一开始很混乱,尤其是当你只希望做一些简单的事情(不一定是全面的Web应用程序)。
以使这项工作的关键是使用ContextHandler中的每个其他处理(如ResourceHandler)的。 你可以告诉ContextHandler中的哪些方面(即网址),就应该回应。 制作ContextHandler中的ResourceHandler和自定义处理程序(如PostHandler)之后,你必须把两者在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.");
}
}
}