如何根据URL名称动态地将URL映射到Java servlet处理程序?(Google App Engine)

Jom*_*asi 2 google-app-engine servlets url-routing java-server

我正在寻找的是我可以添加到Java类中的某种类或注释,这些类专用于处理特定请求,并且URL根据其名称映射到这些类.例如,将URL".../api/GetContactsRequest"映射到名为GetContactsRequest的处理程序(如果不存在此类处理程序,则为404).我知道我可以编写servlet并将每个URL映射到每个servlet,但我认为样板路由代码/配置越少越好!这些将主要是应用程序请求处理程序,使用JSON进行通信.我还没弄清楚我将如何处理静态请求,但我很可能只是向用户发送一个大型Web应用程序,导航自己或其他东西.

对于后台,我正在使用Google App Engine,因此我可以访问yaml配置及其servlet API.那么有一种标准的方法可以使用Java servlet API或Google App Engine特定的框架吗?我以前只使用过像Apache这样的特定Java servlet框架,这些框架都是在我开始编写它们时已经构建的,所以我真的不知道这个环境有什么用处.我对这一切也很陌生,并且无法浏览Servlet,服务,过滤器,监听器和处理程序,以及哪种最适合我想要/需要的简单路由行为.我担心我会选错了,或者甚至不知道哪一个能满足我的需求.

Pet*_*ego 5

这就是做什么JAX-RS- 不完全是类名映射,而是通过注释进行映射.查看一些功能.

有几个实现,我个人使用RESTEasy - 它在GAE上完美运行.另外我使用Jackson(自带RESTEasy)来生成JSON.

如果你需要生成html然后看一下htmleasy- 它是RESTEasy之上的一个薄层,可以使用不同的html模板库.它将帮助您将逻辑与表示分开.

编辑:

如果你真的想避免使用标准库并自己编写一些东西,那么编写一个servlet过滤器来检查请求并将其转发给你的servlet(或调用自定义代码):

public class ForwardFilter implements Filter {

    @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {

        if(request.getRequestURI().equals("/some/path")){
            request.getRequestDispatcher("/path/where/servlet/registered").forward(request, response);
            return; // prevents normal request processing

        }

        // you need this for normal request path
        filterChain.doFilter(request, response);
    }
}
Run Code Online (Sandbox Code Playgroud)