Ir para o conteúdo

Mini Framework Para Aplicações Web


Criado por Arkhan, Out 16 2010 14:56

Não há respostas para este tópico
  • Por favor, faça o login para responder

#1 Arkhan

Arkhan
  • Arkhan
  • Colaborador
  • 1 Revisões

Revisou 16 outubro 2010 - 14:56

Este código tem por objetivo demonstrar a criação de uma arquitetura MVC para uma aplicação WEB. Primeiramente criou-se um Servlet que responderá a todas as requisições realizadas pela aplicação, uma interface que todas as classes que implemnetarão as regras de negócio deverão por obrigação implementar e a configuração do arquivo WEB.xml

package app.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class Controller extends HttpServlet {

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{
        

        String __pacote = getInitParameter("__pacote");

        String business = request.getServletPath();

        business = business.replaceAll("/", ".");
        business = business.replaceAll(".do$", "");

        business = __pacote+business;

        String businessLogicClassName = business;

        Class businessLogicClass;

        try{
            businessLogicClass = Class.forName(businessLogicClassName);
        }catch (ClassNotFoundException e){
            throw new ServletException("Classe não encontrada: " + businessLogicClassName);
        }

        if(!BusinessLogic.class.isAssignableFrom(businessLogicClass)){
            throw new ServletException ("Esta classe não implementa a interface BusinessLogic: " + businessLogicClassName);
        }

        BusinessLogic businessLogicObject;

        try{
            businessLogicObject = (BusinessLogic) businessLogicClass.newInstance();
        }catch (InstantiationException e){
            throw new ServletException(e);
        }catch (IllegalAccessException e){
            throw new ServletException(e);
        }catch (Exception e){
            throw new ServletException(e);
        }

        try{
            businessLogicObject.execute(request, response);
        }catch (Exception e){
            throw new ServletException("Erro na lógica de negócios", e);
        }
    }
}

O código acima é do Servlet Controller, ele usa de reflection para invocar a lógica de negócios correta. Agora vamos para a Interface BusinessLogic:

package app.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public interface BusinessLogic {
    void execute (HttpServletRequest request, HttpServletResponse response) throws Exception; 
}

Esta interface deve ser implementada por todas as classes que contém regras de negócio. A regra de negócios deve ser implementada no método execute. Agora a configuração do servlet no WEB.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>new_spy</servlet-name>
<servlet-class>app.controller.Controller</servlet-class>
<init-param>
<description>Estrutura de pacotes utilizado</description>
<param-name>__pacote</param-name>
<param-value>app.controller</param-value>
</init-param>
<init-param>
<param-name>__default</param-name>
<param-value>app.controller.Default</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>new_spy</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>


Agora explicando como funciona:

Suas regras de negócio podem estar no mesmo pacote do controller e da interface ou em pacotes dentro deste:
O pacote do controller e da interface é: app.controller
Os pacotes das suas REGRAS DE NEGÓCIO devem estar obrigatóriamente em: app.contoller.nome_do_pacote
As suas URLs serão no formato: http://<seu_dominio>/nome_do_pacote/Nome_da_classe.do

Onde nome_do_pacote é o pacote que está dentro de app.controller em que sua classe foi implementada e Nome_da_classe deve ser o nome da classe que implementa a interface BusinessLogic e sua regra de negócio. Se vc colocou sua classe no mesmo pacote do controller vc simplemente realiza a requisição assim: http://<seu_dominio>/Nome_da_classe.do. É necessário o .do ao final da url!

Como posso aplicar isso?

Vc pode construir uma aplicação JSP/Servlet em que quando uma requisição é realizada, é direcionada para a sua regra de negócio que após realizar as operações necessárias, insere parametros no contexto da requisição e despacha para um JSP, onde será feita a apresentação dos dados.

Use a criatividade!




1 usuário(s) está(ão) lendo este código

1 membro(s), 0 visitante(s) e 0 membros anônimo(s)