java Web应用程序中的动态URL(如在rails中)

我是一个Ruby on Rails开发人员,用Java编写Web应用程序。 我试图实现类似于Rails中实现的东西。 在Rails中,当Users是Model并且1是特定用户的id时,可以使用localhost:8000\Users\1来调用链接。 我想在Java中得到同样的东西。

我在MVC类型设计中工作,我的JSP页面是视图,我的Servlet是控制器。 我创建了一个名为Users的servlet,它现在呈现users.jsp页面,我可以使用URL localhost:8000\projectName\Users访问该页面,我想将localhost:8000\projectName\Users\1路由到页面user.jsp而适当的Servlet将处理向页面发送正确的用户(id = 1)。

知道我怎么能做到这一点?

我在大学项目中这样做,不允许使用任何框架。 我也宁愿我可以编码而不是安装。

现在我可以使用URL localhost:8000 \ projectName \ Users访问该页面,我想将localhost:8000 \ projectName \ Users \ 1路由到页面user.jsp,而相应的Servlet将处理发送到页面的正确user(id = 1)。

简单。 将servlet映射到/Users/*的URL模式而不是/Users 。 然后,您可以获取路径信息(URL中的/Users 之后的部分,因此在您的示例中为/1 ),如下所示:

 String pathInfo = request.getPathInfo(); // ... 

您可以通常的方式转发到users.jsp

 Long id = Long.valueOf(pathInfo.substring(1)); User user = userService.find(id); request.setAttribute("user", user); request.getRequestDispatcher("/WEB-INF/users.jsp").forward(request, response); 

UrlRewriteFilter就像mod_rewrite,但是对于Tomcat。 您可以使用它来使您的URL对SEO友好。 您还可以使用Apache + mod_rewrite + Tomcat。

我会通过web.xml的servlet和servlet映射来尝试这个

  UserServlet com.example.UserServlet   UserServlet /Users   UserServlet /Users/*  

比在UserServlet尝试获取完整的URL并根据您的需要进行解析。 例:

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) { String url = reg.getRequestURL(); //... get last part after slash and parse it to your id } 

有关请求的更多文档以及如何检索其参数,请参阅http://download.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletRequest.html