0

我正在使用Servlets在Java EE中开发在线招聘系统,我想通过使用'/'将用户名添加到上下文路径来为每个用户提供自己唯一的 url 。

简单地说,我想将我的 url 从/main重写为/main/username,这样当人们登录时,他们可以在地址栏中看到他们的用户名(就像在 stackoverflow 或 facebook 上一样)。

例如。目前我正在使用Jquery Ajax重定向到"/main?username="+username (工作正常),但我想重定向到/main/username。我尝试了encodeURL 方法,但 '/' 使搜索进入子目录。如果有人认为它应该工作,请给我语法。我已经在web.xml中完成了 url 映射。(例如,signin.jsp 映射到登录uri)

4

2 回答 2

1

Usually this is achieved using url rewrites on the server. For IIS that means creating a web.config or in apache creating a .htaccess file. You'll need to find the equivalent for your server and it can then be made to parse the directory structure type /username/ into a HTTP GET variable for your application.

于 2012-11-27T22:28:00.350 回答
1

如果我理解您的问题,您希望拥有一个 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,以及一个负责特定请求细节的小类网络。这是工作,但并不是非常困难。

于 2012-11-27T22:33:36.037 回答