Изменить URL в зависимости от QueryString [JSP / Servlet] - PullRequest
0 голосов
/ 19 февраля 2012

Я прошу прощения, если вопрос сформулирован плохо ... Я не совсем уверен, как поступить с вопросом.

Как мне изменить URL-адрес в зависимости от строки запроса, например:

Если кто-то нажмет на ссылку для какой-нибудь симпатичной моркови, вместо URL-адреса foo.com/product.jsp?id=2 это будет foo.com/product/some-lovely-carrots.

Я пытался добавить сопоставление в web.xml, но я не думаю, что я поступаю правильно.

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 19 февраля 2012

Это называется "красивый URL" или "дружественный URL".По сути, вам нужно создать фильтр или сервлет фронт-контроллера для достижения этой цели.Предполагая, что вы идете в направлении фильтра, он будет выглядеть примерно так:

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>
...