Os iniciantes no desenvolvimento de Sistemas Web em Java geralmente cometem o erro de confundir a funcao do Servidor Web com o Web Container.O Servidor Web, como o Apache por exemplo, tem a funcao de disponibilizar recursos, sejam eles estaticos ou dinamicos. O Servidor Web sera suficiente se sua aplicacao for composta de recursos estaticos como paginas em HTML, imagens e arquivos disponibilizados.Mas se sua aplicacao for composta por recursos como paginas dinamicas ou operacoes em outros servidores (de banco de dados por exemplo) entao sera necessaria uma Aplicacao Web alem do Servidor Web.Essa aplicacao deve manter a comunicacao com o Servidor Web e tratar as requisicoes do cliente. Para isso seria necessario criar um socket de comunicacao com o servidor, escutar esse socket e manipular os eventos de requisicao e resposta, abstrair o protocolo HTTP para obter as informacoes e dados da requisicao, carregar e executar os metodos das classes necessarias para o tratamento de cada requisicao controlando essas chamadas, efetuar o processamento que sua aplicacao se propoe, traduzir a resposta de JSPs por exemplo para HTML para enviar a resposta ao Servidor Web.A sorte e que a maioria dessas coisas e generica e um Web Container faz pra voce. Na verdade a sua unica preocupacao deve ser com o desenvolvimento de sua aplicacao (o item "efetuar o processamento que sua aplicacao se propoe"), o resto um Web Container como o Tomcat faz pra voce.Um Servidor de Aplicacao, como o Glassfish, JBoss ou WebSphere por exemplo, tem alem do Web Container um EJB Container. Portanto o Tomcat nao e um Servidor Web e nem de Aplicacao, apenas um Web Container (por enquanto).Referencias: Use A Cabeca! Servlets & JSP. Bryan Basham, Kathy Sierra & Bert Bates. 2 Edicao. O'Reilly.http://glassfish.java.net/http://www.jboss.org/http://tomcat.apache.org/ Vamos ao nosso artigaco sobre Struts 2, como prometido, mostrando alguns recursos interessantes. Ate que enfim saiu!Quem conhece o struts ou outro framework com o mesmo proposito, sabe o quanto ele auxilia em tarefas como: criar acoes no controle e submeter formularios para essas acoes, associar campos de formulario a campos de objetos, controlar o redirecionamento de paginas e recursos.Porem o que muitos nao conhecem, mesmo alguns que o utilizam (e nesse caso nao utilizam bem), sao alguns recursos fantasticos que podem evitar horas de programacao e tediosas consultas na internet a fim de "tirar aquela base". E claro que nao vou citar todos esses recursos, apenas os que acho muito relevantes e que frequentemente nao sao utilizados. Abaixo sao mostrados 3 desses recursos:Upload de ArquivosAgora imagine esse outro cenario: Upload de Arquivos. Pois e, o titulo do topico ja explica nosso cenario :(.Com o Struts 2 precisamos apenas inserir o campo file para submissao na pagina:"<"s:file name="arquivo" /">"E declara-lo com o tipo java.io.File na Action:private File arquivo;Ah, nao esqueca de incluir o atributo enctype no form, informando o tipo de dados transmitidos:"<"s:form id="inicial" enctype="multipart/form-data"">"Se precisar do nome ou do contentType do arquivo, crie os atributos do tipo String FileName e ContentType. Ex:private String arquivoFileName;private String arquivoContentType;O Struts ira atribuir esses valores para voce.E e apenas isso que precisa fazer para submeter um