var somePackage = somePackage || {};
somePackage.createServlet = function() {
	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++) + "</p>");
			resp.getWriter().write("<p>" + this.getServletInfo() + "</p>");
			resp.getWriter().write("<p>" + this.getLastModified(req) + "</p>");
			resp.getWriter().write("<p> init parameter: test = " + this.getServletConfig().getInitParameter("test") + "</p>");
			resp.getWriter().write("</body></html>");
		},
		"getServletInfo" : function() {
			return "JavaScript Servlet";
		}
	};
	return new JavaAdapter(Packages.javax.servlet.http.HttpServlet, o);
}