2013-02-23 27 views
1

我有一个网站,真的很糟糕地实施了虚荣URL模块和真正的高负载在一定的时间。由于url模块中存在一些错误,系统需要经常重启。所以,我想重写一个血腥的模块,使其更好,更少车...虚荣/花式/重写URL实现不吸收

是否有一个很好的模式来实现虚荣网址系统?

处理虚荣URL以获得高性能的最佳方法是什么?

什么是最好的图书馆来看看来源?

干杯。 赤穗

+0

你在用什么框架? – Javier 2013-02-23 13:01:37

+0

OSGi兼容,家庭酿造框架 – Peter 2013-02-23 13:02:55

+0

您的意思是裸露的servlets? – Javier 2013-02-23 13:03:15

回答

1

我不知道你的应用程序的具体实施细则,但作为一般的素描时,我会写映射到的利益(也许/*)URL的空间Filter

这种Filter检查URL是否是看上一个,在这种情况下会forward请求中选取适当的资源(或者是URL调度员或命名的)。您需要保存传入init(FilterConfig)filterConfig.getServletContext()以创建请求调度程序。如果URL不是很花哨,那么过滤器将调用chain.doFilter(req, resp),然后提供非映射资源。

public class ExceptionFilter implements Filter { 
    private ServletContext servletContext; 

    public void destroy() {} 
    public void doFilter(ServletRequest req, 
         ServletResponse resp, 
         FilterChain chain) 
     throws IOException, ServletException {   
     String mapping = getMappingFor((HttpServletRequest)req); 
     if(mapping!=null) servletContext.getRequestDispatcher(mapping).forward(req,resp); 
     else chain.doFilter(req, resp); 
    } 

    public void init(FilterConfig filterConfig) throws ServletException { 
     this.servletContext = filterConfig.getServletContext(); 
    } 

    private String getMappingFor(HttpServletRequest req) {...} 

如何getMappingFor实现,取决于具体的应用,但它可能会打开一个数据库的连接,并要求URL /富/酒吧是否映射,返回映射的URL或null如果没有映射。如果映射已知不会更改,则可以缓存已检索的映射。

您可能会使用更详细的实现,例如根据给定的URL或来自数据库的信息设置一些请求属性,然后将请求转发给某个知道该怎么做的servlet。