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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
2017-08-31 springboot使用过滤器和拦截器