diff --git a/src/helma/servlet/AbstractServletClient.java b/src/helma/servlet/AbstractServletClient.java
index 7e4a6ac4..61fcb7f8 100644
--- a/src/helma/servlet/AbstractServletClient.java
+++ b/src/helma/servlet/AbstractServletClient.java
@@ -26,10 +26,11 @@ public abstract class AbstractServletClient extends HttpServlet {
String host = null;
// port of Helma RMI server
int port = 0;
- // limit to HTTP uploads in kB
- int uploadLimit = 1024;
// RMI url of Helma app
String hopUrl;
+
+ // limit to HTTP uploads in kB
+ int uploadLimit = 1024;
// cookie domain to use
String cookieDomain;
// default encoding for requests
@@ -44,35 +45,19 @@ public abstract class AbstractServletClient extends HttpServlet {
public void init (ServletConfig init) throws ServletException {
super.init (init);
-
- host = init.getInitParameter ("host");
- if (host == null) host = "localhost";
-
- String portstr = init.getInitParameter ("port");
- port = portstr == null ? 5055 : Integer.parseInt (portstr);
-
+ // get max size for file uploads
String upstr = init.getInitParameter ("uploadLimit");
uploadLimit = upstr == null ? 1024 : Integer.parseInt (upstr);
-
+ // get cookie domain
cookieDomain = init.getInitParameter ("cookieDomain");
-
- hopUrl = "//" + host + ":" + port + "/";
-
+ // get default encoding
defaultEncoding = init.getInitParameter ("charset");
-
debug = ("true".equalsIgnoreCase (init.getInitParameter ("debug")));
-
caching = ! ("false".equalsIgnoreCase (init.getInitParameter ("caching")));
}
- abstract IRemoteApp getApp (String appID) throws Exception;
-
- abstract void invalidateApp (String appID);
-
- abstract String getAppID (String reqpath);
-
- abstract String getRequestPath (String reqpath);
+ abstract ResponseTrans execute (RequestTrans req, String reqPath) throws Exception;
public void doGet (HttpServletRequest request, HttpServletResponse response)
@@ -90,11 +75,11 @@ public abstract class AbstractServletClient extends HttpServlet {
String protocol = request.getProtocol ();
Cookie[] cookies = request.getCookies();
- // get app and path from original request path
- String pathInfo = request.getPathInfo ();
- String appID = getAppID (pathInfo);
RequestTrans reqtrans = new RequestTrans (method);
- reqtrans.path = getRequestPath (pathInfo);
+ // get app and path from original request path
+ // String pathInfo = request.getPathInfo ();
+ // String appID = getAppID (pathInfo);
+ // reqtrans.path = getRequestPath (pathInfo);
try {
@@ -126,10 +111,13 @@ public abstract class AbstractServletClient extends HttpServlet {
}
}
} catch (Exception upx) {
- String uploadErr = upx.getMessage ();
+ response.setStatus (HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
+ writeError (response, "Sorry, upload size exceeds limit of "+uploadLimit+"kB.");
+ return;
+ /* String uploadErr = upx.getMessage ();
if (uploadErr == null || uploadErr.length () == 0)
uploadErr = upx.toString ();
- reqtrans.set ("uploadError", uploadErr);
+ reqtrans.set ("uploadError", uploadErr); */
}
}
@@ -187,30 +175,18 @@ public abstract class AbstractServletClient extends HttpServlet {
if ( authorization != null )
reqtrans.set ("authorization", authorization );
- // get RMI ref to application and execute request
- IRemoteApp app = getApp (appID);
- ResponseTrans restrans = null;
- try {
- restrans = app.execute (reqtrans);
- } catch (RemoteException cnx) {
- invalidateApp (appID);
- app = getApp (appID);
- app.ping ();
- restrans = app.execute (reqtrans);
- }
+ String pathInfo = request.getPathInfo ();
+ ResponseTrans restrans = execute (reqtrans, pathInfo);
+
writeResponse (response, restrans, cookies, protocol);
} catch (Exception x) {
- invalidateApp (appID);
- try {
- response.setContentType ("text/html");
- Writer out = response.getWriter ();
- if (debug)
- out.write ("Error:
" +x);
- else
- out.write ("This server is temporarily unavailable. Please check back later.");
- out.flush ();
- } catch (Exception io_e) {}
+ // invalidateApp (appID);
+ response.setStatus (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ if (debug)
+ writeError (response, "Error:
" +x);
+ else
+ writeError (response, "This server is temporarily unavailable. Please check back later.");
}
}
@@ -271,19 +247,30 @@ public abstract class AbstractServletClient extends HttpServlet {
}
- public FileUpload getUpload (HttpServletRequest request) throws Exception {
+ void writeError (HttpServletResponse res, String message) {
+ try {
+ res.setContentType ("text/html");
+ Writer out = res.getWriter ();
+ out.write (message);
+ out.flush ();
+ } catch (Exception io_e) {
+ // ignore
+ }
+ }
+
+ FileUpload getUpload (HttpServletRequest request) throws Exception {
int contentLength = request.getContentLength ();
BufferedInputStream in = new BufferedInputStream (request.getInputStream ());
if (contentLength > uploadLimit*1024) {
// consume all input to make Apache happy
- byte b[] = new byte[4096];
+ /* byte b[] = new byte[4096];
int read = 0;
int sum = 0;
while (read > -1 && sum < contentLength) {
read = in.read (b, 0, 4096);
if (read > 0)
sum += read;
- }
+ } */
throw new RuntimeException ("Upload exceeds limit of "+uploadLimit+" kb.");
}
String contentType = request.getContentType ();
@@ -293,7 +280,7 @@ public abstract class AbstractServletClient extends HttpServlet {
}
- public Object getUploadPart(FileUpload upload, String name) {
+ Object getUploadPart(FileUpload upload, String name) {
return upload.getParts().get(name);
}
diff --git a/src/helma/servlet/EmbeddedServletClient.java b/src/helma/servlet/EmbeddedServletClient.java
index 5af8ddc6..97d2afac 100644
--- a/src/helma/servlet/EmbeddedServletClient.java
+++ b/src/helma/servlet/EmbeddedServletClient.java
@@ -39,21 +39,14 @@ public final class EmbeddedServletClient extends AbstractServletClient {
mountpoint = "/"+appName;
}
- IRemoteApp getApp (String appID) {
+ ResponseTrans execute (RequestTrans req, String reqPath) throws Exception {
+ req.path = getRequestPath (reqPath);
if (app == null)
app = Server.getServer().getApplication (appName);
- return app;
+ return app.execute (req);
}
- void invalidateApp (String appID) {
- // do nothing
- }
-
- String getAppID (String path) {
- return appName;
- }
-
String getRequestPath (String path) {
if (path == null)
return "";
diff --git a/src/helma/servlet/MultiServletClient.java b/src/helma/servlet/MultiServletClient.java
index d758fdf0..43b635f8 100644
--- a/src/helma/servlet/MultiServletClient.java
+++ b/src/helma/servlet/MultiServletClient.java
@@ -10,7 +10,7 @@ import java.io.*;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.HashMap;
-import helma.framework.IRemoteApp;
+import helma.framework.*;
/**
* This is the HOP servlet adapter. This class communicates with any
@@ -25,7 +25,19 @@ public class MultiServletClient extends AbstractServletClient {
public void init (ServletConfig init) throws ServletException {
super.init (init);
apps = new HashMap ();
- super.init (init);
+ host = init.getInitParameter ("host");
+ if (host == null)
+ host = "localhost";
+ String portstr = init.getInitParameter ("port");
+ port = portstr == null ? 5055 : Integer.parseInt (portstr);
+ hopUrl = "//" + host + ":" + port + "/";
+ }
+
+ ResponseTrans execute (RequestTrans req, String reqPath) throws Exception {
+ String appID = getAppID (reqPath);
+ IRemoteApp app = getApp (appID);
+ req.path = getRequestPath (reqPath);
+ return app.execute (req);
}
IRemoteApp getApp (String appID) throws Exception {
@@ -89,7 +101,7 @@ public class MultiServletClient extends AbstractServletClient {
// for testing
public static void main (String args[]) {
- AbstractServletClient client = new MultiServletClient ();
+ MultiServletClient client = new MultiServletClient ();
// String path = "///appname/do/it/for/me///";
String path = "appname";
System.out.println (client.getAppID (path));
@@ -98,21 +110,3 @@ public class MultiServletClient extends AbstractServletClient {
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/helma/servlet/ServletClient.java b/src/helma/servlet/ServletClient.java
index 0dccd4c0..53f492ff 100644
--- a/src/helma/servlet/ServletClient.java
+++ b/src/helma/servlet/ServletClient.java
@@ -24,9 +24,21 @@ public class ServletClient extends AbstractServletClient {
public void init (ServletConfig init) throws ServletException {
super.init (init);
appName = init.getInitParameter ("application");
+ host = init.getInitParameter ("host");
+ if (host == null)
+ host = "localhost";
+ String portstr = init.getInitParameter ("port");
+ port = portstr == null ? 5055 : Integer.parseInt (portstr);
+ hopUrl = "//" + host + ":" + port + "/";
}
- IRemoteApp getApp (String appID) throws Exception {
+ ResponseTrans execute (RequestTrans req, String reqPath) throws Exception {
+ IRemoteApp app = getApp ();
+ req.path = getRequestPath (reqPath);
+ return app.execute (req);
+ }
+
+ IRemoteApp getApp () throws Exception {
if (app != null)
return app;
if (appName == null)
@@ -35,13 +47,6 @@ public class ServletClient extends AbstractServletClient {
return app;
}
- void invalidateApp (String appID) {
- app = null;
- }
-
- String getAppID (String path) {
- return appName;
- }
String getRequestPath (String path) {
// get request path
@@ -67,9 +72,9 @@ public class ServletClient extends AbstractServletClient {
// for testing
public static void main (String args[]) {
- AbstractServletClient client = new ServletClient ();
+ ServletClient client = new ServletClient ();
String path = "///appname/some/random/path///";
- System.out.println (client.getAppID (path));
+ // System.out.println (client.getAppID (path));
System.out.println (client.getRequestPath (path));
}
diff --git a/src/helma/servlet/StandaloneServletClient.java b/src/helma/servlet/StandaloneServletClient.java
index f49ed8ab..aa1bfa7c 100644
--- a/src/helma/servlet/StandaloneServletClient.java
+++ b/src/helma/servlet/StandaloneServletClient.java
@@ -47,12 +47,14 @@ public final class StandaloneServletClient extends AbstractServletClient {
throw new ServletException ("dbdir parameter not specified");
}
- IRemoteApp getApp (String appID) {
+ ResponseTrans execute (RequestTrans req, String reqPath) throws Exception {
+ req.path = getRequestPath (reqPath);
if (app == null)
createApp ();
- return app;
+ return app.execute (req);
}
+
/**
* Create the application. Since we are synchronized only here, we
* do another check if the app already exists and immediately return if it does.
@@ -89,9 +91,6 @@ public final class StandaloneServletClient extends AbstractServletClient {
app = null;
}
- void invalidateApp (String appID) {
- // app = null;
- }
String getAppID (String path) {
return appName;
@@ -121,7 +120,7 @@ public final class StandaloneServletClient extends AbstractServletClient {
// for testing
public static void main (String args[]) {
- AbstractServletClient client = new ServletClient ();
+ StandaloneServletClient client = new StandaloneServletClient ();
String path = "///appname/some/random/path///";
System.out.println (client.getAppID (path));
System.out.println (client.getRequestPath (path));