Invocando Programaticamente os Aplicativos WebFacing a partir de 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, em um aplicativo WebFacing, cada URL de comando CL definida é representada como um botão que um usuário clica para iniciar o aplicativo. Durante a criação do projeto do WebFacing, as URLs são gravadas em um arquivo invocations.jsp e, após o aplicativo ser implementado, estes são os botões que os usuários clicam para iniciar o aplicativo.

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 usado deve estar apto a fornecer ao aplicativo WebFacing credenciais do usuário IBM® i para que ele possa acessar recursos do IBM i.

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 designado a uma variável tal como orderProgram. Seu servlet poderá construir a cadeia URL usando o valor determinado para orderProgram e designá-la a uma variável newURL usando uma linha como:
newURL = "WFInvocation.do?clcmd=call " + orderProgram;
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.
port
Número da porta do servidor WebFacing no IBM i.
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 ambiente de trabalho, 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 do WebFacing V6, um valor especial igual a *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
Host e porta no arquivo do descritor de implementação web.xml são usados. Solicitar ao usuário para efetuar logon.
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=SYSTEM1&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=SYSTEM1&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=SYSTEM1&port=4004&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. Host no qual o requisição 5250 está localizado é SYSTEM. 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.