url中的用户名,但是使用'/'跟踪上下文路径?

时间:2012-11-27 22:23:04

标签: url java-ee jquery url-rewriting urlencode

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

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

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

2 个答案:

答案 0 :(得分:1)

通常这是使用服务器上的url重写来实现的。对于IIS,这意味着创建web.config或在apache中创建.htaccess文件。您需要找到服务器的等效项,然后可以将目录结构类型/用户名/解析为应用程序的HTTP GET变量。

答案 1 :(得分:1)

如果我理解您的问题,您希望拥有一个Java EE网站,例如myrecruitingsite.com,您可以将用户重定向到myrecruitingsite.com/main/<username>。当向myrecruitingsite.com/main/arg21myrecruitingsite.com/main/geoffreywiseman发出请求时,您希望请求转到同一个servlet,并且您想知道请求了哪个用户名。

Java servlet映射不像许多现代Web框架那样直接支持复杂的路由模式。您无法将web.xml配置为从myrecruitingsite.com/main/<username>向用户配置文件servlet发送请求,并将myrecruitingsite.com/main/<username>/contact发送到联系servlet。您可以执行通配符映射,但之后的所有路由决策都必须在web.xml之外进行。

或者,您可以执行URL rewriting(通常使用servlet过滤器),以便浏览器请求的URL不是servlet映射层解释的最终URL。有这方面的框架,或者你可以自己做。

基本上,您需要使用通配符配置servlet mapping的url模式,然后查询getPathInfo()以找出通配符的其余部分。仅此一点非常简单。

如果您正在使用各种Java Web框架中的任何一个,那么将有用于路由的设施,并且很可能是一个前端控制器servlet,它可以满足您的需求。在这种情况下,您需要查看框架的文档以获取更多信息。

另一方面,如果你自己使用servlet(甚至是servlet + jsp),你可以只做一个通配符映射到单个servlet,当你向它添加更多功能时,它将变得越来越大或者更有可能的是,您需要开发自己的微框架,其中servlet充当Front Controller servlet并且路由工作并将所有后续工作委托给普通的旧Java对象(PO​​JO)。

举例来说,您的路由servlet可以维护url模式(可能在java正则表达式中指定)到您自己创建的对象之间的映射,这些对象模仿servlet接口或您自己创建的另一个接口。这样,您就有了一个servlet,它负责web.xml中绑定的路由决策,以及一个负责特定请求细节的小类网络。这是有效的,但这并不十分困难。