
function FibonacciServlet() {
	var count = 0;
	var o = {
		
		"service" : function(req, resp) {
			this.super$service(req, resp); // this is very important
		},
		"doGet" : function(req, resp) {
			resp.getWriter().write("<html><body>");
			resp.getWriter().write("<p>" + req.getMethod() + "</p>");
			resp.getWriter().write("<p>Hello JavaScript World - count: " + (++count) + "</p>");
			resp.getWriter().write("<p> Fibonacci (" + count + "): " + sample.fib(count) + "</p>");
			resp.getWriter().write("</html></body>");
		},
		"getServletInfo" : function() {
			return "JavaScript Servlet";
		}
	};
	return new JavaAdapter(Packages.javax.servlet.http.HttpServlet, o);
}