You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@locus.apache.org on 2000/05/02 21:58:42 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util CookieTools.java HttpDate.java MimeHeaderField.java
costin 00/05/02 12:58:42
Modified: src/share/org/apache/tomcat/util CookieTools.java
HttpDate.java MimeHeaderField.java
Log:
- Moved the date format from CookieTool to HttpDate, it's better to have
all of them in one place
- moved getBytes from HttpDate to MimeHeaderField, it's easier to understand
it.
I found HttpDate a bit difficult to read - I would prefer to keep static
helper methods for date formating separated from the actual date storage.
JDK1.1+ is using the same aproach - the format/parse code is separated
from the actual date representation.
The date code seems to be very expensive, according to perf. tests - another
argument to do the change when some time will be available.
Revision Changes Path
1.6 +5 -11 jakarta-tomcat/src/share/org/apache/tomcat/util/CookieTools.java
Index: CookieTools.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/CookieTools.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- CookieTools.java 2000/05/02 19:19:22 1.5
+++ CookieTools.java 2000/05/02 19:58:41 1.6
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/CookieTools.java,v 1.5 2000/05/02 19:19:22 costin Exp $
- * $Revision: 1.5 $
- * $Date: 2000/05/02 19:19:22 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/CookieTools.java,v 1.6 2000/05/02 19:58:41 costin Exp $
+ * $Revision: 1.6 $
+ * $Date: 2000/05/02 19:58:41 $
*
* ====================================================================
*
@@ -77,14 +77,8 @@
* @author duncan@eng.sun.com
*/
public class CookieTools {
- static String pattern = "EEE, dd-MMM-yyyy HH:mm:ss z";
- static Locale loc = Locale.US;
- static TimeZone zone = TimeZone.getTimeZone("GMT");
- static SimpleDateFormat df = new SimpleDateFormat(pattern, loc);
+
static FieldPosition FieldPosition0=new FieldPosition(0);
- static {
- df.setTimeZone(zone);
- }
/** Return the header name to set the cookie, based on cookie
* version
@@ -142,7 +136,7 @@
if (cookie.getMaxAge() >= 0) {
if (version == 0) {
buf.append (";Expires=");
- df.format(new Date( System.currentTimeMillis() + cookie.getMaxAge() *1000) ,buf, FieldPosition0 );
+ HttpDate.oldCookieFormat.format(new Date( System.currentTimeMillis() + cookie.getMaxAge() *1000) ,buf, FieldPosition0 );
} else {
buf.append (";Max-Age=");
buf.append (cookie.getMaxAge());
1.4 +42 -43 jakarta-tomcat/src/share/org/apache/tomcat/util/HttpDate.java
Index: HttpDate.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/HttpDate.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- HttpDate.java 2000/02/14 04:59:42 1.3
+++ HttpDate.java 2000/05/02 19:58:41 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/HttpDate.java,v 1.3 2000/02/14 04:59:42 costin Exp $
- * $Revision: 1.3 $
- * $Date: 2000/02/14 04:59:42 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/HttpDate.java,v 1.4 2000/05/02 19:58:41 costin Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/05/02 19:58:41 $
*
* ====================================================================
*
@@ -80,26 +80,22 @@
* @author Jason Hunter [jch@eng.sun.com]
* @author James Todd [gonzo@eng.sun.com]
*/
-
public class HttpDate extends Ascii {
- private StringManager sm =
+ private static StringManager sm =
StringManager.getManager("org.apache.tomcat.util");
-
- // ONLY FOR COMPAT -- KILL ASAP -- just make sure that dependant
- // classes know what's up. ref. MimeHeaderField
- private static final String DATESTR = "Sun, 06 Nov 1994 08:49:37 GMT";
- public static final int DATELEN = DATESTR.length();
- // END COMPAT -- DON'T FORGET TO KILL
-
- // we force our locale here as all http dates are in english
- private final static Locale loc = Locale.US;
-
- // all http dates are expressed as time at GMT
- private final static TimeZone zone = TimeZone.getTimeZone("GMT");
- // format for RFC 1123 date string -- "Sun, 06 Nov 1994 08:49:37 GMT"
- private final static String rfc1123Pattern =
+ /** US locale - all HTTP dates are in english
+ */
+ public final static Locale LOCALE_US = Locale.US;
+
+ /** GMT timezone - all HTTP dates are on GMT
+ */
+ public final static TimeZone GMT_ZONE = TimeZone.getTimeZone("GMT");
+
+ /** format for RFC 1123 date string -- "Sun, 06 Nov 1994 08:49:37 GMT"
+ */
+ public final static String RFC1123_PATTERN =
"EEE, dd MMM yyyyy HH:mm:ss z";
// format for RFC 1036 date string -- "Sunday, 06-Nov-94 08:49:37 GMT"
@@ -110,24 +106,37 @@
private final static String asctimePattern =
"EEE MMM d HH:mm:ss yyyyy";
- private final static SimpleDateFormat rfc1123Format =
- new SimpleDateFormat(rfc1123Pattern, loc);
+ /** Pattern used for old cookies
+ */
+ public final static String OLD_COOKIE_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z";
+
+
+ /** DateFormat to be used to format dates
+ */
+ public final static SimpleDateFormat rfc1123Format =
+ new SimpleDateFormat(RFC1123_PATTERN, LOCALE_US);
+
+ /** DateFormat to be used to format old netscape cookies
+ */
+ public final static SimpleDateFormat oldCookieFormat =
+ new SimpleDateFormat(OLD_COOKIE_PATTERN, LOCALE_US);
- private final static SimpleDateFormat rfc1036Format =
- new SimpleDateFormat(rfc1036Pattern, loc);
+ public final static SimpleDateFormat rfc1036Format =
+ new SimpleDateFormat(rfc1036Pattern, LOCALE_US);
- private final static SimpleDateFormat asctimeFormat =
- new SimpleDateFormat(asctimePattern, loc);
+ public final static SimpleDateFormat asctimeFormat =
+ new SimpleDateFormat(asctimePattern, LOCALE_US);
static {
- rfc1123Format.setTimeZone(zone);
- rfc1036Format.setTimeZone(zone);
- asctimeFormat.setTimeZone(zone);
+ rfc1123Format.setTimeZone(GMT_ZONE);
+ oldCookieFormat.setTimeZone(GMT_ZONE);
+ rfc1036Format.setTimeZone(GMT_ZONE);
+ asctimeFormat.setTimeZone(GMT_ZONE);
}
// protected so that oldcookieexpiry in cookieutils can use
// yes, this is sloppy as crap and could stand to be done better.
- protected Calendar calendar = new GregorianCalendar(zone, loc);
+ protected Calendar calendar = new GregorianCalendar(GMT_ZONE, LOCALE_US);
public HttpDate() {
calendar.setTime(new Date(System.currentTimeMillis()));
@@ -198,21 +207,11 @@
return calendar.getTime().getTime();
}
+ public Calendar getCalendar() {
+ return calendar;
+ }
+
public static long getCurrentTime() {
return System.currentTimeMillis();
}
-
- // KILL, THIS IS ONLY HERE FOR TEMP COMPAT as MimeHeaderField uses it.
- public int getBytes(byte[] buf, int off, int len) {
- if (len < DATELEN) {
- String msg = sm.getString("httpDate.iae", new Integer(len));
-
- throw new IllegalArgumentException(msg);
- }
-
- String dateString = rfc1123Format.format(calendar.getTime());
- byte[] b = dateString.getBytes();
- System.arraycopy(b, 0, buf, off, DATELEN);
- return DATELEN;
- }
}
1.4 +18 -6 jakarta-tomcat/src/share/org/apache/tomcat/util/MimeHeaderField.java
Index: MimeHeaderField.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/MimeHeaderField.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MimeHeaderField.java 2000/02/16 17:46:58 1.3
+++ MimeHeaderField.java 2000/05/02 19:58:41 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/MimeHeaderField.java,v 1.3 2000/02/16 17:46:58 costin Exp $
- * $Revision: 1.3 $
- * $Date: 2000/02/16 17:46:58 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/MimeHeaderField.java,v 1.4 2000/05/02 19:58:41 costin Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/05/02 19:58:41 $
*
* ====================================================================
*
@@ -100,7 +100,7 @@
/**
* The header field Date value.
*/
-
+
protected final HttpDate dateValue = new HttpDate(0);
/**
@@ -326,8 +326,8 @@
buf_offset += intGetBytes(intValue, buf, buf_offset);
break;
case T_DATE:
- buf_offset += dateValue.getBytes(buf, buf_offset,
- HttpDate.DATELEN);
+ buf_offset += getBytes(dateValue, buf, buf_offset,
+ DATELEN);
break;
}
@@ -337,6 +337,18 @@
return buf_offset - start_pt;
}
+
+ private static final String DATESTR = "Sun, 06 Nov 1994 08:49:37 GMT";
+ private static final int DATELEN = DATESTR.length();
+
+ private int getBytes(HttpDate dateValue, byte[] buf, int off, int len) {
+ String dateString = HttpDate.rfc1123Format.format(dateValue.getCalendar().getTime());
+ byte[] b = dateString.getBytes();
+ System.arraycopy(b, 0, buf, off, DATELEN);
+ return DATELEN;
+ }
+
+
/**
* Parses a header field from a subarray of bytes.
* @param b the bytes to parse