7.FRONT CONTROLLER
Autor: Guilherme Gabriel | Publicado: 2010-11-22T18:40:00-08:00

&nbsp;
                                  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:
&nbsp;Cada vista é obrigada a fornecer os seus serviços próprio sistema, resultando muitas vezes em duplicado código.
&nbsp;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
&nbsp;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.
&nbsp;Lógico que é melhor tratada em um local central em vez disso é replicado dentro vistas numerosas.
&nbsp;existem pontos de decisão com relação à recuperação e manipulação de dados.
&nbsp;Várias visões são utilizadas para responder às solicitações de empresas similares.
&nbsp;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.
&nbsp;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.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.
&nbsp;
                                  Participantes e ResponsabilidadesFigura 7.2 mostra o diagrama de seqüência representando o padrão Front Controller. Ele descreve como o controlador processa um pedido.
&nbsp; 
&nbsp;
<!--[if gte mso 9]>           <![endif]--><!--[if gte mso 9]>     Normal   0         21         false   false   false      PT-BR   X-NONE   X-NONE                                                                                                     <!--[endif]--><!--[if gte mso 9]>  <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">   <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>   <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>                                                         <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>      <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>   <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>   <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>   <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>      <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>      <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>   <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>   <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>   <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>   <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>   <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>   <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>   <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>         <![endif]--><!--[if gte mso 10]> 
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Tabela normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-qformat:yes;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin-top:0cm;
 mso-para-margin-right:0cm;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0cm;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-fareast-font-family:"Times New Roman";
 mso-fareast-theme-font:minor-fareast;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-bidi-font-family:"Times New Roman";
 mso-bidi-theme-font:minor-bidi;}
 <![endif]-->  ControllerO 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ã.

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.Exemplo Servlet 7.9 Código de exemplo Frente Estratégiapublic class EmployeeController extends HttpServlet {&nbsp; // Initializes the servlet.&nbsp; public void init(ServletConfig config) throws &nbsp;&nbsp;&nbsp; ServletException {&nbsp;&nbsp;&nbsp; super.init(config);&nbsp; }
&nbsp; // Destroys the servlet.&nbsp; public void destroy() {&nbsp; }
&nbsp; /** Processes requests for both HTTP&nbsp; &nbsp;&nbsp; * &lt;code&gt;GET&lt;/code&gt; and &lt;code&gt;POST&lt;/code&gt; methods.&nbsp;&nbsp; * @param request servlet request&nbsp;&nbsp; * @param response servlet response&nbsp;&nbsp; */&nbsp; protected void processRequest(HttpServletRequest &nbsp;&nbsp;&nbsp; request, HttpServletResponse response)&nbsp;&nbsp;&nbsp; throws ServletException, java.io.IOException {&nbsp;&nbsp;&nbsp; String page;
&nbsp;&nbsp;&nbsp; /**ApplicationResources provides a simple API &nbsp;&nbsp;&nbsp;&nbsp; * for retrieving constants and other &nbsp;&nbsp;&nbsp;&nbsp; * preconfigured values**/&nbsp;&nbsp;&nbsp; ApplicationResources resource = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApplicationResources.getInstance();&nbsp;&nbsp;&nbsp; try {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Use a helper object to gather parameter &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // specific information.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestHelper helper = new&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestHelper(request);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Command cmdHelper= helper.getCommand();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Command helper perform custom operation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page = cmdHelper.execute(request, response);
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; catch (Exception e) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LogManager.logMessage(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "EmployeeController:exception : " + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.getMessage());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute(resource.getMessageAttr(),&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Exception occurred : " + e.getMessage());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page = resource.getErrorPage(e);&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; // dispatch control to view&nbsp;&nbsp;&nbsp; dispatch(request, response, page);&nbsp; }
&nbsp; /** Handles the HTTP &lt;code&gt;GET&lt;/code&gt; method.&nbsp;&nbsp; * @param request servlet request&nbsp;&nbsp; * @param response servlet response&nbsp;&nbsp; */&nbsp; protected void doGet(HttpServletRequest request, &nbsp;&nbsp;&nbsp; HttpServletResponse response)&nbsp;&nbsp;&nbsp; throws ServletException, java.io.IOException {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processRequest(request, response);&nbsp; }
&nbsp; /** Handles the HTTP &lt;code&gt;POST&lt;/code&gt; method.&nbsp;&nbsp; * @param request servlet request&nbsp;&nbsp; * @param response servlet response&nbsp;&nbsp; */&nbsp; protected void doPost(HttpServletRequest request, &nbsp;&nbsp;&nbsp; HttpServletResponse response)&nbsp;&nbsp;&nbsp; throws ServletException, java.io.IOException {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processRequest(request, response);&nbsp; }
&nbsp; /** Returns a short description of the servlet */&nbsp; public String getServletInfo() {&nbsp;&nbsp;&nbsp; return "Front Controller Pattern" + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Servlet Front Strategy Example";&nbsp; }
&nbsp; protected void dispatch(HttpServletRequest request, &nbsp;&nbsp;&nbsp; HttpServletResponse response,&nbsp;&nbsp;&nbsp; String page) &nbsp; throws&nbsp; javax.servlet.ServletException, &nbsp;&nbsp;&nbsp; java.io.IOException {&nbsp;&nbsp;&nbsp; RequestDispatcher dispatcher = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getServletContext().getRequestDispatcher(page);&nbsp;&nbsp;&nbsp; dispatcher.forward(request, response);&nbsp; }}