2013-02-23 74 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。