Servlets
Servlets são classes Java que são instanciadas e executadas em associação com servidores Web, atendendo requisições realizadas por meio do protocolo HTTP.
Servlets é a segunda forma que veremos para criação de páginas dinâmicas em Java além da tecnologia já vista JSP.
A classe HttpServlet do pacote javax.servlet é a classe que possibilita o uso de classes java através do protocolo Http. A interface Servlet é a que define exatamente como uma servlet funciona, mas não é o que vamos utilizar agora uma vez que ela possibilita o uso de qualquer protocolo baseado em requisições e respostas, e não especificamente o HTTP.
Para criarmos uma classe java que receba requisições, fazemos isso criando uma classe qualquer que estenda a classe HttpServlet e então sobrescrevemos o método doget.
@Override protected void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }...
Servlets são capazes de receber requisições e enviar respostas através das Classes HttpServletRequest e HttpServletResponse.
Então, o método da Servlet poderia ter algo como: @Override protected void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<body>"); out.println( Olá Mundo"); out.println("</body>"); out.println("</html>"); }
Mapeando uma Servlet A servlet é acessada como uma página JSP qualquer, porém para isso é necessário definir uma configuração para que o servidor saiba qual servlet ele deve acessar, esse mapeamento é feito pelo arquivo web.xml.
Web.xml <?xml version="1.0" encoding="utf-8"?> <web-app id="webapp_id" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name> WebApp_NAME</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
O Mapeamento de uma servlet se dá pela tag: <servlet> <servlet> <servlet-name>primeiraservlet</servlet-name> <servlet-class>br.com.cd.oimundo</servlet-class> </servlet>
Após isso indique por qual URL sua Servlet será acessada: <servlet-mapping> <servlet-name>primeiraservlet</servlet-name> <url-pattern>/oimundo</url-pattern> </servlet-mapping>
A tag <url-pattern> Além de mapear uma URL para acessar uma servlet é póssivel fazer com que várias URL s acessem a mesma servlet. <url-pattern>/oimundo/*</url-pattern> <url-pattern>*.jsp</url-pattern>
Prática Construa uma Servlet que exiba uma página HTML onde contenha um título e a mensagem de Boas Vindas entre tags <h1>.
Prática Construa uma página que tenha um formulário e faça uma servlet que some os dois valores digitados nesse formulário.
Outros Métodos de Servlet doget = recebe requisições GET dopost = recebe requisições POST service = recebe ambas requisições
Dentro da classe servlet é possível utilizar todos os objetos até agora visto como request, response, session, Cookies e etc.
Erros Comuns em Servlets
Esquecer da barra inicial no URL pattern: <url-pattern>oi</url-pattern>
Digitar errado o nome do pacote da sua servlet: <servlet-class>br.ac.servlet.oimundo</servlet-class>
Esquecer de colocar o nome da classe no mapeamento da servlet <servlet-class>br.ac.servlet</servlet-class>
Prática Construa uma servlet que receba requisições para cadastro de um Contato (Bean), coloque esse contato em uma lista na sessão e crie uma página que liste todos os contatos da sessão.
Tratamento de Exceções em Servlets
É possível tratar erros em servlets através da configuração do arquivo web.xml.
Tratando erro da classe Exception <error-page> <exception-type>java.lang.exception</exception-type> <location>/erro.html</location> </error-page>
Tratar erros de resposta Http como 404 (Página inexistente) <error-page> <error-code>404</error-code> <location>/paginanaoencontrada.html</location> </error-page>
Prática Crie uma servlet que trate erros de java.lang.arithmeticexception, java.lang.numberformatexception e de página inexistente.
Métodos init e destroy O método init é executado sempre que uma servlet é executada (compilada) e o método destroy sempre quando essa mesma é destruída.
public void init(servletconfig config) throws ServletException { } super.init(config); log("iniciando a servlet");
public void destroy() { super.destroy(); log("destruindo a servlet"); }
Prática Construa uma servlet que conte quantas vezes o site foi acessado e exiba em uma página essa informação.
SERVLETS 3.0
Nova especificação da API de Servlets, disponível em alguns servidores já como GlassFish, Jetty e Tomcat 7.
A nova API trás algumas melhorias e correções. @WebServlet("/oiMundo") public class OiMundo extends HttpServlet {... }
Exercícios Crie uma servlet que efetue o Login em sua aplicação, utilizando Beans e Sessão. Crie um cadastro de Contatos onde ao salvar um contato, esta ação seja feita por uma servlet, salvando esses em um arquivo. Crie uma servlet que controle o acesso do usuário na aplicação, redirecionando ele para página de login quando o mesmo não estiver na sessão.