i see 3 ways: filter, basic servlet(all requests via main servlet) or "servlet-mapping"
filter
This example rewrite url 
http://example.org/<int value>
 to 
http://example.org/user?id=<int value>
i.e
http://example.org/1234 -> http://example.org/user?id=1234
- determinate filter in web.xml
<filter>
    <filter-name>Router</filter-name>
    <filter-class>org.example.Router</filter-class>
    <init-param>
        <param-name>param1</param-name>
        <param-value>valueOfparam1</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>Router</filter-name>
    <url-pattern>/*</url-pattern> 
</filter-mapping>
in init-param section you can specify route rules
- filter class - public class Router implements javax.servlet.Filter {
private static final Pattern REWRITE_PATTERN = Pattern.compile("(^[1-9]\\d*)$");
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException {
//this method calling before controller(servlet), every request
    HttpServletRequest request = (HttpServletRequest) req;
    String url = request.getRequestURL().toString();
    String number = url.substring(url.lastIndexOf("/")).replace("/", "");
    Matcher m = REWRITE_PATTERN.matcher(number);
    if(m.find()) {
        RequestDispatcher dispatcher = request.getRequestDispatcher("user?id=" + m.group(1));
        dispatcher.forward(req, res);
    } else {
        fc.doFilter(req, res);
    }
}
@Override
public void init(FilterConfig fc) throws ServletException {
    //here you may read params from web.xml
}}
 
basic sevlet
public class BasicServlet extends HttpServlet {
   //route rules here, and rewrite
}
servlet-mapping
<servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <uri-mapping>/user/*</uri-mapping>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>PostServlet</servlet-name>
    <uri-mapping>/post/*</uri-mapping>
</servlet-mapping>
- filter - more flexible and not require serious modify working code
- basic servlet - flexible, require change you code
- servlet mapping - simply, not flexible(for specific route rules)