将 /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 或过滤器的主要内容,如果未能解决你的问题,请参考以下文章