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