tomcat.bat, Web server's main script (for win32).
... set CLASSPATH=%CLASSPATH%;%TOMCAT_HOME%\webapps\ROOT\savzs\lib\savzs.jarweb.xml, configuration file initializing servlet parameters (servlets.properties in old versions of Java servlet engine). File is located in .../ROOT/WEB-INF. Following example may be omitted. It contents only initparameter's values that are presumed by default.
... <web-app> <servlet> <servlet-name>navigate</servlet-name> <servlet-class>Sav.Server.Navigator</servlet-class> <init-param> <param-name>serverBase</param-name> <param-value>savzs</param-value> </init-param> <init-param> <param-name>outLimit</param-name> <param-value>100000</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet> <servlet-name>import</servlet-name> <servlet-class>Sav.Server.Importer</servlet-class> <init-param> <param-name>serverBase</param-name> <param-value>savzs</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet> <servlet-name>export</servlet-name> <servlet-class>Sav.Server.Exporter</servlet-class> <init-param> <param-name>serverBase</param-name> <param-value>savzs</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet> <servlet-name>record</servlet-name> <servlet-class>Sav.Server.Recorder</servlet-class> <init-param> <param-name>serverBase</param-name> <param-value>savzs</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> </web-app>The outLimit is byte limitation of data deduced from the database to the client. The serverBase parameter sets name of Z Server directory in the web pages root directory.
Usually each table corresponds to the separate class level of the target objects. The tables of the whole class may not exceed default outLimit parameter, 100000 bytes. It has to limit size of the deduced via WWW data. See savzs/demo/Common/*.tab examples.
http://<hostname>/servlet/Sav.Server.Importer?db=<database>&f=<file>
Where: <file> = <directory> | <*.tab file> Example: http://localhost:8080/servlet/Sav.Server.Importer?db=demo/Common.ass&f=demo/Common
or http://localhost/servlet/Sav.Server.Importer?db=demo/Common.ass&f=demo/Common/DS.tab
http://<hostname>/servlet/Sav.Server.Navigator?db=<database>
Example: http://localhost:8080/servlet/Sav.Server.Navigator?db=demo/Common.ass
http://<hostname>/servlet/Sav.Server.Exporter?db=<database>&f=<file>
Where: <file> = <directory> | <*.tab file> Example: http://localhost:8080/servlet/Sav.Server.Exporter?db=demo/Common.ass&f=demo/Common1
The $DataBase specific field determines database of input data. The $Content object name (table name), and $Key key attributes (fields) are designed to point out key data fields. The $Content points at primary key for all the data (non-specific) fields. The $Key fields may be several or missing. Its are useful only as additional to the $Content primary key.
The $Confirm hidden field is URL path which Z Server uses with the successful registration. The $Warning hidden field sets up URL path if recording is not successful. If $Confirm and $Warning are missing, Server send own messages. Be care with $Submit of "submit" type and $Reset of "reset" type input fields.
The $User user name, $Service accessible resources, $Password, and $Info supplementary information are specific Z words (see Z Language documentation) providing login control to system services. These fields are needed only if DDHF is used for user registration. The $User is primary key for $Service, $Password, and $Info fields. The $Service fields may be several.
Value of $DataBase by default is either file kept by session in previous access or some temporary file. Either $Content or $User, or both fields must be placed in DDHF necessarily. If data field, the $Content point at, is missing in DDHF, then value of this data field is new number for each recording.
Let us look at demo/Record.html DDHF HTML-form. It calls Sav.Server.Recorder servlet. Input data are controlled in client side (no server) over validate() Java script function.
<FORM name="form1" action="/servlet/Sav.Server.Recorder" method="post" onSubmit="return validate()"> ... </FORM>We do not know final form view, it may be another at any time and therefore database must be changed with changing form immediately. Now current input fields are User, Password, Name, Email, and Phone. For Z database the type and size of a field is not important. There is no need to create database schema, because it is formed automatically. The form below defines two schemas: 1. by $User, $User ($Service, $Password); and 2. by $Content, User (Name, Email, Phone). The $User ($Service, $Password) data are not accessible for navigation.
<FORM name="form1" action="/servlet/Sav.Server.Recorder" method="post" onSubmit="return validate()"> <INPUT type="hidden" name="$DataBase" value="demo/Account.ass" /> <INPUT type="hidden" name="$Content" value="User" /> <INPUT type="hidden" name="$User" value="User" /> <INPUT type="hidden" name="$Service" value="record" /> <INPUT type="hidden" name="$Service" value="navigate" /> <INPUT type="hidden" name="$Confirm" value="http://localhost:8080/savzs/demo/RecordConfirm.html" /> <INPUT type="hidden" name="$Warning" value="http://localhost:8080/savzs/demo/RecordWarning.html" /> Please fill up the form below. All fields with asterisk (*) are required. <TABLE> <TR> <TD>*</TD> <TD>User:</TD> <TD><INPUT type="text" name="User" size=32 maxlength=16 /></TD> </TR> <TR> <TD>*</TD> <TD>Password:</TD> <TD><INPUT type="password" name="$Password" size=32 maxlength=16 /></TD> </TR> <TR> <TD>*</TD> <TD>First Name:</TD> <TD><INPUT type="text" name="Name" size=32 maxlength=32 /></TD> </TR> <TR> <TD>*</TD> <TD>Email:</TD> <TD><INPUT type="text" name="Email" size=32 maxlength=32 /></TD> </TR> <TR> <TD></TD> <TD>Phone:</TD> <TD><INPUT type="text" name="Phone" size=32 maxlength=16 /></TD> </TR> <TR> <TD colspan=3 align="center"> <INPUT type="submit" name="$Submit" value="Submit Data" /> <INPUT type="reset" name="$Reset" value="Reset Form" /> </TD> </TR> </TABLE> </FORM>Whole text of the form is here. To interact with Sav Z Server we need open this form (and others of 2.2. section) over like http://<hostname>/savzs/demo/Record.html . Please notice that Record.html, Right.html, Profile.html, Product.html demo pages have localhost:8080 host reference for Tomcat in stand-alone mode, whereas default port of online Web servers, Apache and others, is 80 .
<FORM name="form1" action="/servlet/Sav.Server.Recorder" method="post" onSubmit="return validate()"> <INPUT type="hidden" name="$DataBase" value="demo/Account.ass" /> <INPUT type="hidden" name="$Confirm" value="http://localhost:8080/savzs/demo/Right.html" /> Please fill up the form below. All fields with asterisk (*) are required. <TABLE> <TR> <TD>*</TD> <TD>User:</TD> <TD><INPUT type="text" name="$User" size=32 maxlength=16 /></TD> </TR> <TR> <TD>*</TD> <TD>Password:</TD> <TD><INPUT type="password" name="$Password" size=32 maxlength=16 /></TD> </TR> <TR> <TD>*</TD> <TD>Service:</TD> <TD> <SELECT name="$Service" size="4" multiple> <OPTION>navigate</OPTION> <OPTION>import</OPTION> <OPTION>export</OPTION> <OPTION>record</OPTION> </SELECT> </TD> </TR> <TR> <TD></TD> <TD>Info:</TD> <TD><INPUT type="text" name="$Info" size=32 maxlength=256 /></TD> </TR> <TR> <TD colspan=3 align="center"> <INPUT type="submit" name="$Submit" value="Submit Data"> <INPUT type="reset" name="$Reset" value="Reset Form"> </TD> </TR> </TABLE> </FORM>First record that need be input must assign rights to all the system services of Z Server for administrator himself.
$User: Administrator $Password: 123456 $Service: navigate import export record $Info:If database permits any user to record data over Sav.Server.Recorder, next record may be such as below. Notice that "" value (two quote) of $User and $Password marks indefinite value and needs to be enter in input field.
$User: "" $Password: "" $Service: record $Info:
<FORM name="form1" action="/servlet/Sav.Server.Recorder" method="post" onSubmit="return validate()"> <INPUT type="hidden" name="$DataBase" value="demo/Account.ass" /> <INPUT type="hidden" name="$Content" value="User" /> <INPUT type="hidden" name="$Key" value="User" /> <INPUT type="hidden" name="$Confirm" value="http://localhost:8080/savzs/demo/Order.html" /> Please fill up the form below. All fields with asterisk (*) are required. <TABLE> <TR> <TD>*</TD> <TD>User:</TD> <TD><INPUT type="text" name="User" size=32 maxlength=16 /></TD> </TR> <TR> <TD>*</TD> <TD>Password:</TD> <TD><INPUT type="password" name="Password" size=32 maxlength=16 /></TD> </TR> <TR> <TD>*</TD> <TD>Name:</TD> <TD><INPUT type="text" name="Name" size=32 maxlength=32 /></TD> </TR> <TR> <TD>*</TD> <TD>Email:</TD> <TD><INPUT type="text" name="Email" size=32 maxlength=32 /></TD> </TR> <TR> <TD></TD> <TD>Phone:</TD> <TD><INPUT type="text" name="Phone" size=32 maxlength=16 /></TD> </TR> <TR> <TD colspan=3 align="center"> <INPUT type="submit" name="$Submit" value="Submit Data"> <INPUT type="reset" name="$Reset" value="Reset Form"> </TD> </TR> </TABLE> </FORM>
<FORM name="form1" action="/servlet/Sav.Server.Recorder" method="post" onSubmit="return validate()"> <INPUT type="hidden" name="$DataBase" value="demo/Account.ass" /> <INPUT type="hidden" name="$Content" value="Order" /> Please fill up the form below. All fields with asterisk (*) are required. <TABLE> <TR> <TD>*</TD> <TD>Date:</TD> <TD><INPUT type="text" name="Date" size=32 maxlength=16 /></TD> </TR> <TR> <TD>*</TD> <TD>Name:</TD> <TD><INPUT type="text" name="Name" size=32 maxlength=32 /></TD> </TR> <TR> <TD>*</TD> <TD>Phone:</TD> <TD><INPUT type="text" name="Phone" size=32 maxlength=16 /></TD> </TR> <TR> <TD></TD> <TD>Company:</TD> <TD><INPUT type="text" name="Company" size=32 maxlength=32 /></TD> </TR> <TR> <TD>*</TD> <TD>Product Type:</TD> <TD><INPUT type="text" name="Product Type" size=32 maxlength=32 /></TD> </TR> <TR> <TD>*</TD> <TD>Product Name:</TD> <TD><INPUT type="text" name="Product Name" size=32 maxlength=32 /></TD> </TR> <TR> <TD></TD> <TD>Quantity:</TD> <TD><INPUT type="text" name="Quantity" size=32 maxlength=16 /></TD> </TR> <TR> <TD colspan=3 align="center"> <INPUT type="submit" name="$Submit" value="Submit Data"> <INPUT type="reset" name="$Reset" value="Reset Form"> </TD> </TR> </TABLE> </FORM>
<FORM name="form1" action="/servlet/Sav.Server.Recorder" method="post" onSubmit="return validate()"> <INPUT type="hidden" name="$DataBase" value="demo/Account.ass" /> <INPUT type="hidden" name="$Content" value="Product" /> <INPUT type="hidden" name="$Key" value="Product Type" /> <INPUT type="hidden" name="$Key" value="Product Name" /> <INPUT type="hidden" name="$Confirm" value="http://localhost:8080/servlet/Sav.Server.Navigator?db=demo/Account.ass" /> Please fill up the form below. All fields with asterisk (*) are required. <TABLE> <TR> <TD>*</TD> <TD>Product Type:</TD> <TD><INPUT type="text" name="Product Type" size=32 maxlength=32 /></TD> </TR> <TR> <TD>*</TD> <TD>Product Name:</TD> <TD><INPUT type="text" name="Product Name" size=32 maxlength=32 /></TD> </TR> <TR> <TD>*</TD> <TD>Quantity:</TD> <TD><INPUT type="text" name="Quantity" size=32 maxlength=16 /></TD> </TR> <TR> <TD></TD> <TD>Price:</TD> <TD><INPUT type="text" name="Price" size=32 maxlength=16 /></TD> </TR> <TR> <TD colspan=3 align="center"> <INPUT type="submit" name="$Submit" value="Submit Data"> <INPUT type="reset" name="$Reset" value="Reset Form"> </TD> </TR> </TABLE> </FORM>