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.