You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jetty中处理带自定义路径后缀的HTTP请求?

处理Jetty中根路径后带任意文本的请求

在Jetty中处理这类http://域名/任意文本的请求,有几种直接可行的方案,下面给出具体实现:

方案一:使用Servlet通配符映射

通过ServletContextHandler挂载一个匹配所有路径的Servlet,就能捕获所有根路径下的请求:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RootPathHandler {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/"); // 设置根上下文
        server.setHandler(context);
        
        // 添加自定义Servlet,匹配所有路径
        context.addServlet(new ServletHolder(new HttpServlet() {
            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
                // 获取根路径后的文本,比如请求"/stackoverflowIsBest"时,getPathInfo()返回"/stackoverflowIsBest"
                String pathText = req.getPathInfo();
                if (pathText == null) {
                    pathText = ""; // 处理直接访问根域名的情况
                }
                
                // 这里写你的业务逻辑,比如返回处理结果
                resp.setContentType("text/plain");
                resp.getWriter().write("收到的路径文本:" + pathText.substring(1)); // 去掉开头的斜杠
            }
        }), "/*");
        
        server.start();
        server.join();
    }
}

方案二:使用自定义ContextHandler

如果想用ContextHandler直接处理,也可以设置其上下文路径为"/",并自定义Handler处理请求:

import org.eclipse.jetty.server.*;
import org.eclipse.jetty.util.Callback;

public class CustomContextHandler {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        
        ContextHandler context = new ContextHandler("/"); // 根上下文
        context.setHandler(new Handler.Abstract() {
            @Override
            public boolean handle(Request request, Response response, Callback callback) throws Exception {
                // 获取请求URI的路径部分
                String path = request.getUri().getPath();
                String text = path.isEmpty() ? "" : path.substring(1); // 去掉开头的斜杠
                
                // 处理请求并返回结果
                response.setContentType("text/plain;charset=utf-8");
                response.getWriter().write("处理的文本内容:" + text);
                callback.succeeded();
                return true;
            }
        });
        
        server.setHandler(context);
        server.start();
        server.join();
    }
}

这两种方案都能捕获所有http://域名/任意文本格式的请求,你可以根据业务需求选择合适的方式。如果需要更复杂的路由规则,也可以结合Jetty的RewriteHandler扩展,但对于这种简单场景,上面的方案足够高效。

内容的提问来源于stack exchange,提问作者Denis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:28