HTML chamando Servlet Java - Como fazer?

Pessoal, estou dando meus 1os passos no Java Web. Já tenho bom domínio do Java SE (Desktop) com JavaFX. Gostaria da ajuda de vcs em entender como fazer algo muito simples: um HTML com entrada de 2 campos (ID e Senha), chamando o Java que receberá (lerá) estes 2 campos e retornará uma mensagem
para o HTML que será mostrado na Tela. Tenho o ultimo Glassfish instalado. Neste momento não usarei
IDE. Gostaria de fazer apenas este exemplo “na mão”, para fixar bem.

Já tenho o HTML montado com o seguinte código:

Login Form

Login Page

Please enter your username and password

Username

Password

 

Alguém pode me ajudar? Grato.

É só passar a URL na qual o Servlet responde no atributo “action” do seu form. Também é importante ajustar o atributo “method” com GET ou POST, de acordo com o tipo de requisição HTTP que o seu Servlet atende.

rmendes08, grato pela resposta. Veja como está meu HTML (importante: ele está com sufixo JSP e não HTML). O LoginServlet está compilado e o.class está no caminho abaixo (c:/java/html/loginServlet).
No mesmo caminho está o LoginServlet.jsp. Quando eu executo, clicando sobre o LoginServlet.jsp o
Browser abre normalmente. Eu digito os dados e após clicar no botão Submit o Browser dá a mensagem:
O Arquivo não foi encontrado (ERR_FILE_NOT_FOUND).

  <form method="GET" action="c:/java/html/loginServlet">
     <p> Username <input type="text" name="userName" size="50"> </p>

 <p> Password <input type="text" name="password" size="20"> </p>

 <p> <input type="submit" value="Submit" name="B1"> </p>
  </form>

Não amigo … Não é assim que Servlet funciona … Antes de mais nada você precisa de um servidor que dê suporte à Servlets/JSP. O mais famoso deles é o Apache Tomcat, mas existem outros:

Apache Tomcat
Jetty

entre outros …

Depois de baixar e instalar o servidor, você deve empacotar a sua aplicação Web em um arquivo .war e copiar esse arquivo para a pasta de deploy do servidor. Daí você coloca o servidor em execução e aciona o Servlet chamando a URL do Servlet, que é relativa ao servidor. Segue um exemplo em:
http://www.codejava.net/servers/tomcat/how-to-deploy-a-java-web-application-on-tomcat

Não fica chutando. Segue algum livro ou tutorial.

1 curtida

rmendes08, grato novamente. Então, eu tenho instalado o Glassfish 5 e consigo colocá-lo para rodar (start)
normalmente.

Ocorre q esta é a 1a vez q estou fazendo um pgm Java para WEB. Por isso eu gostaria de uma ajuda
realmente básica. Exemplos:

  • como eu consigo empacotar em um .war?
  • como eu consigo identificar a pasta de Deploy do Servidor?

O link que vc informou acima como exemplo serve para o Glassfish 5?

Grato.

fica a dica …

rmendes, ok. Já vi como gerar o “war”. E uma das formas de “deployar” no Glassfish é via o Console de Administração dele. Fiz tb e aparentemente está ok (o Console informa q está enable). Porém não consigo
rodar a aplicação. Como vc sugeriu vou buscar mais detalhes na web. Se não tiver sucesso volto a recorrer ao GUJ. Obrigado mesmo assim.

Sendo bem curto e grosso: estude.
Só ter as ferramentas não resolve.
Não queime etapas, aprenda e depois faça.

1 curtida

Darlan, ok. Eu estudei a apostila do K19. Ela me ajudou muito com o HTML e CSS. Mas ela não explora muito a questão dos Servlets. Vou estudar a apostila sugerida pelo rmendes08. Vi q ela trata do Tomcat. Eu, entretanto, gostaria de usar, inicialmente, o Glassfish. Vc tem dominio desse server? Grato.

O tomcat é mais simples e fácil de configurar e entender. É mais indicado para quem está começando, afinal, você deveria focar em aprender sobre servlets, jsp e etc e não num application server.
Não vai usar nem 10% do que o glassfish possui, é como usar um tanque de guerra para prender um bêbado perturbando o sossego.

1 curtida

darlan, instalei o Tomcat 7 (ignorei o Tomcat 9 para ficar similar a apostila sugerida pelo rmendes08). Vi na
apostila como instalar e foi realmente muito simples. Ele já está rodando (started). Lendo a apostila vi
q ela se baseia no Eclipse. Vou falar uma coisa agora q sei q vc vai odiar:

como eu fiz nos estudos do Java (Desktop) eu comecei fazendo tudo “na mão”. Não usei qualquer IDE.
Fiz isso para fixar bem os comandos, evitando o apoio q o IDE dá. Foi muito bom para mim.

Eu queria fazer de novo. A apostila mostra, por exemplo, o WEB-INF da aplicação teste,
mas não mostra onde deve ser criado a pasta WEB-INF. Deve ser (obrigatóriamente) na mesma pasta
do Java? Ou deve ser (obrigatóriamente) na mesma pasta do Tomcat?

A apostila mostra a seguinte estrutura do projeto q eu, creio, foi criada pelo Eclipse:

  • projeto-teste
    • src
    • JRE System Library
    • Apache Tomcat 7
      • build
    • WebContaint
      • META-INF
      • WEB-INF
        • lib
          web.xml

Não usando o Eclipse (ou q/q outro IDE), onde eu deveria criar a estrutura com WEB-INF e o
restante necessario para rodar a aplicação no Tomcat?

Grato.

A estrutura é a mesma que está sendo mostrada no Eclipse. Você só não precisa criar as pastas “JRE System Library” e “Apache Tomcat 7”. Mas como você vai fazer tudo na mão, você precisa entender o que vai de fato para o servidor e o que não vai. A estrutura do projeto será a seguinte:

  • projeto-teste
    • src
    • WebContent
      • *.jsp, *.html, *.css, *.js
      • META-INF
      • WEB-INF
        • classes
        • lib
        • web.xml

Na pasta /src é onde ficam os seus fontes Java, distribuídos em pacotes. Na pasta WebContent, no primeiro nível é onde deverão ficar seus *.jsp’s e os arquivos estáticos, como CSS, Javascript, HTML, etc. Na pasta WEB-INF/lib devem ficar os .jar de bibliotecas externas que você está usando, e por fim, a pasta WEB-INF/classes é onde devem ficar os arquivos Java compilados, isto é, seus arquivos .class.
Para fazer o deploy da aplicação você vai precisar:

  1. compilar os arquivos da pasta /src para a pasta /WEB-INF/classes
  2. a partir da pasta WebContent, usar o comando jar para gerar um arquivo compactado com sufixo .war. No seu caso, projeto-teste.war.
  3. Copiar o arquivo .war gerado para a paste de deploy do servidor. No caso do Tomcat, você também pode copiar a pasta WebContent diretamente para a pasta de deploy do Tomcat, mas você deve renomeá-la com o nome que a aplicação vai ter no servidor.

Eu comecei a estudar java web em 2008. As primeiras aulas foram “na mão”. Criar a estrutura do projeto e tudo mais.
Posso afirmar uma coisa: a cada 10 empresas que você vá desenvolver, -2 vão exigir que você faça na mão, atualmente.
Aliás, dificilmente vão pedir para você criar projetos como está aí na apostila. Você vai “ser obrigado” a aprender a usar coisas como maven, gradle e afins. Mas, isso é “ota fumiga”.
Por quê usar o Eclipse?
Ele é utilizado em larga escala no Brasil e no mundo. Dá um certo trabalho se adaptar a ele (o netbeans é bem mais user friendly), mas, nada que alguns dias não resolvam.
De qualquer maneira, esse tutorial te dará uma certa luz.
Era comum há alguns anos (uma década atrás) você encontrar tutoriais com esse processo, passo a passo. Hoje, é bem mais difícil achar.

rmendes08/darlan, desculpe-me pela demora em retornar e obrigado pela orientação. Fiz o seguinte:

  • Criei a estrutura q vc indicou como segue:

    • c:
      • loginServlet (é o nome q estou usando para o aplicativo)
        • src
        • WebContaint
          • loginServlet.jsp;
          • loginServlet.war (deixei uma copia aqui);
          • META-INF
          • WEB-INF
            • web.xml (ver abaixo)
            • classes
              • loginServlet.class
            • lib
  • Como está o WEB.XML

<?xml version="1.0" encoding="ISO-8859-1" ?>

  <display-name>loginServlet</display-name>
  <description>
    This is a simple web application with a source code organization
    based on the recommendations of the Application Developer's Guide.
  </description>

  <servlet>
    <servlet-name>loginServlet</servlet-name>
    <servlet-class>java.loginServlet.WebContaint.WEB-INF.classes.loginServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/loginServlet</url-pattern>
  </servlet-mapping>

Obs: na instrução java.loginServlet.WebContaint.WEB-INF.classes.loginServlet</servlet-
class> eu coloquei o caminho completo até chegar na “class”;

     Na instrução <url-pattern>/loginServlet</url-pattern> eu deixei como no exemplo do WEB.XML
     q eu peguei no tutorial q o darlan sugeriu.
  • Copiei o loginServlet.war para a pasta C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps;
    Dentro dessa pasta, além do WAR q eu copiei tem varias pastas (doscs, examples, host-manager,
    manager e Root. Tem tb a pasta loginServlet q foi criada automaticamente quando eu copiei o WAR.

    • na pasta loginServlet tem:
      • META-INF
        • MANIFEST
      • WEB-INF
        • classes
          loginServlet.class
        • lib
        • web.xml
  • Eu stopei e startei o Tomcat novamente.

  • o HTML/JSP está com a chamada do servlet com
    method=“GET” action=“loginServlet”

  • Testei digitando http://localhost:8080/loginServlet no Chrome. Deu erro 404.

Vcs conseguem me ajudar? Grato.

Tem certeza que o tomcat está funcionando e está rodando na porta 8080?
Você baixou o instalador do tomcat ou o arquivo compactado do mesmo?
Está utilizando netbeans ou eclipse ou outra ide?

darlan/rmendes08, grato pela resposta. O monitor do Tomcat 7.0 mostra "started no Service Status. Vi
no server.xml o q está abaixo:

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
     This connector uses the BIO implementation that requires the JSSE
     style configuration. When using the APR/native implementation, the
     OpenSSL style configuration is required as described in the APR/native
     documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
-->

Eu instalei o Tomcat no Windows 7 pelo instalador. Não usei o zip.

Como comentei nos posts anteriores para esta minha 1a experiencia eu estou fazendo “na mão”. Não
estou usando q/q IDE.

Vcs acham q o WEB.XML está correto e q os loginServlet.war e web.xml estão nas pastas certas?

Grato.

Então, camarada, eu entendo que você quer fazer na mão e tudo mais, mas, devido ao grande número de problemas que está encontrando e a dificuldade em resolver, eu sugiro, fortemente, baixe o eclipse e faça como a maioria faz.

1 curtida

Siga o que @darlan_machado falou. Em tempos que a geração atual usa maven e não se preocupam nem em saber como se referencia libs por conta própria, isso que você quer é loucura, em se tratando de Java principalmente, onde mesmo com IDE a vida não é fácil. Tem gente até que vai pro Netbeans pra fugir do Eclipse. Então relaxa, os profissionais usam Eclipse. Isso não impede saber como as coisas funcionam por baixo, tipo se nao entendeu porque o Eclipse gera tal pasta, se informe.