VMS Web
Introduction:
This is a web server for VMS. Or maybe more accurate a small sub set of a web server for VMS.
Note that less than 1% of the code is mine - the remaining more than 99% of
the code comes from various open source projects including Eclipse Jetty.
What is not supported
The following features are not available:
- Virtual hosts
- Serving multiple directories
- POST, PUT and DELETE methods
- Mix of protected and unprotected pages
- Directory listings
- Configurable file type mapping
- Configurable welcome file
- Configurable caching
- CGI scripts
- Server Side Includes
- Servlets and JSP
- ...
If you need those features then pick a full web server like one of:
What is supported
The following features are available:
- HTTP and HTTPS on configurable ports
- Serving files (only a few file extensions) from a single directory tree
- Serving VMS HELP
- Simple Java plugins (query string in, return object that get converted to JSON or XML)
- Ability to optionally to require VMS login to everything (not for HTTP - only for HTTPS)
Why would anyone choose such a feature poor product?
Sometimes a simpler product is better:
- Easy install, easy config and easy run. Install is two unzips and @fixup
to fix file attributes. There is no config at all (yes - you heard correct: there is
no config file). Run is @setup and a command line. You want
it running in the background? Submit a batch job with the same two lines!
- Probably better security. The very limited functionality also limits attack
possiblities. The implementation was made to make exploits difficult. The code
base is so small that it should be easy to review for vulnerabilities.
Requirements:
- Java
- VMS Call package [for login and VMS help functionality]
Install:
- unzip vmsweb-bin.zip
- unzip -aa temp.zip
- @fixup
Run:
- @setup
- runserver [option] ... [option]
Options:
- http <port>
- process HTTP requests on specified port
- https <port> <JKS file> <passphrase>
- process HTTPs requests on specified port using certificate from JKS file
- file <dir>
- serve files from specified directory tree at context /
(URL /xyz/abc.txt is mapped to file <dir>/xyz/abc.txt)
- jsonapi
- serve Java plugins returning JSON at context /jsonapi
(URL /jsonapi/<classname>?<query> load and execute class
<classname> found in classpath)
- xmlapi
- serve Java plugins returning XML at context /xmlapi
(URL /xmlapi/<classname>?<query> load and execute class
<classname> found in classpath)
- help <level>
- serve VMS HELP at context /help with specified cache level
(URL /help/?A+B+C get VMS HELP for A B C)
- login
- require VMS login for all requests
Examples:
- runserver http 8001 file /disk2/arne/www
- listen for HTTP on port 8001 and serve files in DISK2:[ARNE.WWW]
- runserver http 8001 https 8002 arne.jks topsecret file /disk2/arne/www
- listen for HTTP on port 8001, HTTPS on port 8002 and serve files in DISK2:[ARNE.WWW]
- runserver https 8002 arne.jks topsecret file /disk2/arne/www login
- listen for HTTPS on port 8002, serve files in DISK2:[ARNE.WWW] and require VMS login
- runserver http 8001 help 3
- listen for HTTP on port 8001 and serve VMS HELP (cache level 3)
- runserver http 8001 jsonapi
- listen for HTTP on port 8001 and serve plugins returning JSON
License:
- All of my code is available under Apache 2.0 license.
- Eclipse Jetty is available under Apache 2.0 and EPL license -
see web site.
- Google GSON is available under Apache 2.0 license -
see web site.
- XStream is availabel under BSD license -
see web site.
Java Doc:
See documentation here.
Feedback:
For questions and comments send email to author arne@vajhoej.dk.