You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2021/09/22 13:21:29 UTC
[tomcat] 01/05: Remove deprecated code from the Servlet API
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 28aad28a317d262115fcc8afdd4d85e82cab51aa
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Sep 22 11:17:58 2021 +0100
Remove deprecated code from the Servlet API
---
java/jakarta/servlet/ServletContext.java | 65 -----
java/jakarta/servlet/ServletRequest.java | 9 -
java/jakarta/servlet/ServletRequestWrapper.java | 12 -
java/jakarta/servlet/SingleThreadModel.java | 43 ----
java/jakarta/servlet/UnavailableException.java | 60 -----
java/jakarta/servlet/http/HttpServletRequest.java | 8 -
.../servlet/http/HttpServletRequestWrapper.java | 12 -
java/jakarta/servlet/http/HttpServletResponse.java | 36 ---
.../servlet/http/HttpServletResponseWrapper.java | 36 ---
java/jakarta/servlet/http/HttpSession.java | 57 -----
java/jakarta/servlet/http/HttpSessionContext.java | 53 ----
java/jakarta/servlet/http/HttpUtils.java | 281 ---------------------
webapps/docs/changelog.xml | 4 +
13 files changed, 4 insertions(+), 672 deletions(-)
diff --git a/java/jakarta/servlet/ServletContext.java b/java/jakarta/servlet/ServletContext.java
index 301a3e0..fcac8be 100644
--- a/java/jakarta/servlet/ServletContext.java
+++ b/java/jakarta/servlet/ServletContext.java
@@ -299,57 +299,6 @@ public interface ServletContext {
public RequestDispatcher getNamedDispatcher(String name);
/**
- * Do not use. This method was originally defined to retrieve a servlet from
- * a <code>ServletContext</code>. In this version, this method always
- * returns <code>null</code> and remains only to preserve binary
- * compatibility. This method will be permanently removed in a future
- * version of the Java Servlet API.
- * <p>
- * In lieu of this method, servlets can share information using the
- * <code>ServletContext</code> class and can perform shared business logic
- * by invoking methods on common non-servlet classes.
- *
- * @param name Not used
- *
- * @return Always <code>null</code>
- *
- * @throws ServletException never
- *
- * @deprecated As of Java Servlet API 2.1, with no direct replacement.
- */
- @Deprecated
- public Servlet getServlet(String name) throws ServletException;
-
- /**
- * Do not use. This method was originally defined to return an
- * <code>Enumeration</code> of all the servlets known to this servlet
- * context. In this version, this method always returns an empty enumeration
- * and remains only to preserve binary compatibility. This method will be
- * permanently removed in a future version of the Java Servlet API.
- *
- * @return Always and empty Enumeration
- *
- * @deprecated As of Java Servlet API 2.0, with no replacement.
- */
- @Deprecated
- public Enumeration<Servlet> getServlets();
-
- /**
- * Do not use. This method was originally defined to return an
- * <code>Enumeration</code> of all the servlet names known to this context.
- * In this version, this method always returns an empty
- * <code>Enumeration</code> and remains only to preserve binary
- * compatibility. This method will be permanently removed in a future
- * version of the Java Servlet API.
- *
- * @return Always and empty Enumeration
- *
- * @deprecated As of Java Servlet API 2.1, with no replacement.
- */
- @Deprecated
- public Enumeration<String> getServletNames();
-
- /**
* Writes the specified message to a servlet log file, usually an event log.
* The name and type of the servlet log file is specific to the servlet
* container.
@@ -361,20 +310,6 @@ public interface ServletContext {
public void log(String msg);
/**
- * Do not use.
- * @param exception The exception to log
- * @param msg The message to log with the exception
- * @deprecated As of Java Servlet API 2.1, use
- * {@link #log(String message, Throwable throwable)} instead.
- * <p>
- * This method was originally defined to write an exception's
- * stack trace and an explanatory error message to the servlet
- * log file.
- */
- @Deprecated
- public void log(Exception exception, String msg);
-
- /**
* Writes an explanatory message and a stack trace for a given
* <code>Throwable</code> exception to the servlet log file. The name and
* type of the servlet log file is specific to the servlet container,
diff --git a/java/jakarta/servlet/ServletRequest.java b/java/jakarta/servlet/ServletRequest.java
index 1d0bbdd..4bb3206 100644
--- a/java/jakarta/servlet/ServletRequest.java
+++ b/java/jakarta/servlet/ServletRequest.java
@@ -404,15 +404,6 @@ public interface ServletRequest {
public RequestDispatcher getRequestDispatcher(String path);
/**
- * @param path The virtual path to be converted to a real path
- * @return {@link ServletContext#getRealPath(String)}
- * @deprecated As of Version 2.1 of the Java Servlet API, use
- * {@link ServletContext#getRealPath} instead.
- */
- @Deprecated
- public String getRealPath(String path);
-
- /**
* Returns the Internet Protocol (IP) source port of the client or last
* proxy that sent the request.
*
diff --git a/java/jakarta/servlet/ServletRequestWrapper.java b/java/jakarta/servlet/ServletRequestWrapper.java
index 67ec408..fb5bcf7 100644
--- a/java/jakarta/servlet/ServletRequestWrapper.java
+++ b/java/jakarta/servlet/ServletRequestWrapper.java
@@ -303,18 +303,6 @@ public class ServletRequestWrapper implements ServletRequest {
}
/**
- * The default behavior of this method is to return getRealPath(String path)
- * on the wrapped request object.
- *
- * @deprecated As of Version 3.0 of the Java Servlet API
- */
- @Override
- @Deprecated
- public String getRealPath(String path) {
- return this.request.getRealPath(path);
- }
-
- /**
* The default behavior of this method is to return getRemotePort() on the
* wrapped request object.
*
diff --git a/java/jakarta/servlet/SingleThreadModel.java b/java/jakarta/servlet/SingleThreadModel.java
deleted file mode 100644
index 26e8caa..0000000
--- a/java/jakarta/servlet/SingleThreadModel.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package jakarta.servlet;
-
-/**
- * Ensures that servlets handle only one request at a time. This interface has
- * no methods.
- * <p>
- * If a servlet implements this interface, you are <i>guaranteed</i> that no two
- * threads will execute concurrently in the servlet's <code>service</code>
- * method. The servlet container can make this guarantee by synchronizing access
- * to a single instance of the servlet, or by maintaining a pool of servlet
- * instances and dispatching each new request to a free servlet.
- * <p>
- * Note that SingleThreadModel does not solve all thread safety issues. For
- * example, session attributes and static variables can still be accessed by
- * multiple requests on multiple threads at the same time, even when
- * SingleThreadModel servlets are used. It is recommended that a developer take
- * other means to resolve those issues instead of implementing this interface,
- * such as avoiding the usage of an instance variable or synchronizing the block
- * of the code accessing those resources. This interface is deprecated in
- * Servlet API version 2.4.
- *
- * @deprecated As of Java Servlet API 2.4, with no direct replacement.
- */
-@Deprecated
-public interface SingleThreadModel {
- // No methods
-}
diff --git a/java/jakarta/servlet/UnavailableException.java b/java/jakarta/servlet/UnavailableException.java
index 73132ee..2f9073b 100644
--- a/java/jakarta/servlet/UnavailableException.java
+++ b/java/jakarta/servlet/UnavailableException.java
@@ -43,11 +43,6 @@ public class UnavailableException extends ServletException {
private static final long serialVersionUID = 1L;
/**
- * The Servlet that is unavailable.
- */
- private final Servlet servlet;
-
- /**
* Is the issue permanent - i.e. is administrator action required?
*/
private final boolean permanent;
@@ -58,47 +53,6 @@ public class UnavailableException extends ServletException {
private final int seconds;
/**
- * @param servlet
- * the <code>Servlet</code> instance that is unavailable
- * @param msg
- * a <code>String</code> specifying the descriptive message
- * @deprecated As of Java Servlet API 2.2, use
- * {@link #UnavailableException(String)} instead.
- */
- @Deprecated
- public UnavailableException(Servlet servlet, String msg) {
- super(msg);
- this.servlet = servlet;
- permanent = true;
- this.seconds = 0;
- }
-
- /**
- * @param seconds
- * an integer specifying the number of seconds the servlet
- * expects to be unavailable; if zero or negative, indicates that
- * the servlet can't make an estimate
- * @param servlet
- * the <code>Servlet</code> that is unavailable
- * @param msg
- * a <code>String</code> specifying the descriptive message,
- * which can be written to a log file or displayed for the user.
- * @deprecated As of Java Servlet API 2.2, use
- * {@link #UnavailableException(String, int)} instead.
- */
- @Deprecated
- public UnavailableException(int seconds, Servlet servlet, String msg) {
- super(msg);
- this.servlet = servlet;
- if (seconds <= 0) {
- this.seconds = -1;
- } else {
- this.seconds = seconds;
- }
- permanent = false;
- }
-
- /**
* Constructs a new exception with a descriptive message indicating that the
* servlet is permanently unavailable.
*
@@ -108,7 +62,6 @@ public class UnavailableException extends ServletException {
public UnavailableException(String msg) {
super(msg);
seconds = 0;
- servlet = null;
permanent = true;
}
@@ -139,7 +92,6 @@ public class UnavailableException extends ServletException {
} else {
this.seconds = seconds;
}
- servlet = null;
permanent = false;
}
@@ -157,18 +109,6 @@ public class UnavailableException extends ServletException {
}
/**
- * Returns the servlet that is reporting its unavailability.
- *
- * @return the <code>Servlet</code> object that is throwing the
- * <code>UnavailableException</code>
- * @deprecated As of Java Servlet API 2.2, with no replacement.
- */
- @Deprecated
- public Servlet getServlet() {
- return servlet;
- }
-
- /**
* Returns the number of seconds the servlet expects to be temporarily
* unavailable.
* <p>
diff --git a/java/jakarta/servlet/http/HttpServletRequest.java b/java/jakarta/servlet/http/HttpServletRequest.java
index 1984299..1bd2bcb 100644
--- a/java/jakarta/servlet/http/HttpServletRequest.java
+++ b/java/jakarta/servlet/http/HttpServletRequest.java
@@ -473,14 +473,6 @@ public interface HttpServletRequest extends ServletRequest {
public boolean isRequestedSessionIdFromURL();
/**
- * @return {@link #isRequestedSessionIdFromURL()}
- * @deprecated As of Version 2.1 of the Java Servlet API, use
- * {@link #isRequestedSessionIdFromURL} instead.
- */
- @Deprecated
- public boolean isRequestedSessionIdFromUrl();
-
- /**
* Triggers the same authentication process as would be triggered if the
* request is for a resource that is protected by a security constraint.
*
diff --git a/java/jakarta/servlet/http/HttpServletRequestWrapper.java b/java/jakarta/servlet/http/HttpServletRequestWrapper.java
index 12f54c1..1125561 100644
--- a/java/jakarta/servlet/http/HttpServletRequestWrapper.java
+++ b/java/jakarta/servlet/http/HttpServletRequestWrapper.java
@@ -290,18 +290,6 @@ public class HttpServletRequestWrapper extends ServletRequestWrapper implements
}
/**
- * The default behavior of this method is to return
- * isRequestedSessionIdFromUrl() on the wrapped request object.
- *
- * @deprecated As of Version 3.0 of the Java Servlet API
- */
- @Override
- @Deprecated
- public boolean isRequestedSessionIdFromUrl() {
- return this._getHttpServletRequest().isRequestedSessionIdFromUrl();
- }
-
- /**
* {@inheritDoc}
* <p>
* The default behavior of this method is to return
diff --git a/java/jakarta/servlet/http/HttpServletResponse.java b/java/jakarta/servlet/http/HttpServletResponse.java
index 4fb5538..479e75a 100644
--- a/java/jakarta/servlet/http/HttpServletResponse.java
+++ b/java/jakarta/servlet/http/HttpServletResponse.java
@@ -91,31 +91,10 @@ public interface HttpServletResponse extends ServletResponse {
* @return the encoded URL if encoding is needed; the unchanged URL
* otherwise.
* @see #sendRedirect
- * @see #encodeUrl
*/
public String encodeRedirectURL(String url);
/**
- * @param url
- * the url to be encoded.
- * @return the encoded URL if encoding is needed; the unchanged URL
- * otherwise.
- * @deprecated As of version 2.1, use encodeURL(String url) instead
- */
- @Deprecated
- public String encodeUrl(String url);
-
- /**
- * @param url
- * the url to be encoded.
- * @return the encoded URL if encoding is needed; the unchanged URL
- * otherwise.
- * @deprecated As of version 2.1, use encodeRedirectURL(String url) instead
- */
- @Deprecated
- public String encodeRedirectUrl(String url);
-
- /**
* Sends an error response to the client using the specified status code and
* clears the output buffer. The server defaults to creating the response to
* look like an HTML-formatted server error page containing the specified
@@ -280,21 +259,6 @@ public interface HttpServletResponse extends ServletResponse {
public void setStatus(int sc);
/**
- * Sets the status code and message for this response.
- *
- * @param sc
- * the status code
- * @param sm
- * the status message
- * @deprecated As of version 2.1, due to ambiguous meaning of the message
- * parameter. To set a status code use
- * <code>setStatus(int)</code>, to send an error with a
- * description use <code>sendError(int, String)</code>.
- */
- @Deprecated
- public void setStatus(int sc, String sm);
-
- /**
* Get the HTTP status code for this Response.
*
* @return The HTTP status code for this Response
diff --git a/java/jakarta/servlet/http/HttpServletResponseWrapper.java b/java/jakarta/servlet/http/HttpServletResponseWrapper.java
index 582a667..bc64609 100644
--- a/java/jakarta/servlet/http/HttpServletResponseWrapper.java
+++ b/java/jakarta/servlet/http/HttpServletResponseWrapper.java
@@ -88,30 +88,6 @@ public class HttpServletResponseWrapper extends ServletResponseWrapper
}
/**
- * The default behavior of this method is to call encodeUrl(String url) on
- * the wrapped response object.
- *
- * @deprecated As of Version 3.0 of the Java Servlet API
- */
- @Override
- @Deprecated
- public String encodeUrl(String url) {
- return this._getHttpServletResponse().encodeUrl(url);
- }
-
- /**
- * The default behavior of this method is to return encodeRedirectUrl(String
- * url) on the wrapped response object.
- *
- * @deprecated As of Version 3.0 of the Java Servlet API
- */
- @Override
- @Deprecated
- public String encodeRedirectUrl(String url) {
- return this._getHttpServletResponse().encodeRedirectUrl(url);
- }
-
- /**
* The default behavior of this method is to call sendError(int sc, String
* msg) on the wrapped response object.
*/
@@ -202,18 +178,6 @@ public class HttpServletResponseWrapper extends ServletResponseWrapper
}
/**
- * The default behavior of this method is to call setStatus(int sc, String
- * sm) on the wrapped response object.
- *
- * @deprecated As of Version 3.0 of the Java Servlet API
- */
- @Override
- @Deprecated
- public void setStatus(int sc, String sm) {
- this._getHttpServletResponse().setStatus(sc, sm);
- }
-
- /**
* {@inheritDoc}
* <p>
* The default implementation is to call
diff --git a/java/jakarta/servlet/http/HttpSession.java b/java/jakarta/servlet/http/HttpSession.java
index 9b03f0d..e712347 100644
--- a/java/jakarta/servlet/http/HttpSession.java
+++ b/java/jakarta/servlet/http/HttpSession.java
@@ -135,16 +135,6 @@ public interface HttpSession {
public int getMaxInactiveInterval();
/**
- * Do not use.
- * @return A dummy implementation of HttpSessionContext
- * @deprecated As of Version 2.1, this method is deprecated and has no
- * replacement. It will be removed in a future version of the
- * Java Servlet API.
- */
- @Deprecated
- public HttpSessionContext getSessionContext();
-
- /**
* Returns the object bound with the specified name in this session, or
* <code>null</code> if no object is bound under the name.
*
@@ -157,18 +147,6 @@ public interface HttpSession {
public Object getAttribute(String name);
/**
- * @param name
- * a string specifying the name of the object
- * @return the object with the specified name
- * @exception IllegalStateException
- * if this method is called on an invalidated session
- * @deprecated As of Version 2.2, this method is replaced by
- * {@link #getAttribute}.
- */
- @Deprecated
- public Object getValue(String name);
-
- /**
* Returns an <code>Enumeration</code> of <code>String</code> objects
* containing the names of all the objects bound to this session.
*
@@ -180,17 +158,6 @@ public interface HttpSession {
public Enumeration<String> getAttributeNames();
/**
- * @return an array of <code>String</code> objects specifying the names of
- * all the objects bound to this session
- * @exception IllegalStateException
- * if this method is called on an invalidated session
- * @deprecated As of Version 2.2, this method is replaced by
- * {@link #getAttributeNames}
- */
- @Deprecated
- public String[] getValueNames();
-
- /**
* Binds an object to this session, using the name specified. If an object
* of the same name is already bound to the session, the object is replaced.
* <p>
@@ -217,19 +184,6 @@ public interface HttpSession {
public void setAttribute(String name, Object value);
/**
- * @param name
- * the name to which the object is bound; cannot be null
- * @param value
- * the object to be bound; cannot be null
- * @exception IllegalStateException
- * if this method is called on an invalidated session
- * @deprecated As of Version 2.2, this method is replaced by
- * {@link #setAttribute}
- */
- @Deprecated
- public void putValue(String name, Object value);
-
- /**
* Removes the object bound with the specified name from this session. If
* the session does not have an object bound with the specified name, this
* method does nothing.
@@ -248,17 +202,6 @@ public interface HttpSession {
public void removeAttribute(String name);
/**
- * @param name
- * the name of the object to remove from this session
- * @exception IllegalStateException
- * if this method is called on an invalidated session
- * @deprecated As of Version 2.2, this method is replaced by
- * {@link #removeAttribute}
- */
- @Deprecated
- public void removeValue(String name);
-
- /**
* Invalidates this session then unbinds any objects bound to it.
*
* @exception IllegalStateException
diff --git a/java/jakarta/servlet/http/HttpSessionContext.java b/java/jakarta/servlet/http/HttpSessionContext.java
deleted file mode 100644
index e54aa59..0000000
--- a/java/jakarta/servlet/http/HttpSessionContext.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package jakarta.servlet.http;
-
-import java.util.Enumeration;
-
-/**
- * Do not use.
- * @deprecated As of Java(tm) Servlet API 2.1 for security reasons, with no
- * replacement. This interface will be removed in a future version
- * of this API.
- * @see HttpSession
- * @see HttpSessionBindingEvent
- * @see HttpSessionBindingListener
- */
-@Deprecated
-public interface HttpSessionContext {
-
- /**
- * Do not use.
- * @param sessionId Ignored
- * @return Always <code>null</code>
- * @deprecated As of Java Servlet API 2.1 with no replacement. This method
- * must return null and will be removed in a future version of
- * this API.
- */
- @Deprecated
- public HttpSession getSession(String sessionId);
-
- /**
- * Do not use.
- * @return Always an empty Enumeration
- * @deprecated As of Java Servlet API 2.1 with no replacement. This method
- * must return an empty <code>Enumeration</code> and will be
- * removed in a future version of this API.
- */
- @Deprecated
- public Enumeration<String> getIds();
-}
diff --git a/java/jakarta/servlet/http/HttpUtils.java b/java/jakarta/servlet/http/HttpUtils.java
deleted file mode 100644
index b3d6bfd..0000000
--- a/java/jakarta/servlet/http/HttpUtils.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package jakarta.servlet.http;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.ResourceBundle;
-import java.util.StringTokenizer;
-
-import jakarta.servlet.ServletInputStream;
-
-/**
- * @deprecated As of Java(tm) Servlet API 2.3.
- * These methods were only useful
- * with the default encoding and have been moved
- * to the request interfaces.
- */
-@Deprecated
-public class HttpUtils {
-
- private static final String LSTRING_FILE =
- "jakarta.servlet.http.LocalStrings";
- private static final ResourceBundle lStrings =
- ResourceBundle.getBundle(LSTRING_FILE);
-
-
- /**
- * Constructs an empty <code>HttpUtils</code> object.
- *
- */
- public HttpUtils() {
- // NOOP
- }
-
-
- /**
- *
- * Parses a query string passed from the client to the
- * server and builds a <code>HashTable</code> object
- * with key-value pairs.
- * The query string should be in the form of a string
- * packaged by the GET or POST method, that is, it
- * should have key-value pairs in the form <i>key=value</i>,
- * with each pair separated from the next by a & character.
- *
- * <p>A key can appear more than once in the query string
- * with different values. However, the key appears only once in
- * the hashtable, with its value being
- * an array of strings containing the multiple values sent
- * by the query string.
- *
- * <p>The keys and values in the hashtable are stored in their
- * decoded form, so
- * any + characters are converted to spaces, and characters
- * sent in hexadecimal notation (like <i>%xx</i>) are
- * converted to ASCII characters.
- *
- * @param s a string containing the query to be parsed
- *
- * @return a <code>HashTable</code> object built
- * from the parsed key-value pairs
- *
- * @exception IllegalArgumentException if the query string
- * is invalid
- *
- */
- public static Hashtable<String,String[]> parseQueryString(String s) {
-
- String valArray[] = null;
-
- if (s == null) {
- throw new IllegalArgumentException();
- }
- Hashtable<String,String[]> ht = new Hashtable<>();
- StringBuilder sb = new StringBuilder();
- StringTokenizer st = new StringTokenizer(s, "&");
- while (st.hasMoreTokens()) {
- String pair = st.nextToken();
- int pos = pair.indexOf('=');
- if (pos == -1) {
- // XXX
- // should give more detail about the illegal argument
- throw new IllegalArgumentException();
- }
- String key = parseName(pair.substring(0, pos), sb);
- String val = parseName(pair.substring(pos+1), sb);
- if (ht.containsKey(key)) {
- String oldVals[] = ht.get(key);
- valArray = Arrays.copyOf(oldVals, oldVals.length + 1);
- valArray[oldVals.length] = val;
- } else {
- valArray = new String[1];
- valArray[0] = val;
- }
- ht.put(key, valArray);
- }
- return ht;
- }
-
-
- /**
- *
- * Parses data from an HTML form that the client sends to
- * the server using the HTTP POST method and the
- * <i>application/x-www-form-urlencoded</i> MIME type.
- *
- * <p>The data sent by the POST method contains key-value
- * pairs. A key can appear more than once in the POST data
- * with different values. However, the key appears only once in
- * the hashtable, with its value being
- * an array of strings containing the multiple values sent
- * by the POST method.
- *
- * <p>The keys and values in the hashtable are stored in their
- * decoded form, so
- * any + characters are converted to spaces, and characters
- * sent in hexadecimal notation (like <i>%xx</i>) are
- * converted to ASCII characters.
- *
- *
- *
- * @param len an integer specifying the length,
- * in characters, of the
- * <code>ServletInputStream</code>
- * object that is also passed to this
- * method
- *
- * @param in the <code>ServletInputStream</code>
- * object that contains the data sent
- * from the client
- *
- * @return a <code>HashTable</code> object built
- * from the parsed key-value pairs
- *
- *
- * @exception IllegalArgumentException if the data
- * sent by the POST method is invalid
- *
- */
- public static Hashtable<String,String[]> parsePostData(int len,
- ServletInputStream in) {
- // XXX
- // should a length of 0 be an IllegalArgumentException
-
- // cheap hack to return an empty hash
- if (len <= 0) {
- return new Hashtable<>();
- }
-
- if (in == null) {
- throw new IllegalArgumentException();
- }
-
- // Make sure we read the entire POSTed body.
- byte[] postedBytes = new byte [len];
- try {
- int offset = 0;
-
- do {
- int inputLen = in.read (postedBytes, offset, len - offset);
- if (inputLen <= 0) {
- String msg = lStrings.getString("err.io.short_read");
- throw new IllegalArgumentException (msg);
- }
- offset += inputLen;
- } while ((len - offset) > 0);
-
- } catch (IOException e) {
- throw new IllegalArgumentException(e.getMessage(), e);
- }
-
- // XXX we shouldn't assume that the only kind of POST body
- // is FORM data encoded using ASCII or ISO Latin/1 ... or
- // that the body should always be treated as FORM data.
- try {
- String postedBody = new String(postedBytes, 0, len, "8859_1");
- return parseQueryString(postedBody);
- } catch (java.io.UnsupportedEncodingException e) {
- // XXX function should accept an encoding parameter & throw this
- // exception. Otherwise throw something expected.
- throw new IllegalArgumentException(e.getMessage(), e);
- }
- }
-
-
- /*
- * Parse a name in the query string.
- */
- private static String parseName(String s, StringBuilder sb) {
- sb.setLength(0);
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- switch (c) {
- case '+':
- sb.append(' ');
- break;
- case '%':
- try {
- sb.append((char) Integer.parseInt(s.substring(i+1, i+3),
- 16));
- i += 2;
- } catch (NumberFormatException e) {
- // XXX
- // need to be more specific about illegal arg
- throw new IllegalArgumentException();
- } catch (StringIndexOutOfBoundsException e) {
- String rest = s.substring(i);
- sb.append(rest);
- if (rest.length() == 2) {
- i++;
- }
- }
-
- break;
- default:
- sb.append(c);
- break;
- }
- }
- return sb.toString();
- }
-
-
- /**
- *
- * Reconstructs the URL the client used to make the request,
- * using information in the <code>HttpServletRequest</code> object.
- * The returned URL contains a protocol, server name, port
- * number, and server path, but it does not include query
- * string parameters.
- *
- * <p>Because this method returns a <code>StringBuffer</code>,
- * not a string, you can modify the URL easily, for example,
- * to append query parameters.
- *
- * <p>This method is useful for creating redirect messages
- * and for reporting errors.
- *
- * @param req a <code>HttpServletRequest</code> object
- * containing the client's request
- *
- * @return a <code>StringBuffer</code> object containing
- * the reconstructed URL
- *
- */
- public static StringBuffer getRequestURL (HttpServletRequest req) {
- StringBuffer url = new StringBuffer ();
- String scheme = req.getScheme ();
- int port = req.getServerPort ();
- String urlPath = req.getRequestURI();
-
- url.append (scheme); // http, https
- url.append ("://");
- url.append (req.getServerName ());
- if ((scheme.equals ("http") && port != 80) || (scheme.equals ("https") && port != 443)) {
- url.append (':');
- url.append (req.getServerPort ());
- }
-
- url.append(urlPath);
- return url;
- }
-}
-
-
-
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 1345bce..e596cf1 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -115,6 +115,10 @@
Fix delete then create object manipulations with
<code>DataSourceUserDatabase</code>. (remm)
</fix>
+ <update>
+ Remove all deprecated code from the Servlet API to align Tomcat with
+ recent changes in the Jakarta Servlet specification project. (markt)
+ </update>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org