jetty启动(server-connector-handle-start-join)

复制代码
import java.io.File;
import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.NCSARequestLog;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.HandlerWrapper;
import org.eclipse.jetty.server.handler.RequestLogHandler;

public class ManyHandlers {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);

        // create the handlers
        Handler param = new ParamHandler();
        Handler testHandler = new TestHandler();
        HandlerWrapper wrapper = new HandlerWrapper() {
            @Override
            public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
                request.setAttribute("welcome", "Wylazy");
                super.handle(target, baseRequest, request, response);
            }
        };

        Handler hello = new HelloHandler();
        wrapper.setHandler(hello);
        Handler dft = new DefaultHandler();

//HandlerList会依次调用每一个Handler,直到某个Handler将请求标记为已处理,即setHandled(true);
        HandlerList list = new HandlerList();
        list.setHandlers(new Handler[]{testHandler, param, wrapper, dft});
        server.setHandler(list);

        RequestLogHandler log = new RequestLogHandler();
        log.setRequestLog(new NCSARequestLog(File.createTempFile("demo", "log").getAbsolutePath()));

        //HandlerCollection会依次调用每一个Handler,即使请求已经被处理了
//      HandlerCollection handlers = new HandlerCollection();
//      handlers.setHandlers(new Handler[] { list, log });
//      server.setHandler(handlers);

        server.start();
        server.join();
    }

    public static class ParamHandler extends AbstractHandler {
        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException {
            Map params = request.getParameterMap();
            if (params.size() > 0) {
                response.setContentType("text/plain");
                response.getWriter().println(params);
                baseRequest.setHandled(true);
            }
            //如果不设置该属性,则还会进入下一个handler
//          baseRequest.setHandled(true);
        }
    }
    public static class TestHandler extends AbstractHandler {

        @Override
        public void handle(String s, Request request, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException {
            String requestURI = httpServletRequest.getRequestURI();
            System.out.println(requestURI);
            if (requestURI.contains("/test")) {
                httpServletResponse.setContentType("application/json");
                httpServletResponse.setCharacterEncoding("utf-8");
                httpServletResponse.getWriter().println("测试成功");
                request.setHandled(true);
            }
        }
    }
    public static class HelloHandler extends AbstractHandler {
        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException {
            response.setContentType("text/html;charset=utf-8");
            response.setStatus(HttpServletResponse.SC_OK);
            baseRequest.setHandled(true);
            response.getWriter().println("<h1>Hello World1</h1>");
            response.getWriter().println("Request url: " + target);
        }
    }

}

最后访问localhost:8080
复制代码

 

posted @   奋小斗g  阅读(323)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
历史上的今天:
2017-08-31 springboot使用过滤器和拦截器
点击右上角即可分享
微信分享提示