将/ newyork映射到/area.jsp?id=1的最佳方法是什么?

时间:2010-10-23 05:35:24

标签: java nginx

我正在使用

http://example.com/area.jsp?id=1

并希望创建一个映射路径

http://example.com/newyork

映射到/area.jsp?id=1

我该如何做到最好?

注意:我正在使用Resin(java)+ Nginx

3 个答案:

答案 0 :(得分:2)

使用nginx的重写模块将该URL映射到area.jsp?id = 1 URL

http://wiki.nginx.org/NginxHttpRewriteModule

答案 1 :(得分:1)

这是我的想法,当您收到类似的请求时,在您的Web应用程序中创建一个过滤器 /area.jsp?id=1doFilter方法,将请求转发给http://example.com/newyork

web.xml

<filter>
    <filter-name>RedirectFilter</filter-name>
    <filter-class>
        com.filters.RedirectFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>RedirectFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

编写以下课程并将其放在WEB-INF/classses

class RedirectFilter implements Filter 
{
public void doFilter(ServletRequest request, 
                     ServletResponse response, 
                     FilterChain chain)
    throws IOException, ServletException
{


      String scheme = req.getScheme(); // http 
      String serverName = req.getServerName(); // example.com 
      int serverPort = req.getServerPort(); // 80 
      String contextPath = req.getContextPath(); // /mywebapp 
      String servletPath = req.getServletPath(); // /servlet/MyServlet 
      String pathInfo = req.getPathInfo(); // area.jsp?id=1 
      String queryString = req.getQueryString(); 
      if (pathInfo.IndexOf("area.jsp") > 1) 
      {
          pathInfo   = "/newyork"; 
          String url = scheme+"://"+serverName+contextPath+pathInfo; 
          filterConfig.getServletContext().getRequestDispatcher(login_page).
          forward(request, response);
     } else
     {
        chain.doFilter(request, response);
        return;
     }
}
}

答案 2 :(得分:0)

在存储这些区域ID的数据库中,添加一个名为“slug”的列,并使用您要使用的名称填充该列。 id 1的“slug”将是“newyork”。现在,当其中一个URL发出请求时,请按“slug”而不是id来查找行。