Integrando Aplicativos do WebFacing com Outros Aplicativos da Web

Os aplicativos do WebFacing podem ser chamados através de programação a partir de outros aplicativos da Web. Isso fornece uma maneira de integrar interfaces com o usuário geradas pelo WebFacing com aplicativos da Web existentes.

Os aplicativos do WebFacing são ativados a partir de URLs. Geralmente, uma URL é representada como um link no qual o usuário clica para iniciar o aplicativo. Durante a conversão do WebFacing, as URLs são gravadas em um arquivo index.jsp e, após a implementação do aplicativo, estes são os links utilizados pelos usuários para iniciar o aplicativo. No entanto, as URLs do WebFacing também podem ser construídas por outros programas, como os servlets do controlador. É possível enviar estas URLs de volta aos usuários como links a serem clicados em uma página da Web. Mas, mais importantes, as URLs podem ser utilizadas nos métodos forward() e sendRedirect() em outros aplicativos da Web. Utilizando URLs do WebFacing determinados dinamicamente com os métodos forward() e sendRedirect() significa que um programa como um servlet controlador pode executar ações, tais como a determinação do host para utilização, o programa WebFacing para ativamento, qual comando de CL a utilizar para o programa WebFacing ou outras ações. Após a conclusão destas ações, o servlet pode fornecer o aplicativo WebFacing apropriado, com parâmetros já definidos, diretamente a um usuário.

Com o controle da chamada do WebFacing, também é possível utilizar métodos alternativos de autenticação. Toda autenticação do usuário pode ser, agora, executada em um servlet personalizado antes de chamar o WebFacing. O mecanismo de autenticação utilizado deve estar apto a fornecer o aplicativo WebFacing com as credenciais de usuário do iSeries, para que este possa acessar os recursos do iSeries.

Aqui há um exemplo simples de uma determinação do comando de CL para utilização no ativamento de um programa:

URL construída pelo servlet controlador:
WFInvocation.do?clcmd=call%20ordentr
Neste exemplo, ordentr é o nome de um programa a ser ativado. O valor ordentr poderia ser determinado por um servlet e atribuído a uma variável como iseriesProgram. Seu servlet poderia construir a cadeia da URL utilizando o valor determinado para iseriesProgram e designá-lo como uma variável newURL utilizando uma linha como:
newURL = "WFInvocation.do?clcmd=call " + iseriesProgram;
newURL poderia então ser utilizado como URL de avanço ou de redirecionamento para seus métodos forward() ou sendRedirect().
Neste exemplo, a URL completa utilizada pelo navegador, se enviada como um redirecionamento, teria a seguinte aparência:
http://<hostname>:<port>/<application>/WFInvocation.do?clcmd=call%20ordentr

O exemplo mostra a URL completa iniciando com http://<hostname>:<port>/<application>/. O valor para newURL é a cadeia seguinte. Ou seja, a cadeia: WFInvocation.do?clcmd=call%20ordentr. Em um exemplo como este, a primeira parte da URL: http://<hostname>:<port>/<application>/, representa host, a porta e a raiz do contexto para o aplicativo. Se seu servlet controlador estiver na mesma raiz de contexto, este não será sempre necessário para que o servlet determine a URL inteira. Se necessário, é possível codificar o servlet para construir uma cadeia para a URL totalmente qualificada.

Nota: Os caracteres %20 na URL representam um caractere de espaço codificado no envio a um navegador. Caracteres de espaço geralmente não podem ser utilizados em URLs. No exemplo em que a cadeia da URL está sendo construída e designada ao newURL, o espaço está presente na parte da cadeia logo após clcmd=call . A razão para o espaço na cadeia é que o exemplo representa um comando de CL call ordentr . Na cadeia da URL em construção, não é necessário adicionar %20 diretamente. O servidor adicionará esta codificação se necessário.

Parâmetros da URL que Podem ser Determinados Dinamicamente

clcmd
Comando de CL para ativar o programa.
host
Nome do host onde o aplicativo 5250 original está localizado.
userid
O userid é utilizado para efetuar logon no aplicativo. Nota: Se um método forward() for utilizado em um servlet controlador, os parâmetros da URL serão enviadas no nível do servidor de aplicativos (nível intermediário). Utilizar sendRedirect(), por outro lado, expõe os parâmetros da URL ao navegador. Desta forma, sendRedirect() é menos seguro, por que as informações, tal como os IDs e as senhas do usuário podem ser reveladas no campo de local do navegador ou se um usuário exibir as propriedades para a página em utilização.
password
Senha utilizada para efetuar logon no aplicativo. Nota: Se um método forward() for utilizado em um servlet controlador, os parâmetros da URL serão enviadas no nível do servidor de aplicativos (nível intermediário). Utilizar sendRedirect(), por outro lado, expõe os parâmetros da URL ao navegador. Desta forma, sendRedirect() é menos seguro, por que as informações, tal como os IDs e as senhas do usuário podem ser reveladas no campo de local do navegador ou se um usuário exibir as propriedades para a página em utilização.
inv
O nome de invocação para o comando de CL do WebFacing utilizado para ativar o aplicativo. Se valores como host, ID do usuário e senha são definidos para um comando de CL, esses valores substituirão os valores gerais especificados para um projeto. Para exibir o nome de invocação para um comando de CL, abra a perspectiva do WebFacing no workbench, clique na guia Projetos do WebFacing, expanda seu projeto do WebFacing, expanda a pasta Comandos de CL e clique no label for the command. O valor para o nome de invocação pode ser visualizado na área de janela Propriedades. (Se a área de janela Propriedades não for exibida na perspectiva do WebFacing, para abri-la, clique em Janela > Mostrar Visualização > Propriedades.) Para editar o nome da chamada, clique com o botão direito do mouse no comando CL na visualização Projetos WebFacing e selecione Propriedades.

Filtrando Comandos de Chamada Programáticos

É possível especificar os prefixos de comandos CL que serão permitidos para chamada programática utilizando o parâmetro clcmd. Chamadas programáticas que utilizam o parâmetro clcmd e especificam um valor não iniciado com um prefixo permitido serão bloqueadas para execução. O padrão é não permitir chamadas programáticas que substituam o comando CL a ser executado.

Para a migração de projetos a partir do plug-in do WebFacing, versão 5.1.2.2 e anterior, para a versão 6, um valor especial de *ALL será incluído para permitir que todos os comandos CL sejam executados.

<context-param>
	<param-name>WFCLCMDAllowed0</param-name>
	<param-value>*ALL</param-value>
</context-param>

Se o parâmetro clcmd não for utilizado ou se os valores de clcmd utilizados forem conhecidos, você deverá remover o valor *ALL e fornecer valores conforme indicado a seguir.

Para especificar quais prefixos de comandos são permitidos, edite a origem do arquivo web.xml referente ao seu aplicativo WebFacing. Inclua nomes de parâmetros formados por WFCLCMDAllowed, seguidos de um texto adicional para tornar cada parâmetro distinto. Em seguida, inclua um valor de parâmetro para cada de forma a especificar o comando que é permitido. O exemplo a seguir permite todos os comandos iniciados com CALL MYCMD e GO MYMENU.

<context-param>
	<param-name>WFCLCMDAllowed0</param-name>
	<param-value>GO MYMENU</param-value>
	<param-name>WFCLCMDAllowed1</param-name>
	<param-value>CALL MYCMD</param-value>
</context-param>

Forneça parâmetros de contexto adicionais com valores, conforme necessário.

Isso permitirá valores de clcmd como CALL MYCMDisOK ou CALL MYCMD PARAM(ONE), mas não permitirá valores como CALL MY ou CALL OTHERCMD. De forma semelhante para GO MYMENU, os comandos permitidos devem começar com a cadeia especificada. A distinção entre maiúsculas e minúsculas é ignorada para a comparação.

Nota: Isso apenas afeta a chamada programática com o uso do parâmetro clcmd. As chamadas do WebFacing com o uso do parâmetro inv não são afetadas.

URLs de Exemplo

WFInvocation.do?clcmd=call%20ordentr
O comando do CL call ordentr é transmitido pela URL. O host, ID do usuário e senha no arquivo descritor de implementação web.xml será utilizado. O usuário será solicitado a efetuar logon apenas quando o ID do usuário ou a senha estiverem ausentes ou o prompt for especificado. Imprima a mensagem de erro se o ID do usuário ou senha estiver incorreto.
WFInvocation.do?inv=INV1
Host, ID do usuário, senha e comando do CL serão recuperados a partir do arquivo descritor de implementação web.xml. O nome de invocação do comando CL é INV1. O usuário será avisado apenas quando o ID do usuário ou a senha estiverem ausentes ou o prompt for especificado. Imprima a mensagem de erro se o ID do usuário ou senha estiver incorreto.
WFInvocation.do?inv=INV1&host=ISERIES1&userid=WEBFACING&password=WEBFACING
O nome de invocação do comando CL é INV1. O host, ID do usuário e senha são transmitidos pela URL. Vários parâmetros são separados por &.
WFInvocation.do?clcmd=call%20ordentr&host=ISERIES1&userid=WEBFACING&password=WEBFACING
O comando do CL call ordentr é transmitido pela URL. O host, ID do usuário e senha são transmitidos pela URL. Vários parâmetros são separados por &.
Exemplo Totalmente Qualificado

http://<hostname>:<port>/<application>/WFInvocation.do?clcmd=call%20ordentr&host=ISERIES1&userid=WEBFACING&password=WEBFACING

Nota: neste exemplo as cadeias <hostname> e <port> referem-se ao nome do host e à porta para o servidor de aplicativos no qual o aplicativo WebFacing é implementado. <application> é a raiz do contexto para o aplicativo implementado. O exemplo mostra os seguintes valores sendo transmitidos pela URL: O comando do CL é call ordentr. O host onde o aplicativo 5250 está localizado é o ISERIES. O ID do usuário é WEBFACING. A senha é WEBFACING. Vários parâmetros são separados por &.

Métodos do Servlet para Chamar um Aplicativo WebFacing Programaticamente

Há dois métodos de servlet para chamar um aplicativo WebFacing programaticamente. Estes são:
  • forward() -- O método forward() está na classe javax.servlet.RequestDispatcher.
  • sendRedirect() -- O método sendRedirect() está na classejavax.servlet.http.HttpServletResponse.
As diferenças mais importantes entre estes dois métodos estão listadas abaixo:
método javax.servlet.RequestDispatcher's forward() método javax.servlet.HttpServletResponse's sendRedirect()
Uma chamada do servidor. Este método chama outro recurso, recupera sua saída e retorna-o ao Cliente. Envia o código de status HTTP 302 ao navegador. O navegador automaticamente reconectará à URL do recurso. Neste caso, o navegador sabe que a saída veio do outro recurso.

Feedback