Como request.getPathInfo () no método de serviço retorna nulo?

Escrevi Front Controller Pattern e executei o teste. De alguma forma, request.getPathInfo () está retornando nulo quando deve retornar as informações do caminho.

1. HTML que chama servlet

<a href="tmp.do">Test link to invoke cool servlet</a>

2. Mapeie o servlet no DD.
Qualquer coisa que tenha extensão .do (ex tmp.do) invocará o servlet "Redirecionador"

<!-- SERVLET (centralized entry point) -->
    <servlet>
        <servlet-name>RedirectHandler</servlet-name>
        <servlet-class>com.masatosan.redirector.Redirector</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RedirectHandler</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

3. O servlet que recebe a solicitação de * .do

 public class Redirector extends HttpServlet {

        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                //test - THIS RETURNS NULL!!!!
                System.out.println(request.getPathInfo());

                Action action = ActionFactory.getAction(request); //return action object based on request URL path
                String view = action.execute(request, response); //action returns String (filename) 
                if(view.equals(request.getPathInfo().substring(1))) {
                    request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);
                }
                else {
                    response.sendRedirect(view);
                }
            }
            catch(Exception e) {
                throw new ServletException("Failed in service layer (ActionFactory)", e);
            }
        }
    }//end class

O problema é que request.getPathInfo () retorna nulo. Baseado no livro Head First,

O ciclo de vida do servlet passa de"does not exist" estado para"initialized" estado (significando pronto para atender à solicitação do cliente) começando com seu construtor. O init () sempre é concluído antes da primeira chamada para service ().

Isso me diz que, em algum lugar entre o construtor e o método init (), o servlet não é totalmente crescido.

Portanto, quando o método service () é chamado, o servlet deve ser totalmente crescido e o método request deve chamar getPathInfo () e esperar que o valor válido retorne em vez de nulo.

UDPATE

Muito interessante. (http://forums.sun.com/thread.jspa?threadID=657991)

(HttpServletRequest - getPathInfo ())

Se o URL for como abaixo:

http://www.myserver.com/mycontext/myservlet/hello/test?paramName=value.

Se você descrever o web.xml, o padrão do servlet como / mycontext / * getPathInfo () retornará myservlet / hello / test e getQueryString () retornará paramName = value

(HttpServletRequest - getServletPath ())

Se o URL for como abaixo:

http://hostname.com:80/mywebapp/servlet/MyServlet/a/b;c=123?d=789

String servletPath = req.getServletPath ();

Retorna "/ servlet / MyServlet"

Esta página também é muito boa:http://www.exampledepot.com/egs/javax.servlet/GetReqUrl.html

questionAnswers(2)

yourAnswerToTheQuestion