In a production environment, it is inconvenient to start an application with a URL such as the following:
http://myappserver:4711/cisnatural/servlet/StartCISPage?PAGEURL=%2Fcisnatural%2FNatLogon.html&xciParameters.natserver=mywebio&xciParameters.natprog=nwo.sh&xciParameters.natport=4712&xciParameters.natparam=stack%3D%28logon+SYSEXNJX%3BMENU-NJX%3BFIN%29
The URL can be shortened by defining a corresponding session profile in the configuration tool. For example:
http://myappserver:4711/cisnatural/servlet/StartCISPage?PAGEURL=%2Fcisnatural%2FNatLogon.html&xciParameters.natsession=DemoApplication
However, this shortened URL is still not practical for security
reasons because end users should not be allowed to access the generic servlet
StartCISPage
.
When you define a dedicated servlet for each application, you can
easily define the security constraints for each application in the file
web.xml (for further information on this file, see
Configuring
Container-Managed Security). With the servlet
com.softwareag.cis.server.StartCISPageWithParams
, you
define a wrapper servlet for a given Natural for Ajax application so that the
application can later be invoked with a URL such as the following:
http://myappserver:4711/cisnatural/servlet/DemoApplication
Note:
The servlet
com.softwareag.cis.server.StartCISPageWithParams
can
also be used with the HTTP method POST
. See
Starting a Natural Application with
a URL.
The following example shows how you define an application as a servlet in the file web.xml.
<servlet id="DemoApplication"> <servlet-name>DemoApplication</servlet-name> <display-name>DemoApplication</display-name> <servlet-class>com.softwareag.cis.server.StartCISPageWithParams</servlet-class> <load-on-startup>1</load-on-startup> <init-param id="OVERWRITE"> <param-name>OVERWRITE</param-name> <param-value>false</param-value> </init-param> <init-param id="PAGEURL"> <param-name>PAGEURL</param-name> <param-value>/cisnatural/NatLogon.html</param-value> </init-param> <init-param id="xciParameters.natsession"> <param-name>xciParameters.natsession</param-name> <param-value>Local</param-value> </init-param> <init-param id="xciParameters.natserver"> <param-name>xciParameters.natserver</param-name> <param-value>localhost</param-value> </init-param> <init-param id="xciParameters.natport"> <param-name>xciParameters.natport</param-name> <param-value>2900</param-value> </init-param> <init-param id="xciParameters.natparamext"> <param-name>xciParameters.natparamext</param-name> <param-value>STACK=(LOGON SYSEXNJX;MENU-NJX;FIN)</param-value> </init-param> </servlet>
You can omit the parameters
xciParameters.natserver
,
xciParameters.natport
and
xciParameters.natparamext
if the corresponding values
are defined in the session definition that is referenced in
xciParameters.natsession
. This the recommended way,
because the settings can thus be changed in the configuration tool at any time
without the need to adapt the file web.xml.
To complete the definition, you define a corresponding servlet mapping in the file web.xml:
<servlet-mapping> <servlet-name>DemoApplication</servlet-name> <url-pattern>/servlet/DemoApplication</url-pattern> </servlet-mapping>
With this servlet mapping, you can now start your application by URL. Example: http://myhost:myport/mywebapp/servlet/DemoApplication
If you additionally want to prevent users from starting other NJX applications you can do the following:
Exchange the servlet class
com.softwareag.cis.server.StartCISPage
with a different
servlet class, namely
com.softwareag.cis.server.StartCISPageInSession
. This
servlet class cannot be called directly; it can only be called in an
Application Designer session which is already active. Therefore, each attempt
to start an arbitrary - not wrapped - application by just building a URL based
on StartCISPage
will result in an error message.
To exchange the servlet class, you change the following in the file web.xml
<servlet id="StartCISPage"> <servlet-name>StartCISPage</servlet-name> <display-name>StartCISPage</display-name> <servlet-class>com.softwareag.cis.server.StartCISPage</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
to
<servlet id="StartCISPage"> <servlet-name>StartCISPage</servlet-name> <display-name>StartCISPage</display-name> <servlet-class>com.softwareag.cis.server.StartCISPageInSession</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
If your application uses pop-ups, subcispage controls or web I/O pages
you have to add the parameter ALLOWSUBPAGES
to the servlet
definition in your web.xml:
<servlet id="StartCISPage"> <servlet-name>StartCISPage</servlet-name> <display-name>StartCISPage</display-name> <servlet-class>com.softwareag.cis.server.StartCISPageInSession</servlet-class> <load-on-startup>1</load-on-startup> <init-param id="ALLOWSUBPAGES"> <param-name>ALLOWSUBPAGES</param-name> <param-value>true</param-value> </init-param> </servlet>
For a workplace
application, the definition of the
com.softwareag.cis.server.StartCISPageWithParams
in the
web.xml is slightly different. You do not define the
start-up page of the workplace directly in the PAGEURL
parameter. Instead, you define an intermediate navigation page
/HTMLBasedGUI/com.softwareag.cis.util.navigatetopage.html. The
start-up page of the workplace is specified in the
navPage
parameter. The navigation page makes sure that
an Applicaton Designer session is created before it navigates to the start-up
page of the workplace.
<servlet id="WorkplaceDemo"> <servlet-name>WorkplaceDemo</servlet-name> <display-name>WorkplaceDemo</display-name> <servlet-class>com.softwareag.cis.server.StartCISPageWithParams</servlet-class> <load-on-startup>1</load-on-startup> <init-param id="OVERWRITE"> <param-name>OVERWRITE</param-name> <param-value>false</param-value> </init-param> <init-param id="PAGEURL"> <param-name>PAGEURL</param-name> <param-value>/HTMLBasedGUI/com.softwareag.cis.util.navigatetopage.html</param-value> </init-param> <init-param id="navPage"> <param-name>navPage</param-name> <param-value>/njxdemos/wpdynworkplace.html</param-value> </init-param> </servlet>
In this case, the corresponding servlet mapping is defined as follows:
<servlet-mapping> <servlet-name>WorkplaceDemo</servlet-name> <url-pattern>/servlet/WorkplaceDemo</url-pattern> </servlet-mapping>
Note:
For further information on the above mentioned servlets, see the
Java API documentation which is provided with Application Designer.