summaryrefslogtreecommitdiff
path: root/sapi/servlet/servlet.java
diff options
context:
space:
mode:
authorSam Ruby <rubys@php.net>2000-04-01 17:57:42 +0000
committerSam Ruby <rubys@php.net>2000-04-01 17:57:42 +0000
commit34933225f63aba3598fd50d754e7dacd997e06d5 (patch)
treebb412066291af6f89dcb039bae6a4e759449db7a /sapi/servlet/servlet.java
parenteffa5bb024a3ebf717d18c5471bc082ab63c135a (diff)
downloadphp-git-34933225f63aba3598fd50d754e7dacd997e06d5.tar.gz
Accomodate back level (JSDK 2.0) implementations
Diffstat (limited to 'sapi/servlet/servlet.java')
-rw-r--r--sapi/servlet/servlet.java40
1 files changed, 35 insertions, 5 deletions
diff --git a/sapi/servlet/servlet.java b/sapi/servlet/servlet.java
index 817957d622..1ffc32bbc1 100644
--- a/sapi/servlet/servlet.java
+++ b/sapi/servlet/servlet.java
@@ -24,6 +24,8 @@ import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;
+import java.lang.reflect.Method;
+
public class servlet extends HttpServlet {
char slash=System.getProperty("file.separator").charAt(0);
@@ -34,6 +36,7 @@ public class servlet extends HttpServlet {
static int startup_count = 0;
protected boolean display_source_mode = false;
+ private Method addHeader;
/******************************************************************/
/* native methods */
@@ -78,6 +81,10 @@ public class servlet extends HttpServlet {
}
void header(String data) {
+
+ // try to send the header using the most specific servlet API
+ // as possible (some servlet engines will add a content type
+ // header unless the setContentType method is called).
try {
if (data.startsWith("Content-type: ")) {
response.setContentType(data.substring(data.indexOf(" ")+1));
@@ -86,22 +93,27 @@ public class servlet extends HttpServlet {
} else {
int colon = data.indexOf(": ");
if (colon > 0) {
- response.addHeader(data.substring(0,colon),
- data.substring(colon+2));
+ try {
+ addHeader.invoke(response, new Object[]
+ { data.substring(0,colon), data.substring(colon+2) } );
+ } catch (Exception e) {
+ e.printStackTrace(System.err);
+ }
} else {
response.getWriter().println(data);
}
}
} catch (IOException e) {
- System.err.print(data);
+ e.printStackTrace(System.err);
}
+
}
void write(String data) {
try {
response.getWriter().print(data);
} catch (IOException e) {
- System.err.print(data);
+ e.printStackTrace(System.err);
}
}
@@ -112,6 +124,24 @@ public class servlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
if (0 == startup_count++) startup();
+
+ // try to find the addHeader method (added in the servlet API 2.2)
+ // otherwise settle for the setHeader method
+ try {
+ Class c = Class.forName("javax.servlet.http.HttpServletResponse");
+ Method method[] = c.getDeclaredMethods();
+ for (int i=0; i<method.length; i++) {
+ if (method[i].getName().equals("addHeader")) {
+ addHeader = method[i];
+ break;
+ }
+ if (method[i].getName().equals("setHeader")) {
+ addHeader = method[i];
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace(System.err);
+ }
}
public void service(HttpServletRequest request,
@@ -132,7 +162,7 @@ public class servlet extends HttpServlet {
try {
if (stream != null) stream.close();
} catch (IOException e) {
- throw new ServletException(e);
+ throw new ServletException(e.toString());
}
}