Mini Framework Para Aplicações Web

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! 

0 comentários:

Postar um comentário

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More