From a design point of view, this actually makes things much easier, because it means you can apply all your HTML knowledge when designing servlets. You can design the user interface, putting in dummy static data where necessary, and then start writing your servlet so that it outputs the HTML you've written, and any images needed. Note that each request only gets one response, so to get a page with two pictures on it, there are three requests. Firstly, the browser requests the HTML for the page, eg index.html Secondly, having read the HTML, it notices that there are two img tags, so it requests each of the images. As far as the servlet programmer is concerned, these are separate requests.
Frames are similar to images - there's one request for the frameset, then one request per frame.
Stick to the idea that each HTML page you've written corresponds to one request, and everything should work like magic. Loading and saving files in servlets One problem people have which isn't related to the above is to do with local files on the server, and how to load them. Relative files would actually be relative to the working directory of the servlet container. That isn't defined in the servlet specification, and will vary between different containers. The way to overcome this is to use filenames which are relative to a known absolute filename, usually specified in the configuration parameters for a servlet.