Contexto
O mecanismo de movimentação da camada de apresentação pedido deve controlar e coordenar o processamento de cada usuário em várias solicitações. Tais mecanismos de controle podem ser gerenciados em qualquer forma centralizada ou descentralizada.
Problema
O sistema requer um ponto de acesso centralizado para solicitar a apresentação de camada de manipulação de apoiar a integração dos serviços do sistema, recuperação de conteúdo, gerenciamento de visualização e navegação. Quando o usuário acessa a view diretamente, sem passar por um mecanismo centralizado, dois problemas podem ocorrer:
Cada vista é obrigada a fornecer os seus serviços próprio sistema, resultando muitas vezes em duplicado código.
Ver a navegação é deixada à vista. Isso pode resultar em visualizar conteúdos misturados e navegação vista.
Além disso, o controle distribuído é mais difícil de manter, já que as mudanças, muitas vezes, precisam ser feitas em diversos lugares.
Forças
Sistema comum de serviços de processamento de concluída por pedido. Por exemplo, o serviço de segurança completa verificações de autenticação e autorização.
Lógico que é melhor tratada em um local central em vez disso é replicado dentro vistas numerosas.
existem pontos de decisão com relação à recuperação e manipulação de dados.
Várias visões são utilizadas para responder às solicitações de empresas similares.
Um ponto central de contato para tratar uma solicitação pode ser útil, por exemplo, para controle e registro do andamento de um usuário através do site.
Serviços do sistema e da lógica de gestão de exibição são relativamente sofisticados.
Solução
Use um controlador como o ponto inicial de contato para tratar uma solicitação. O controlador gerencia o tratamento do pedido, incluindo os serviços de segurança invocando como a autenticação e autorização, a delegação de processamento de negócios, gerenciar a escolha de uma visão adequada, tratamento de erros e gerenciar a seleção de estratégias de criação de conteúdo.
O mecanismo de movimentação da camada de apresentação pedido deve controlar e coordenar o processamento de cada usuário em várias solicitações. Tais mecanismos de controle podem ser gerenciados em qualquer forma centralizada ou descentralizada.
Problema
O sistema requer um ponto de acesso centralizado para solicitar a apresentação de camada de manipulação de apoiar a integração dos serviços do sistema, recuperação de conteúdo, gerenciamento de visualização e navegação. Quando o usuário acessa a view diretamente, sem passar por um mecanismo centralizado, dois problemas podem ocorrer:
Cada vista é obrigada a fornecer os seus serviços próprio sistema, resultando muitas vezes em duplicado código.
Ver a navegação é deixada à vista. Isso pode resultar em visualizar conteúdos misturados e navegação vista.
Além disso, o controle distribuído é mais difícil de manter, já que as mudanças, muitas vezes, precisam ser feitas em diversos lugares.
Forças
Sistema comum de serviços de processamento de concluída por pedido. Por exemplo, o serviço de segurança completa verificações de autenticação e autorização.
Lógico que é melhor tratada em um local central em vez disso é replicado dentro vistas numerosas.
existem pontos de decisão com relação à recuperação e manipulação de dados.
Várias visões são utilizadas para responder às solicitações de empresas similares.
Um ponto central de contato para tratar uma solicitação pode ser útil, por exemplo, para controle e registro do andamento de um usuário através do site.
Serviços do sistema e da lógica de gestão de exibição são relativamente sofisticados.
Solução
Use um controlador como o ponto inicial de contato para tratar uma solicitação. O controlador gerencia o tratamento do pedido, incluindo os serviços de segurança invocando como a autenticação e autorização, a delegação de processamento de negócios, gerenciar a escolha de uma visão adequada, tratamento de erros e gerenciar a seleção de estratégias de criação de conteúdo.
O controlador fornece um ponto de acesso centralizado que controla e gerencia a manipulação de pedido web. Ao centralizar os pontos de decisão e de controlo, o controlador também ajuda a reduzir a quantidade de código Java, chamada de scriptlets, embutido na página JavaServer Pages (JSP).
lógica de negócios centralizando o controle no tratamento e redução na visão promove a reutilização de código entre as requisições. É uma abordagem preferível à alternativa de código-incorporação em vários pontos de vista, porque essa abordagem pode levar a uma mais propenso a erros, reutilização pelo ambiente de copiar e colar.
Tipicamente, um controlador de coordenadas com um componente de despachante. Despachantes são responsáveis pelo gerenciamento de visualização e navegação. Assim, um distribuidor escolhe o próximo modo de exibição para o usuário e controle de vetores para o recurso. Despachantes podem ser encapsulados dentro do controlador, direta ou pode ser extraído em um componente separado.
lógica de negócios centralizando o controle no tratamento e redução na visão promove a reutilização de código entre as requisições. É uma abordagem preferível à alternativa de código-incorporação em vários pontos de vista, porque essa abordagem pode levar a uma mais propenso a erros, reutilização pelo ambiente de copiar e colar.
Tipicamente, um controlador de coordenadas com um componente de despachante. Despachantes são responsáveis pelo gerenciamento de visualização e navegação. Assim, um distribuidor escolhe o próximo modo de exibição para o usuário e controle de vetores para o recurso. Despachantes podem ser encapsulados dentro do controlador, direta ou pode ser extraído em um componente separado.
Enquanto o padrão Front Controller sugere centralizar a manipulação de todos os pedidos, não limitar o número de manipuladores do sistema, como faz um Singleton.
Um aplicativo pode usar vários controladores em um sistema, cada um correspondente a um conjunto de serviços distintos.
Estrutura
Figura 7.1 representa o Front Controller padrão de diagrama de classe.
Figura 7.1 representa o Front Controller padrão de diagrama de classe.
Participantes e Responsabilidades
Figura 7.2 mostra o diagrama de seqüência representando o padrão Front Controller. Ele descreve como o controlador processa um pedido.
Controller
O controlador é o ponto de contato inicial para tratar todas as solicitações no sistema. O controlador pode delegar a um ajudante para completar a autenticação e autorização de um usuário ou para iniciar a obtenção de contato.
Dispatcher
Um distribuidor é responsável pelo gerenciamento e exibição de navegação, gestão da escolha do modo de exibição ao lado de apresentar para o usuário, e fornecer o mecanismo para a vetorização de controle para este recurso.
Um despachante pode ser encapsulado dentro de um controlador ou pode ser um componente separado trabalhar em coordenação. O atendente fornece tanto estática expedição à vista ou um mais sofisticado mecanismo dinâmico de expedição.
O despachante usa o objeto RequestDispatcher (suportado na especificação do servlet) e encapsula algum processamento adicional.
Helper
Um auxiliar é responsável por ajudar uma vista ou controlador de completar a sua transformação. Assim, ajudantes têm inúmeras responsabilidades, incluindo a recolha de dados exigidos pela exibição e armazenamento deste modelo intermediário, caso em que o auxiliar é por vezes referido como um grão de valor. Além disso, os ajudantes podem adaptar este modelo de dados para uso pelo ponto de vista. Ajudantes pode atender as solicitações para os dados do ponto de vista, simplesmente fornecendo acesso aos dados brutos ou através da formatação dos dados como conteúdo da web.
Uma visão pode trabalhar com qualquer número de ajudantes, que normalmente são implementados como componentes JavaBeans (JSP 1.0) e custom tags JSP (1.1). Além disso, um ajudante pode representar um objeto de comando, um delegado (ver "Business Delegate" na página 248), ou um transformador de XSL, que é usado em combinação com uma folha de estilo para se adaptar e converter o modelo para o formulário apropriado.
View
Uma visão representa e exibe informações para o cliente. A visão recupera informações de um modelo. vistas apoio Helpers, encapsulando e adaptar o modelo de dados subjacente para utilização no ecrã.
Um distribuidor é responsável pelo gerenciamento e exibição de navegação, gestão da escolha do modo de exibição ao lado de apresentar para o usuário, e fornecer o mecanismo para a vetorização de controle para este recurso.
Um despachante pode ser encapsulado dentro de um controlador ou pode ser um componente separado trabalhar em coordenação. O atendente fornece tanto estática expedição à vista ou um mais sofisticado mecanismo dinâmico de expedição.
O despachante usa o objeto RequestDispatcher (suportado na especificação do servlet) e encapsula algum processamento adicional.
Helper
Um auxiliar é responsável por ajudar uma vista ou controlador de completar a sua transformação. Assim, ajudantes têm inúmeras responsabilidades, incluindo a recolha de dados exigidos pela exibição e armazenamento deste modelo intermediário, caso em que o auxiliar é por vezes referido como um grão de valor. Além disso, os ajudantes podem adaptar este modelo de dados para uso pelo ponto de vista. Ajudantes pode atender as solicitações para os dados do ponto de vista, simplesmente fornecendo acesso aos dados brutos ou através da formatação dos dados como conteúdo da web.
Uma visão pode trabalhar com qualquer número de ajudantes, que normalmente são implementados como componentes JavaBeans (JSP 1.0) e custom tags JSP (1.1). Além disso, um ajudante pode representar um objeto de comando, um delegado (ver "Business Delegate" na página 248), ou um transformador de XSL, que é usado em combinação com uma folha de estilo para se adaptar e converter o modelo para o formulário apropriado.
View
Uma visão representa e exibe informações para o cliente. A visão recupera informações de um modelo. vistas apoio Helpers, encapsulando e adaptar o modelo de dados subjacente para utilização no ecrã.
Strategies
Existem várias estratégias para a implementação de um controlador.
Servlet Front Strategy
Esta estratégia sugere execução do controlador como uma servlet. Embora semanticamente equivalente, é preferível à Frente JSP estratégia. O controlador gerencia os aspectos do tratamento de solicitações que estão relacionados ao processamento de negócios e fluxo de controle. Essas responsabilidades são relacionados, mas logicamente independentes, exibir a formatação, e são mais apropriadamente encapsulada em um servlet, e não em uma página JSP.
O Servlet Frente estratégia tem alguns inconvenientes potenciais.Em particular, não aproveitar alguns dos utilitários JSP ambiente runtime, como o preenchimento automático de parametros do pedido em propriedades ajudante. Felizmente, essa desvantagem é mínima, porque é relativamente fácil criar ou obter utilitários similares para uso geral. Há também a possibilidade de que a funcionalidade de alguns dos utilitários JSP podem ser incluídos como recursos servlet padrão em uma futura versão da especificação do servlet. Exemplo 7.9 é um exemplo da Frente Servlet estratégia.
Existem várias estratégias para a implementação de um controlador.
Servlet Front Strategy
Esta estratégia sugere execução do controlador como uma servlet. Embora semanticamente equivalente, é preferível à Frente JSP estratégia. O controlador gerencia os aspectos do tratamento de solicitações que estão relacionados ao processamento de negócios e fluxo de controle. Essas responsabilidades são relacionados, mas logicamente independentes, exibir a formatação, e são mais apropriadamente encapsulada em um servlet, e não em uma página JSP.
O Servlet Frente estratégia tem alguns inconvenientes potenciais.Em particular, não aproveitar alguns dos utilitários JSP ambiente runtime, como o preenchimento automático de parametros do pedido em propriedades ajudante. Felizmente, essa desvantagem é mínima, porque é relativamente fácil criar ou obter utilitários similares para uso geral. Há também a possibilidade de que a funcionalidade de alguns dos utilitários JSP podem ser incluídos como recursos servlet padrão em uma futura versão da especificação do servlet. Exemplo 7.9 é um exemplo da Frente Servlet estratégia.
Exemplo Servlet 7.9 Código de exemplo Frente Estratégia
public class EmployeeController extends HttpServlet {
// Initializes the servlet.
public void init(ServletConfig config) throws
ServletException {
super.init(config);
}
// Destroys the servlet.
public void destroy() {
}
/** Processes requests for both HTTP
* <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest
request, HttpServletResponse response)
throws ServletException, java.io.IOException {
String page;
/**ApplicationResources provides a simple API
* for retrieving constants and other
* preconfigured values**/
ApplicationResources resource =
ApplicationResources.getInstance();
try {
// Use a helper object to gather parameter
// specific information.
RequestHelper helper = new
RequestHelper(request);
Command cmdHelper= helper.getCommand();
// Command helper perform custom operation
page = cmdHelper.execute(request, response);
}
catch (Exception e) {
LogManager.logMessage(
"EmployeeController:exception : " +
e.getMessage());
request.setAttribute(resource.getMessageAttr(),
"Exception occurred : " + e.getMessage());
page = resource.getErrorPage(e);
}
// dispatch control to view
dispatch(request, response, page);
}
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet */
public String getServletInfo() {
return "Front Controller Pattern" +
" Servlet Front Strategy Example";
}
protected void dispatch(HttpServletRequest request,
HttpServletResponse response,
String page)
throws javax.servlet.ServletException,
java.io.IOException {
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
Nenhum comentário:
Postar um comentário