将 /xxx/yyy/zzz 动态映射到类 XxxYyyZzz.java 的 servlet 或过滤器

Posted

技术标签:

【中文标题】将 /xxx/yyy/zzz 动态映射到类 XxxYyyZzz.java 的 servlet 或过滤器【英文标题】:A servlet or filter that dynamically maps /xxx/yyy/zzz to class XxxYyyZzz.java 【发布时间】:2011-06-14 19:38:46 【问题描述】:

我想编写一个 servlet 或过滤器,自动将 url /xxx/yyy/zzz 映射到类 XxxYyyZzz.java。

例如,以下 URL 将映射到以下 java 类:

/comment/add --> CommentAdd.java
/comment/delete --> CommentDelete.java
/comment/view --> CommentView.java
/search --> Search.java
/viewposts --> Viewposts.java

此外,servlet 或过滤器必须符合两个额外的要求:

    servlet 或过滤器应该有一个“/*”的 servlet 映射,我不想要一个带有多个 servlet“/comment/*”、“/search”等的前缀。

    可能很难,但是拥有 /* 的 servlet 映射不应允许它覆盖 JSP 处理。意思是,如果没有找到一个类,它应该检查一个jsp页面是否存在并运行它。

我想知道如何使用 Servlet API 来做到这一点。请不要向我推荐任何可以完成这项工作的框架。给我看看代码。

映射到的类将遵循命令模式或可能是 HttpServlet 的子类。在这两种情况下,都应该存在类似“execute(HttpServletRequest request, and HttpServletResponse response)”的方法。一旦访问 URL 并且可能使用单个 servlet 或过滤器找出 java 类,此方法将自动执行。

【问题讨论】:

相关:***.com/questions/3541077/… 【参考方案1】:

您可以使用Stripes framework 及其默认NameBasedActionResolver config。

【讨论】:

【参考方案2】:

我不确定,如果我明白你的意思。如果我这样做了:

你不需要什么特别的,写一个映射到“/”的 Servlet,这样它就可以得到一切。解析 PATH_INFO(现在不知道它在 Java 中是如何调用的),使用 Class.forName(或使用预填充的 Map),然后调用其方法执行。

【讨论】:

HttpServletRequest#getPathInfo(),是的。 是的,但我需要 servlet 的 web.xml 配置以及它将如何处理将未映射的类路由到 JSP 页面。 目前,您的答案是正确的,但我仍然需要将 servlet 映射到 /* 并且仍然能够处理 JSP。我将在另一个问题中提出这个问题。【参考方案3】:

这是一个http://www.tuckey.org/urlrewrite/ 过滤器实现,可能会对您有所帮助。看看这个。不过我自己没用过。

【讨论】:

以上是关于将 /xxx/yyy/zzz 动态映射到类 XxxYyyZzz.java 的 servlet 或过滤器的主要内容,如果未能解决你的问题,请参考以下文章

c# 动态创建带字符串拼接的lambda表达式?

Ubuntu系统挂载iso作为本地源

如何用c实现http post json

Charles Web 调试代理重写不起作用

如何通过 Retrofit 解析带有未知键的 json?

Flask.4