public class BaseHttpServlet : HttpServlet
{
//private AppDomain _servletDomain;
- static LocalDataStoreSlot _servletRequestSlot = Thread.GetNamedDataSlot(J2EEConsts.SERVLET_REQUEST);
- static LocalDataStoreSlot _servletResponseSlot = Thread.GetNamedDataSlot(J2EEConsts.SERVLET_RESPONSE);
- static LocalDataStoreSlot _servletSlot = Thread.GetNamedDataSlot(J2EEConsts.CURRENT_SERVLET);
+ static readonly LocalDataStoreSlot _servletRequestSlot = Thread.GetNamedDataSlot(J2EEConsts.SERVLET_REQUEST);
+ static readonly LocalDataStoreSlot _servletResponseSlot = Thread.GetNamedDataSlot(J2EEConsts.SERVLET_RESPONSE);
+ static readonly LocalDataStoreSlot _servletSlot = Thread.GetNamedDataSlot(J2EEConsts.CURRENT_SERVLET);
+
+ bool _performedInit = false;
public BaseHttpServlet()
{
protected virtual void InitServlet(ServletConfig config)
{
+ if (config.getServletContext().getAttribute(J2EEConsts.APP_DOMAIN) != null)
+ return;
+
try
{
AppDomain servletDomain = createServletDomain(config);
servletDomain.SetData(J2EEConsts.RESOURCE_LOADER, new vmw.@internal.j2ee.ServletResourceLoader(config.getServletContext()));
config.getServletContext().setAttribute(J2EEConsts.APP_DOMAIN, servletDomain);
+ _performedInit = true;
}
finally
{
}
}
- override protected void service (HttpServletRequest req, HttpServletResponse resp)
+ protected override void service (HttpServletRequest req, HttpServletResponse resp)
+ {
+ resp.setContentType("text/html");
+ service(req, resp, resp.getOutputStream());
+ }
+
+ public virtual void service(HttpServletRequest req, HttpServletResponse resp, java.io.OutputStream output)
{
try
{
// Put to the TLS current AppDomain of the servlet, so anyone can use it.
vmw.@internal.EnvironmentUtils.setAppDomain(servletDomain);
- //put request to the TLS
+ // put request to the TLS
Thread.SetData(_servletRequestSlot, req);
- //put response to the TLS
+ // put response to the TLS
Thread.SetData(_servletResponseSlot, resp);
- //put the servlet object to the TLS
+ // put the servlet object to the TLS
Thread.SetData(_servletSlot, this);
-
-
resp.setHeader("X-Powered-By", "ASP.NET");
resp.setHeader("X-AspNet-Version", "1.1.4322");
- //PageMapper.LoadFileList();
-
- resp.setContentType("text/html");
- HttpWorkerRequest gwr = new ServletWorkerRequest(this, req, resp);
+ HttpWorkerRequest gwr = new ServletWorkerRequest(this, req, resp, output);
HttpRuntime.ProcessRequest(gwr);
}
finally
Thread.SetData(_servletResponseSlot, null);
Thread.SetData(_servletSlot, null);
vmw.@internal.EnvironmentUtils.clearAppDomain();
- //cleaning
- //vmw.Utils.cleanTLS(); //clean up all TLS entries for current Thread.
- //java.lang.Thread.currentThread().setContextClassLoader(null);
}
}
override public void destroy()
{
+ base.destroy();
+ if (!_performedInit)
+ return;
+
try
{
AppDomain servletDomain = (AppDomain)this.getServletContext().getAttribute(J2EEConsts.APP_DOMAIN);
#if DEBUG
Console.WriteLine("Destroy of GhHttpServlet");
#endif
- base.destroy();
HttpRuntime.Close();
vmw.@internal.EnvironmentUtils.cleanAllBeforeServletDestroy(this);
this.getServletContext().removeAttribute(J2EEConsts.APP_DOMAIN);
servletDomain.SetData(IAppDomainConfig.WEB_APP_DIR, rootPath);
//Set DataDirectory substitution string (http://blogs.msdn.com/dataaccess/archive/2005/10/28/486273.aspx)
- string dataDirectory = config.getServletContext().getInitParameter ("DataDirectory");
+ string dataDirectory = J2EEUtils.GetInitParameterByHierarchy(config, "DataDirectory");
if (dataDirectory == null)
dataDirectory = "APP_DATA";