嵌入式码头:获取 post 个参数

embedded jetty: get post parameters

我正在使用这样的嵌入式码头:

    Server server = new Server(7498);

    URL url = Main.class.getClassLoader().getResource("html");

    URI webRootUri = null;
    try {
        webRootUri = url.toURI();
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    ServletContextHandler context = new ServletContextHandler(
            ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    try {
        context.setBaseResource(Resource.newResource(webRootUri));
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    context.setWelcomeFiles(new String[] { "index.html" });

    ServletHolder holderPwd = new ServletHolder("default",
            DefaultServlet.class);
    holderPwd.setInitParameter("cacheControl", "max-age=0,public");
    holderPwd.setInitParameter("useFileMappedBuffer", "false");
    holderPwd.setInitParameter("dirAllowed", "true");
    context.addServlet(holderPwd, "/");

    server.setHandler(context);

    try {
        server.start();
        //            server.dump(System.err);
    } catch (Exception e1) {
        e1.printStackTrace();
    }

我。 e.我指向 src/main/resources 文件夹中的静态资源。

我现在如何处理 post 参数?我正在发出 ajax post 请求。

我知道我的 ServletContextHandler 有一个 handle 方法。我是否需要创建自己的 class 来扩展 ServletContextHandler

您使用的是 ServletContextHandler,一种常见的设置。

  1. 为自己创建一个新的HttpServlet
  2. 将其添加到您想要的(servlet)url-模式下的ServletContextHandler
  3. 让它覆盖 .doPost() 方法
  4. 读取 POST 请求的请求参数
  5. 相应地处理它们
  6. 产生响应

从您的 main() 到您的 ServletContextHandler ...

的第 2 步更改是什么样的
context.addServlet(MyPostServlet.class, "/api");

MyPostServlet.java 可能看起来像这样

public class MyPostServlet extends HttpServlet
{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        // Get POST parameters
        String val = req.getParameter("foo");
        // Do something with 'foo'
        String result = backend.setValue("foo", val);
        // Write a response
        resp.setContentType("text/plain");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().printf("foo = %s (result: %s)%n",val,result);
    }
}