28 de janeiro de 2011

JavaEE 6: Utilizando Servlets 3.0

Para quem já teve que fazer servlets em JEE 5, sabe o quanto é chatinho ter que ficar mapeando estas no arquivo web.xml. Pois bem, a especificação JEE 6 veio para facilitar nossa vida em relação a isso e muitas outras coisas, mas agora vamos tratar da servlet... bom, essa facilidade dá-se pelo fato de que não é mais necessário mapear a servlet no web.xml, agora existe uma anotação do pacote javax.servlet.annotation que é a anotação @WebServlet que substitui o mapeamento via xml.
Vamos para um exemplo prático, crie um projeto pelo NetBeans(Veja aqui), coloque o nome de HelloServlet, e crie no pacote de códigos-fonte um pacote chamado controle, temos como estrutura final este projeto:


Ao criar o projeto com a configuração do link acima, terá uma página index.xhtml criada, pode removê-la, e crie uma index.jsp, dentro do body informe o seguinte código:

nome:
Repare que a action do form está chamando MinhaServlet, então vamos criar agora a servlet MinhaServlet. Dentro do pacote controle crie uma nova servlet, com o nome de MinhaServlet.java, o código dela será o seguinte:
@WebServlet(name = "MinhaServlet", urlPatterns = "/MinhaServlet")
public class MinhaServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String nome = request.getParameter("nome");
        response.getWriter().println("nome: " + nome);
        response.getWriter().println("Oiee... aqui é o metodo doGet");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String nome = request.getParameter("nome");
        response.getWriter().println("nome: " + nome);
        response.getWriter().println("Oiee... aqui é o metodo doPost");

    }
}
Veja que como uma servlet normal ela estende a classe HttpServlet e implementa os métodos doGet e doPost, veja que os dois estão com praticamente o mesmo código, o que eles fazem? pegam o parâmetro nome que vai vir da nossa página index.jsp, e o imprime no navegador.
Aconselho fazer dois testes, para saber quando o doGet e o doPost são chamados, para testar basta trocar o method do form da nossa página index.jsp por GET, e comparar a resposta dada pela servlet... mas chega de enrolação porque o foco não é esse, e sim a anotação @WebServlet, veja que ela está logo acima da declaração da classe. Basicamente o que ela precisa para funcionar são as propriedades:
urlPatterns que será a url de como ele será chamado no navegador, e o name atributo necessário para nomear a Servlet. Enfim usando essa anotação não precisamos mais fazer isso:

    MinhaServlet
    controle.MinhaServlet


    MinhaServlet
    /MinhaServlet

O que acaba facilitando muito!

Nenhum comentário:

Postar um comentário

Deixe seu comentário... ;)