根据QueryString [JSP / Servlet]更改URL

时间:2012-02-19 14:43:27

标签: jsp url servlets mapping query-string

如果问题措辞不当,我道歉......我不太确定如何去问。

我将如何根据查询字符串更改URL,例如:

如果有人点击链接获取一些可爱的胡萝卜,而不是URL为foo.com/product.jsp?id=2,那就是foo.com/product/some-lovely-carrots。

我尝试将映射添加到web.xml,但我认为我没有采用正确的方法。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

这称为“漂亮网址”或“友情网址”。基本上,您需要创建一个过滤器或前端控制器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);
    }
}

将此过滤器映射到/*的网址格式,并按如下所示更改链接

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