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?
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:
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.
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.
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.
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.
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 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
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.
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.
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.
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í !!
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.
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!
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;publicclassHelloWorldextendsHttpServlet{publicvoid doGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,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.
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.
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.
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?
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.
Respostas:
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:
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.
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.
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.
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.
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/lib
ou mesmo/JRE/lib
,/JRE/lib/ext
, etc com bibliotecas específicas-servletcontainer em uma tentativa de descuidado para corrigir os erros de compilação:fonte
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
etcmaven-archetype-webapp
nã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)servlet-api
dependê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.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.
fonte
The import javax.servlet cannot be resolved
.Pouca diferença em relação a Hari:
fonte
Inclua servlet-api.jar da pasta lib do servidor.
Faça este passo
fonte
Adicione a dependência do javax.servlet no pom.xml. Seu problema será resolvido.
fonte
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í !!
fonte
servlet-api.jar
,jsp-api.jar
,el-api.ja
r,j2ee.jar
,javaee.jar
, etc. Seria só levar a portabilidade futuro, compatibilidade, classpath e problemas de manutenção.você pode simplesmente copiar
servlet-api.jar
e copiar os arquivos jar na pasta lib, que está no WEB-INF. depois limpe e construa seu projeto, seus erros serão resolvidos.você pode adicionar diretamente arquivos jar à biblioteca usando as etapas a seguir.
servlet-api.jar
arquivo.fonte
servlet-api.jar
,jsp-api.jar
,javaee.jar
, etc. Isso só levaria a portabilidade futuro, compatibilidade, classpath e facilidade de manutenção problemas.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.
fonte
Da wikipedia .
Obviamente, isso funcionará apenas se você tiver adicionado o
servlet-api.jar
caminho de construção ao Eclipse. Normalmente, seu servidor de aplicativos (por exemplo, Tomcat ) terá o arquivo jar correto.fonte
Para projetos maven, adicione a seguinte dependência:
Referência
Para projetos gradle:
ou faça o download
javax.servlet.jar
e adicione ao seu projeto.fonte
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.servlet
importar 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.
fonte
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.
fonte
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-api
etomcat-jsp-api
. Existe um para cada versão do Tomcat. Geralmente, adicioná-los com escopoprovided
ao 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.
fonte
@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?
fonte
Este também pode ser o motivo. Eu vim com o seguinte
pom.xml
.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
.fonte