NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/Serv

Pessoal,

resolvido o erro do deploy que estava na estrutura de diretórios, agora pelo menos surgiu um erro do tomcat mais plausível. Em homologação funciona, mas em produção não (rs…foda né). Em produção a versão do tomcat é a 6.0.20 e em homologação é a 7.0.11. Olhem o erro aí, não achou o método, mas ele existe !!!

exception 
javax.servlet.ServletException: Servlet execution threw an exception

root cause 
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext;
	pkgusuario.ServletLogar.doGet(ServletLogar.java:39)
	pkgusuario.ServletLogar.doPost(ServletLogar.java:91)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Linha que está gerando o erro é a “request.getServletContext().getRealPath”:

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
  {
    Usuario objUsuario = new Usuario();
    
    // Cria a obrigatoriamente a sessão
    HttpSession objSessao = request.getSession(true);
    objSessao.setMaxInactiveInterval(600);
    
    String usuario = request.getParameter("usuario");
    String senha = request.getParameter("senha");
    
    RequestDispatcher rd  = null;
    DaoUsuario objDaoUsuario = null;

    objUsuario.setUsuario(usuario);
    objSessao.setAttribute("USER", objUsuario.getUsuario() );
    objUsuario.setSenha(senha);

    boolean logon_ok = false;
    try 
    {    
      objDaoUsuario = new DaoUsuario(request.getServletContext().getRealPath("db.properties")); // ERRO AQUI NO getRealPath
      logon_ok = objDaoUsuario.procuraUsuarioByLogon(objUsuario.getUsuario(), objUsuario.getSenha()) != null ? true : false; 

Alguém pode ajudar?

NoSuchMethodError = API desatualizada. Verifique a versão do servlet que tu estás usando. No próprio javadoc há um campo versão. Até onde me lembro o método getServletContext() surgiu só a partir do servlet 2.5.

Abraços,

Daniel

Olá,

Quando rodo na minha máquina local (Windows 7) esse não aparece. Porém, quando subo a aplicação (via .war) para um servidor Linux, o erro aparece. Acham que existe alguma relação entre o ambiente e o erro?

Grato,
Almir.

Caros,

Consegui reproduzir o erro. Na minha máquina eu estava usando o Tomcat 7.0.27. Então, baixei e instalei a versão 6.0.20 e o erro apareceu. Ou seja, é problema de (des)atualização de versão, mesmo.

Agora tenho duas alternativas:

  1. Solicitar a atualização de versão no provedor, o que geralmente não é fácil; ou,
  2. Mudar a linha de comando que eu estava usando: String caminhoAplicacao = httpServletRequest.getServletContext().getRealPath( “/” );

Sds,
Almir.