Integração Java

Um servlet gera somente paginas de forma dinamica ou ele trabalha como um servidor (pode receber conexão tcp/ip por exemplo)?
Tem alguma ferrementa em Java que faça os dois papéis? Ou teria de fazer um servidor que se comunicasse com o servlet “através” de um banco de dados?

Espero que tenham entendido…
Obrigado!

Eu não tenho muita certeza se entendi a sua pergunta, mas vamos lá. Eu provavelmente vou falar um monte de coisa que você já sabe, mas acho melhor começar lá do começo.

Um servlet é simplesmente uma classe filha de HttpServlet. Do jeito que o JEE foi planejado, um container web abre uma porta TCP e fica esperando as requisições. Quando uma requisição vier, esse container vai tentar encontrar qual o servlet corresponde àquela URL e chamar o método apropriado (doGet para um GET, doPost para um POST, e por aí vai) Dentro desse método, você faz o que quiser. Se você quiser abrir um socket e chamar outra página, você chama. Se quiser abrir o stream de saída para mandar um arquivo zipado ou gerar um PDF dinâmico, idem. Mas o modo “normal” do servlet se comunicar com o mundo é esse. O servidor recebe a requisição TCP/IP, monta os objetos HttpServletRequest e HttpServletResponse, e aí chama o servlet.

Por outro lado, esse servlet é uma classe Java. Nada impede que você escreve um método main() que faça todo o serviço do container web. Provavelmente não compensa, mas quem sabe das reais necessidades do seu projeto é você.