如果我理解您的问题,您希望拥有一个 Java EE 站点myrecruitingsite.com
,例如可以将用户重定向到myrecruitingsite.com/main/<username>
. 当向myrecruitingsite.com/main/arg21
或发出请求时myrecruitingsite.com/main/geoffreywiseman
,您希望请求转到同一个 servlet,并且您想知道请求了哪个用户名。
Java servlet 映射不像许多现代 Web 框架那样直接支持复杂的路由模式。您不能将 web.xml 配置为向myrecruitingsite.com/main/<username>
用户配置文件 servlet 和myrecruitingsite.com/main/<username>/contact
联系人 servlet 发送请求。您可以进行通配符映射,但之后的所有路由决策都必须在web.xml
.
或者,您可以进行URL 重写(通常使用 servlet 过滤器),以使浏览器请求的 URL 不是 servlet 映射层最终解释的 URL。有这方面的框架,或者你可以自己做。
基本上,您需要使用通配符配置servlet mapping的 url 模式,然后查询 getPathInfo()以找出通配符的其余部分是什么。仅此一项就很简单了。
如果您正在使用各种 Java Web 框架中的任何一个,那么将会有路由功能,并且很可能有一个前端控制器 servlet 可以满足您的需求。在这种情况下,您需要查看框架的文档以获取更多信息。
另一方面,如果您自己使用 servlet(甚至是 servlet + jsp),您可以只对单个 servlet 进行通配符映射,当您向其添加更多功能时,该 servlet 会变得越来越大,或者更多很可能,您需要开发自己的微框架,其中 servlet 充当前端控制器 servlet并执行路由工作并将所有后续工作委托给普通的旧 Java 对象 (POJO)。
例如,您的路由 servlet 可以维护 url 模式(可能在 java 正则表达式中指定)与您自己创建的对象之间的映射,这些对象要么模仿 servlet 接口,要么模仿您自己创建的另一个接口。这样,您就有了一个负责绑定在 web.xml 中的路由决策的 servlet,以及一个负责特定请求细节的小类网络。这是工作,但并不是非常困难。