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