Como importo a API javax.servlet no meu projeto Eclipse?

320

Eu quero desenvolver com Servlets no Eclipse, mas ele diz que o pacote javax.servletnão pode ser resolvido. Como posso adicionar um javax.servletpacote ao meu projeto Eclipse?

tom
fonte
estou tentando executar um servlet simples do tipo hello word, normalmente se eu quisesse criar uma interface gráfica, importaria java ...... swing. *; eu não consigo encontrar a importação certo para um servlet
tom

Respostas:

415

Verifique se você possui o Eclipse e o servidor certos

Verifique se você está usando pelo menos os desenvolvedores Eclipse IDE para Enterprise Java (com a Enterprise ). Ele contém ferramentas de desenvolvimento para criar projetos dinâmicos da web e integrar facilmente contêineres de servlet (essas ferramentas fazem parte da Web Tools Platform, WTP). Caso você já tenha o Eclipse IDE para Java (sem Enterprise) e tenha instalado manualmente alguns plugins relacionados, é provável que isso não tenha sido feito corretamente. É melhor jogar no lixo e pegar o verdadeiro Eclipse IDE for Enterprise Java one.

Você também precisa garantir que você já tenha um servletcontainer instalado em sua máquina que implemente pelo menos a mesma versão da API do Servlet que o servletcontainer no ambiente de produção, por exemplo, Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , etc. Geralmente, apenas baixar o arquivo ZIP e extraí-lo é suficiente. No caso do Tomcat, não faça o download do formato EXE, apenas para ambientes de produção baseados no Windows. Consulte também ao Várias portas (8005, 8080, 8009) exigidas pelo Tomcat Server no localhost já estão em uso .

Um servletcontainer é uma implementação concreta da API do Servlet. Observe que o download do Java EE SDK no Oracle.com basicamente contém o GlassFish. Portanto, se você já baixou o Java EE SDK, basicamente já possui o GlassFish. Observe também que, por exemplo, o GlassFish e o JBoss AS / WildFly são mais do que apenas um servletcontainer, eles também suportam JSF, EJB, JPA e todas as outras fantasias do Java EE. Consulte também ao O que exatamente é o Java EE?


Integrar o servidor no Eclipse e associá-lo ao Project

Depois de instalar o Eclipse para Enterprise Java e um servletcontainer em sua máquina, execute as seguintes etapas no Eclipse:

  1. Integrar servletcontainer no Eclipse

    uma. Via visualização Servidores

    • Abra a visualização Servidores na caixa inferior.

    • Clique com o botão direito do mouse e escolha Novo> Servidor .

    • Escolha a marca e a versão do servletcontainer apropriadas e passe pelo assistente.

      insira a descrição da imagem aqui

    b. Ou, através das preferências do Eclipse

    • Abra Janela> Preferências> Servidor> Ambientes de Tempo de Execução .

    • Você pode adicionar , editar e remover servidores aqui.

      insira a descrição da imagem aqui

  2. Associar servidor ao projeto

    uma. Em novo projeto

    • Abra o Project Navigator / Explorer no lado esquerdo.

    • Clique com o botão direito do mouse e escolha Novo> Projeto e, em seguida, no menu Web> Projeto Dinâmico da Web .

    • No assistente, defina o Target Runtime para o servidor integrado.

      insira a descrição da imagem aqui

    b. Ou, no projeto existente

    • Clique com o botão direito do mouse no projeto e escolha Propriedades .

    • Na seção Tempo de execução alvejado , selecione o servidor integrado.

      insira a descrição da imagem aqui

    De qualquer forma, o Eclipse automaticamente pegará as bibliotecas do contêiner de servlet no caminho de construção. Dessa forma, você poderá importar e usar a API do Servlet.


Nunca carregue arquivos JAR específicos do servidor

Em qualquer caso, você não precisa mexer na propriedade Build Path do projeto. Você deve, acima de tudo Nunca manualmente cópia / download / mover / incluem o específico servletcontainer-individual bibliotecas como servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, etc. Isso só levaria a portabilidade futuro, compatibilidade, classpath e facilidade de manutenção problemas, porque o seu webapp não iria funcionar quando é implementado em um servletcontainer de uma marca / versão diferente daquela de onde essas bibliotecas são originalmente obtidas.

Caso esteja usando o Maven, você precisa ter certeza absoluta de que as bibliotecas específicas do servidor de servlet que já são fornecidas pelo tempo de execução de destino estão marcadas como <scope>provided</scope>.

Aqui estão algumas exceções típicos que você pode obter quando você maca /WEB-INF/libou mesmo /JRE/lib, /JRE/lib/ext, etc com bibliotecas específicas-servletcontainer em uma tentativa de descuidado para corrigir os erros de compilação:

BalusC
fonte
4
@BalusC Se estou usando o Apache Ant para criar meu projeto, como incluo a pasta /lib(servlet-api.jar & jsp-api.jar) do contêiner de servlet dinamicamente? Ou que eu preciso para codificar o caminho para o / lib pasta como - <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>etc
Kaustav datta
1
@BalusC Por que os projetos maven criados com o arquétipo maven-archetype-webappnão incluem o JAR servlet-api como uma dependência? O projeto possui um index.jsp com erro de compilação. (Eclipse Luna id Constituição: 20140612-0600, JDK 8, m2eclipse)
arun
1
As servlet-apidependências do @arun são fornecidas pelos ambientes de tempo de execução do Servlet, como Tomcat, Wildfly, Glassfish, etc. Nunca inclua-o como parte do seu aplicativo, pois há uma boa possibilidade de ele colidir com o ambiente.
asgs 23/09/15
@BalusC, 1) O javax.servlet-api-3.1.0.jar é igual a tomcat8 / lib / servlet-api.jar? Eu descompilei os dois jarros e, em seguida, acho que a maioria das classes / interfaces é a mesma. 2) O javax.servlet-api-3.1.0.jar é neutro em contêiner (não bibliotecas específicas do servletcontainer)?
Gfan #
@gfan: o problema técnico não é se as bibliotecas fornecidas por contêiner são "neutras em contêineres", mas precedem e ordenam o carregamento de classes. Se as bibliotecas fornecidas pelo contêiner forem carregadas pelo carregador de classe errado (por exemplo, via webapp classloader), as coisas podem estragar, mesmo que seja "coincidentemente" exatamente a mesma versão. Apenas não forneça bibliotecas fornecidas por contêiner de locais duplicados fora do contêiner. Período.
BalusC
220

importar javax.servlet

PASSO 1

Vá para as propriedades do seu projeto (com Alt+ Enterou clique com o botão direito do mouse)

PASSO 2

verifique no Apache Tomcat v7.0 em Targeted Runtime e ele funciona.

prayagupd
fonte
2
Me ajudou a adicionar meu tempo de execução JBOSS. Minha lista estava vazia.
span
2
Esta foi a solução para mim. Eu configurei o tomcat 6.0 como meu ambiente de implantação (como um servidor no eclipse), mas não o especifiquei como meu ambiente de tempo de execução ... Acho que isso significa que ele poderá encontrar os .jars na minha pasta tomcat / lib em tempo de execução, mas não no tempo de compilação.
Paul
Obrigado! Mas como posso excluir cópias de servidores MU? Eu tenho o Apache Tomcat v7.0 (2) e (3) que quero excluir. Alguém sabe como?
Robben
Não me ajudou a resolver o problema com The import javax.servlet cannot be resolved .
precisa saber é o seguinte
1
Isso funciona! Obrigado, @mrgloom, você pode remover o servidor e criar um novo servidor no seu host local
Freddie Fabregas
81

Pouca diferença em relação a Hari:

Clique com o botão direito do mouse em projeto ---> Propriedades ---> Caminho de Construção Java ---> Adicionar Biblioteca ... ---> Server Runtime ---> Apache Tomcat ----> Concluir.

ivanLam
fonte
3
Olá ivanLam, o Apache Tomcat não está aparecendo após o Server Runtime? O que fazer agora!
Sandeep Pattanaik
15

Inclua servlet-api.jar da pasta lib do servidor.insira a descrição da imagem aqui

Faça este passo

insira a descrição da imagem aqui

sarath
fonte
1
A solução não está funcionando para mim ainda está recebendo o erro abaixo. Um contêiner filho falhou durante o início java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: falha ao iniciar o componente [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ messenger]]
Maya Mohite 25/03
13

Adicione a dependência do javax.servlet no pom.xml. Seu problema será resolvido.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
Zeeshan Akhter
fonte
12

Correção Rápida - Funcionou no Eclipse - Clique com o botão direito do mouse em projeto -> Propriedades -> Caminho de Construção Java (Guia) -> Adicionar JARs Externos -> localize a implementação do servlet api jar (se Tomcat - nomeado servlet-api.jar) -> Clique OK. É isso aí !!

Hari Gudigundla
fonte
14
Com referência ao acima BalusC pós copiar Nunca manualmente / download / mover / incluir as bibliotecas específicas-servletcontainer individuais, como servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, etc. Seria só levar a portabilidade futuro, compatibilidade, classpath e problemas de manutenção.
Aniket Kulkarni
5

você pode simplesmente copiar servlet-api.jare copiar os arquivos jar na pasta lib, que está no WEB-INF. depois limpe e construa seu projeto, seus erros serão resolvidos.

  **OR**

você pode adicionar diretamente arquivos jar à biblioteca usando as etapas a seguir.

  1. Clique com o botão direito do mouse no projeto.
  2. Vá para Propriedades.
  3. Vá para o Java Build Path.
  4. Selecione a opção Adicionar biblioteca nas guias.
  5. Adicionar arquivos jar
  6. dê o caminho do seu servlet-api.jar arquivo.
  7. Limpe e construa seu projeto.
Mitul Maheshwari
fonte
Downvoting, com referência acima BalusC post e comentário Aniket Kulkarni, copiar Nunca manualmente / download / mover / incluir as bibliotecas específicas-servletcontainer individuais, como servlet-api.jar, jsp-api.jar, javaee.jar, etc. Isso só levaria a portabilidade futuro, compatibilidade, classpath e facilidade de manutenção problemas.
el-teedee
5

Eu sei que este é um post antigo. No entanto, observei outra instância em que no projeto o Tomcat já foi adicionado, mas ainda recebemos esse erro. Isso foi resolvido para:
Alt + Enter
Facets do projeto
À direita, ao lado dos detalhes, há outra guia "Runtimes". O servidor tomcat instalado será listado lá. Selecione.
Salve a configuração e CONCLUÍDO!

Espero que isso ajude alguém.

KNP
fonte
3

Da wikipedia .

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                "Transitional//EN\">\n" +
                "<html>\n" +
                "<head><title>Hello WWW</title></head>\n" +
                "<body>\n" +
                "<h1>Hello WWW</h1>\n" +
                "</body></html>");
  }
}

Obviamente, isso funcionará apenas se você tiver adicionado o servlet-api.jarcaminho de construção ao Eclipse. Normalmente, seu servidor de aplicativos (por exemplo, Tomcat ) terá o arquivo jar correto.

Juha Syrjälä
fonte
3

Para projetos maven, adicione a seguinte dependência:

<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

Referência

Para projetos gradle:

dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}

ou faça o download javax.servlet.jare adicione ao seu projeto.

Joby Wilson Mathews
fonte
2

Eu estava recebendo uma exceção de ponteiro nulo durante a criação do projeto, relacionada ao "Dynamic Web Module".

Para que o projeto seja compilado (ou seja, para javax.servletimportar com sucesso), tive que ir às Propriedades do projeto , escolher Facetas do Projeto na barra lateral, marque o Dynamic Web Module e clique em Aplicar .

Surpreendentemente, desta vez, a faceta "Dynamic Web Module" foi instalada corretamente e a importação começou a funcionar.

Ivan Vučica
fonte
2

No meu caso, quando eu fui aos tempos de execução segmentados , o Tomcat 7 não estava listado (desativado) apesar de estar instalado.

Para corrigir, tive que ir para Preferências-> Servidor-> Ambientes de Tempo de Execução , desinstalar e reinstalar o Tomcat 7.

Paul LeBeau
fonte
2

Muitos de nós desenvolvemos no Eclipse através de um projeto Maven. Nesse caso, você pode incluir dependências do Tomcat no Maven através dos jars tomcat-servlet-apie tomcat-jsp-api. Existe um para cada versão do Tomcat. Geralmente, adicioná-los com escopo providedao seu POM é suficiente. Isso manterá sua compilação mais portátil.

Se você atualizar o Tomcat no futuro, simplesmente atualize a versão desses jars.

Erica Kane
fonte
0

Acima de tudo, você nunca deve copiar / baixar / mover / incluir manualmente as bibliotecas individuais específicas do servletcontainer, como servlet-api.jar

@BalusC,

Eu preferiria usar as classes exatas que meu aplicativo usará, em vez de uma fornecida pelo Eclipse (quando estou me sentindo um desenvolvedor paranóico).

Outra solução seria usar o Eclipse "Configurar Caminho de Construção"> Bibliotecas> Adicionar Jars Externos e adicionar a API do servlet de qualquer Container que escolher usar.

E siga a solução do @kaustav datta ao usar o ant para construir - tenha uma propriedade como tomcat.home ou weblogic.home. No entanto, introduz outra restrição de que o desenvolvedor deve instalar o Weblogic em sua máquina local se o weblogic estiver sendo usado! Alguma outra solução mais limpa?

Exceção de tempo de execução
fonte
0

Este também pode ser o motivo. Eu vim com o seguinte pom.xml.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

O problema não resolvido ocorreu devido à exclusão de spring-boot-starter-tomcat. Basta remover a <exclusions>...</exclusions>dependência, isso resolverá o problema, mas verifique se que isso também exclua o servidor tomcat incorporado.

Se você também precisar do servidor tomcat incorporado, poderá adicionar a mesma dependência compile scope.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Muhammad Usman
fonte