2012-02-19 68 views
0

如果問題措辭不當,我很抱歉......我不太確定如何去詢問。根據查詢字符串更改URL [JSP/Servlet]

我怎麼會去改變取決於查詢字符串的URL,例如:

如果有人點擊網址,而不是被foo.com/product.jsp?id=一個鏈接,一些可愛的胡蘿蔔, 2它將是foo.com/product/some-lovely-carrots。

我嘗試添加映射到web.xml,但我認爲我沒有正確的方式。

任何幫助,將不勝感激。

回答

0

這被稱爲「漂亮的URL」或「友好的URL」。基本上,你需要創建一個過濾器或者一個前端控制器servlet來完成這項工作。假設你去過濾方向,它會看起來像如下:

private Map<String, String> mapping; 

@Override 
public void init() { 
    mapping = new HashMap<String, String>(); 
    mapping.put("/product/some-lovely-carrots", "/product.jsp?id=2"); 
    // ... 

    // You can of course also fill this map based on some XML config file or 
    // even a database table. 
} 

@Override 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    String path = request.getRequestURI().substring(request.getContextPath().length()); 
    String target = mapping.get(path); 

    if (target != null) { 
     req.getRequestDispatcher(target).forward(req, res); 
    } else { 
     chain.doFilter(req, res); 
    } 
} 

地圖這個過濾器上的/*的URL模式,改變鏈接如下

<a href="${pageContext.request.contextPath}/product/some-lovely-carrots">Some lovely carrots</a>