GoConqr hat ein neues Design! Sag uns, wie es dir gefällt.

Notizen

O modelo do Servlet - Exemplos

Luis Felipe Guariento Desenvolvimento de Software Concursos Públicos Portugiesisch 18 Seiten

O modelo do Servlet - Exemplos

Inhalt der Notizen (18)

Seite 1

Diretório do Projeto

O presente projeto visa argumentar sobre Servlets, as estruturas, objetos e arquivos necessários aos mesmos.

Sobre esse assunto é importante ressaltar as classes e interfaces necessárias, conforme analisaremos nos próximos slides.

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 2

apresentacao.html

Essa página visa capturar os dados digitados pelo usuário e enviá-los para serem processados pelo servlet TestServlet.

Repare que na tag html < form >, seu atributo method está com o valor Post, o que fará com que o container encaminhe o atendimento da requisição ao método doPost() do servlet TestServlet. É importante frisar aqui que para cada método Http, haverá um método correspondente na classe HttpServlet, tendo a assinatura geral:

protected void doXXX(HttpServletRequest, HttpServletResponse) throws ServletException, IOException;

A classe HttpServlet fornece implementações vazias para cada um dos métodos doXXX(). Devemos sobrescrever esses métodos para implementar nossa lógica de negócios.

Abaixo temos uma diferença entre os métodos Http do tipo Get e Post. Por padrão o browser utilizará uma requisição do tipo Http Get, o que acionará o método doGet() do servlet.

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 3

login.html

Esse formulário utiliza o método Http do tipo POST de modo a enviar login e senha do usuário para serem autenticado pelo servlet LoginServlet.

O modelo do Servlet - Exemplos

Seite 4

web.xml

Aqui temos o mapeamento dos servlets utilizados no nosso projeto:

HeaderServlet - nome do servlet destinado a apresentar todos os Headers da requisição. O caminho e classe desse servlet é controle.ShowHeaderServlet. E para que se posso chamá-lo, o usuário deve digitar http://[host]:[porta]/[projeto]/showHeaders, conforme o que foi descrito na tag < url-pattern > dentro de < servlet-mapping >

DataBaseServlet - Esse servlet destina-se a obter e mostrar os valores dos parâmetros de inicialização de uma base de dados, passados dentro da tag < servlet > para o < servlet-name > DataBaseServlet e informados pelas tags < init-param >. O caminho e classe desse servlet é controle.DataBaseServlet. E para que se posso chamá-lo, o usuário deve digitar http://[host]:[porta]/[projeto]/showDataBase, conforme o que foi descrito na tag < url-pattern > dentro de < servlet-mapping >.

SendBinaryArchieve - Esse servlet se destina a a enviar um arquivo binário como resposta a uma requisição cliente. O caminho e classe desse servlet é controle.SendBinaryArchieve . E para que se posso chamá-lo, o usuário deve digitar http://[host]:[porta]/[projeto]/sendBinary, conforme o que foi descrito na tag < url-pattern > dentro de < servlet-mapping >.

TestServlet - Esse servlet se destina a recuperar e mostrar as informações de estado e tecnologia passadas pelo usuário via o formulário html na página apresentacao.html. O caminho e classe desse servlet é controle.TestServlet. E para que se posso chamá-lo, o usuário deve digitar http://[host]:[porta]/[projeto]/testando, conforme o que foi descrito na tag < url-pattern > dentro de < servlet-mapping >.

SendResource - assim como SendBinaryArchieve, esse servlet é utilizado para que se possa enviar um arquivo binário ao usuário, no entanto, utilizando um caminho relativo através de ServletContext.getResource("caminho"). O caminho e classe desse servlet é controle.SendRelativeResource . E para que se posso chamá-lo, o usuário deve digitar http://[host]:[porta]/[projeto]/sendResource, conforme o que foi descrito na tag < url-pattern > dentro de < servlet-mapping >.

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 5

AccountServlet.java

Esse servlet trabalha em conjunto com LoginServlet, de modo a compartilhar informações sobre o login e senha do usuário com esse outro servlet.

AccountServlet irá obter a informação do userid do usuário passado por LoginServlet como um atributo de escopo de requisição. Ao efetuar o login, e caso esteja correto, LoginServlet coloca a informação do userid como um atributo de escopo de requisição passando o controle do tratamento da requisição para AccountServlet, que irá recuperar as informações da conta do usuário e apresentá-las na tela.

Quando esse servlet for iniciado pela primeira vez pelo container web, ele irá preencher uma Hashtable chamado data com os nomes de usuários e dados de contas bancárias através da chamada ao método init(). Esse método somente será executado uma vez quando o servlet for inicializado. Após isso, e caso o login e senha de usuário estejam corretos, LoginServlet passa a requisição para AccountServlet, que utiliza a informação do userid do usuário recuperado através de ServletRequest.getAttribute("userid") de modo a obter os valores de conta da Hashtable para esse userid, gerar uma página HTML e apresentá-la ao usuário. Acompanhe o código abaixo.

O modelo do Servlet - Exemplos

Pontos importantes a lembrar sobre servlets:

Ciclo de vida do servlet: carregamento e instanciação, inicialização ( método init(ServletConfig) ), servindo requisições ( chamada ao método Servlet.service(ServletRequest, ServletResponse) do servlet), chamada ao método destroy() e descarregar o servlet ( unloading)

Métodos disponíveis em ServletRequest, HttpSession e ServletContext para se obter e configurar atributos:

Object getAttribute(String nome) - esse método retorna o valor mapeado para o nome ou nulo caso o nome não exista

Enumeration getAttributeNames() - esse método retorna uma enumeração de String de todos os nomes de atributos.

void setAttribute( String nome, Object valor) - adicionar o par nome-valor passado. Caso o nome já exista para um atributo nesse escopo, então o valor antigo será removido e o novo posto em seu lugar.

Seite 6

DataBaseServlet.java

Esse servlet obtém os valores dos parâmetros iniciais de configuração associados ao DataBaseServlet no arquivo web.xml ( comandos < init-param > dentro de < servlet >), gera uma página JSP e a exibe ao usuário.

Pontos importantes a lembrar:

O servlet container pega as informações especificadas sobre o servlet no descritor de implantação e os encapsula no objeto ServletConfig. Essa informação pode ser recuperada pelo servlet no ato de sua inicialização (método init()).

A interface ServletConfig está definida no pacote javax.servlet. Ele conterá métodos para recuperar e tratar parâmetros de inicialização:

String getInitParameter( String name ) - retornará o valor do parâmetro de inicialização ou nulo caso o parâmetro não exista.

Enumeration getInitParamaterNames() - retornará uma enumeração de String com todos os nomes dos parâmetros iniciais descritos no web.xml para o servlet em questão.

String getServletName() - retorna o nome dado ao servlet conforme o que foi definido no web.xml.

Alguns métodos úteis de ServletResponse:

getWriter() - Vai retorna um objeto da classe java.io.PrintWriter, usado para enviar caracteres de dados ao cliente.

getOutputStream() - que retorna um objeto da classe javax.servlet.ServletOutputStream. Utilizado para enviar um arquivo binário como resposta a uma requisição.

O modelo do Servlet - Exemplos

Seite 7

LoginServlet.java

No ato da inicialização de LoginServlet pelo container, será preenchida uma Hashtable com nomes de usuários e senhas válidos (método init() )

Uma vez que o usuário preencha as informações de seu login e senha em login.html e pressione o botão "mostrar balanço", o servlet LoginServlet será acionado.

Conforme vemos abaixo, será acionado o método doPost() e obtidos os parâmetros do formulário através dos comandos getParameter("nome") da interface ServletRequest.

Caso o usuário e senha não sejam nulos, usuário exista na Hashtable usuarios e a senha seja compatível com o valor da Hashtable associada ao nome do usuário, então será adicionado um atributo no escopo de requisição chamado "userid" do usuário e cujo valor será o login userid do usuário e, então, será obtido um RequestDispatcher através do objeto ServletContext, sendo então chamado o método getRequestDispatcher("/servlet/AccountServlet") para passar o tratamento do restante da requisição ao AccountServlet.

Um ponto importante a lembrar é que como o controle do tratamento da requisição é passado a AccountServlet, esse servlet e LoginServlet processam a mesma requisição, logo o atributo de escopo de requisição chamado userid criado por LoginServlet poderá também ser recuperado e utilizado por AccountServlet.

Caso o usuário não seja válido ou então a senha esteja incorreta, será obtido um objeto RequestDispatcher através do objeto ServletRequest e para o RequestDispatcher obtido a partir de ServletRequest, poderemos usar um caminho relativo para acesso ao recurso. Voltamos um nível na árvore de diretórios e redirecionamos a resposta a Login.html novamente.

Em ambos os casos, após obtido o RequestDispatcher para o recurso requerido, utilizaremos o método forward(req,resp) de RequestDispatcher para encaminhar a requisição ao recurso alvo.

O modelo do Servlet - Exemplos

Seite 8

SendBinaryArchieve.java

Aqui iremos enviar um arquivo binário ao cliente, utilizando-se o método getOutputStream() de ServletResponse.

Repare que antes de utilizarmos esse método, devemos definir o tipo do conteúdo da resposta para application/jar, conforme podemos observar pela utilização do método setContentType("application/jar"), pois o padrão da resposta a ser enviada é text/html.

Acompanhe a explicação através das linhas de código a seguir.

Forçamos o nome do arquivo a ser enviado como “bootstrap.jar”. Isso requer que o arquivo esteja no diretório bin do Tomcat.

Uma outra observação é o fato de que podemos chamar apenas um dos métodos: getWriter() ou getOutputStream() em uma instância de ServletResponse. Caso contrário um IllegalStateException será lançado.

O modelo do Servlet - Exemplos

Seite 9

SendRelativeResource.java

O código a seguir do servlet SendResource é usado para se enviar um arquivo binário como resposta a uma requisição cliente através de um caminho relativo obtido de ServletContext pela chamada ao método getResource("/arquivos/tomcat-juli.jar"). Esse caminho é relativo ao diretório raiz do projeto.

Acompanhar a explicação dada no código a seguir.

Pontos importantes relativos a ServletContext:

Interface que pode ser vista como uma janela para o servlet visualizar seu ambiente.

Cada aplicação web possui apenas uma ServletContext, acessível para todos os recursos ativos dela. Por isso é também usado para compartilhar dados entre os servlets. Alguns métodos importantes de ServletContext:

java.net.URL getResource(String path) - método que retorna um objeto java.net.URL para o recurso mapeado para o path passado ao método. Mesmo que o caminho não inicie por uma barra "/" não será absoluto. Será relativo ao diretório raiz da aplicação web. Exemplo, caso você passe um caminho a um arquivo JSP, serão recebidos dados não processados, nesse caso, o código-fonte JSP quando o código fonte for lido.

java.io.InputStream getResourceAsStream(String path) - método utilizado quando queremos obter um objeto InputStream para o recurso. Será equivalente a getResource("path").openStream().

O modelo do Servlet - Exemplos

Seite 10

ShowHeaderServlet.java

O Servlet a seguir cria uma página JSP para informar ao usuário todos os nomes e valores de Headers de requisição.

Sobre Headers será importante saber:

Headers são usados para transmitir informações adicionais sobre a resposta a ser dada ao cliente ajustando pares nome-valor. Exemplo: dizer ao browser para recarregar a página que ele está mostrando a cada 5 minutos ou então especificar de quanto em quanto tempo o browser pode fazer cache da página.

Métodos de HttpServletResponse para gerenciar Headers:

void setHeader(String name, String value) - utilizado para se configurar o par nome-valor do header.

void setIntHeader(String name, int value) - Configura um header cujo valor é int.

void setDateHeader(String name, long millisecs) - Configura um header do tipo Date em milissegundos.

Obs: é importante observar que com os métodos setXXX(), caso o header já exista, o novo valor sobrepõe o antigo.

void addHeader / addIntHeader / addDateHeader - métodos utilizados para se associar múltiplos valores ao mesmo header.

boolean containsHeader(String name) - método utilizado para que se possa saber se um header com o nome passado ao método já se encontra configurado.

Métodos de HttpServletRequest para obtenção de informações sobre headers:

String getHeader(String headerName) - retornará apenas uma dos valores associados ao header ou nulo caso o header com o nome passado não seja encontrado.

Enumeration getHeaders(String headerName) - retorna todos os valores associados ao header como uma enumeração de objetos String.

Enumeration getHeaderNames() - método útil quando não se conhece os nomes dos headers. Pode-se iterar através da enumeração retornada pelo método e para cada elemento retornado, utilizar getHeader() ou então getHeaders().

Headers são específicos do protocolo HTTP então métodos que lidam com Headers pertencem a HttpServletRequest.

O modelo do Servlet - Exemplos

Seite 11

TestServlet.java

Após o usuário preencher os dados em apresentacao.html e clicar no botão do formulário, será chamado o servlet TestServlet que obtém os parâmetros digitados nos campos do form através dos métodos getParameter() e getParameterValues() de ServletRequest.

Esses valores serão impressos em uma página JSP criada por TestServlet e apresentados novamente ao usuário.

O modelo do Servlet - Exemplos

Seite 12

Execução de apresentacao.html e chamada ao TestServlet

Execução de apresentacao.html. Após digitar os dados nos campos do formulário e clicar em "procurar", esses valores serão capturados por TestServlet e apresentados ao usuário.

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 13

Execução de Login.html

Após digitar o usuário e senha em Login.html, esses dados serão autenticados por LoginServlet, e caso estejam corretos, encaminhados para AccountServlet, que imprimirá os valores da conta do usuário dos últimos três meses. O resultado será mostrado a seguir.

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 14

Execução de Login.html (2)

Aqui o usuário e senha estarão corretos, será verificado na Hashtable existente em LoginServlet. Após isso, o valor do usuário será gravada como um atributo de escopo de requisição e a requisição passada a AccountServlet, que finaliza o tratamento da requisição mostrando o balanço bancário do usuário dos últimos três meses.

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 15

Chamada ao Servlet DataBaseServlet

Execução de DataBaseServlet, chamado após o usuário digitar o padrão de URL /showDataBase, o que é configurado no arquivo web.xml.

O servlet irá imprimir os nomes e valores dos parâmetros iniciais associados ao servlet no web.xml em uma página JSP, que será então retornada ao usuário.

Esses parâmetros de configuração iniciais estão associadas a parâmetros de acesso a uma base de dados, conforme vemos abaixo.

O modelo do Servlet - Exemplos

Seite 16

Chamada ao Servlet SendBinaryArchieve

O servlet SendBinaryArchieve envia um arquivo binário como resposta a uma requisição cliente, quando for digitado o padrão de URL /sendBinary.

Aqui forçamos o nome do arquivo a ser enviado como “bootstrap.jar”. Isso requer que o arquivo esteja no diretório bin do Tomcat.

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 17

Chamada ao Servlet SendRelativeResource

Aqui o servlet SendRelativeResource realiza basicamente a mesma tarefa que o servlet SendBinary, mas utilizando um caminho relativo ao diretório raiz da aplicação web para obter o recurso, ou seja, através da chamada ao método getResource("/arquivos/tomcat-juli.jar").

O modelo do Servlet - Exemplos

O modelo do Servlet - Exemplos

Seite 18

Chamada a HeaderServlet

Esse servlet serve para imprimir todos os headers de requisição que o servidor recebe.

O modelo do Servlet - Exemplos

Informationen

Beschreibung
Concursos Públicos Desenvolvimento de Software (OCEJWCD 6 ONLINE COURSE) Notiz am O modelo do Servlet - Exemplos, erstellt von Luis Felipe Guariento am 15/05/2018.
Aufrufe
2
Bewertung

Feedback

Worum geht es?

Wie gefällt dir das neue Design?

Dein Eindruck