A minimal web server just understands the HTTP GET protocol and serves files as requested by the client. You can write one in 30 lines of java or so. Anything more complex (such as support for CGI, Servlets, EJB, XML etc.) is really an application server. In practical terms, there are very few minimal web servers available (except those designed for embedded use). Most software sold as as a web server adds lots of features such as loadable modules, native APIs, server extensions etc.