mods prior to backport to 2.5 API. These changes should be in both 7 and 8

git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@17 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
Greg Wilkins 2009-03-27 05:42:33 +00:00
parent 24f7971e10
commit 9f386395e7
17 changed files with 183 additions and 205 deletions

View File

@ -41,21 +41,31 @@ import org.eclipse.jetty.util.UrlEncoded;
*/ */
public class Dispatcher implements RequestDispatcher public class Dispatcher implements RequestDispatcher
{ {
/*
public static final String FORWARD_REQUEST_URI = "javax.servlet.forward.request_uri";
public static final String FORWARD_CONTEXT_PATH = "javax.servlet.forward.context_path";
public static final String FORWARD_PATH_INFO = "javax.servlet.forward.path_info";
public static final String FORWARD_SERVLET_PATH = "javax.servlet.forward.servlet_path";
public static final String FORWARD_QUERY_STRING = "javax.servlet.forward.query_string";
public static final String INCLUDE_REQUEST_URI = "javax.servlet.include.request_uri";
public static final String INCLUDE_CONTEXT_PATH = "javax.servlet.include.context_path";
public static final String INCLUDE_PATH_INFO = "javax.servlet.include.path_info";
public static final String INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path";
public static final String INCLUDE_QUERY_STRING = "javax.servlet.include.query_string";
public static final String ERROR_EXCEPTION = "javax.servlet.error.exception";
public static final String ERROR_EXCEPTION_TYPE = "javax.servlet.error.exception_type";
public static final String ERROR_MESSAGE = "javax.servlet.error.message";
public static final String ERROR_REQUEST_URI = "javax.servlet.error.request_uri";
public static final String ERROR_SERVLET_NAME = "javax.servlet.error.servlet_name";
public static final String ERROR_STATUS_CODE = "javax.servlet.error.status_code";
*/
/** Dispatch include attribute names */ /** Dispatch include attribute names */
public final static String __INCLUDE_PREFIX="javax.servlet.include."; public final static String __INCLUDE_PREFIX="javax.servlet.include.";
public final static String __INCLUDE_REQUEST_URI= INCLUDE_REQUEST_URI;
public final static String __INCLUDE_CONTEXT_PATH= INCLUDE_CONTEXT_PATH;
public final static String __INCLUDE_SERVLET_PATH= INCLUDE_SERVLET_PATH;
public final static String __INCLUDE_PATH_INFO= INCLUDE_PATH_INFO;
public final static String __INCLUDE_QUERY_STRING= INCLUDE_QUERY_STRING;
/** Dispatch include attribute names */ /** Dispatch include attribute names */
public final static String __FORWARD_PREFIX="javax.servlet.forward."; public final static String __FORWARD_PREFIX="javax.servlet.forward.";
public final static String __FORWARD_REQUEST_URI= FORWARD_REQUEST_URI;
public final static String __FORWARD_CONTEXT_PATH= FORWARD_CONTEXT_PATH;
public final static String __FORWARD_SERVLET_PATH= FORWARD_SERVLET_PATH;
public final static String __FORWARD_PATH_INFO= FORWARD_PATH_INFO;
public final static String __FORWARD_QUERY_STRING= FORWARD_QUERY_STRING;
/** JSP attributes */ /** JSP attributes */
public final static String __JSP_FILE="org.apache.catalina.jsp_file"; public final static String __JSP_FILE="org.apache.catalina.jsp_file";
@ -293,13 +303,13 @@ public class Dispatcher implements RequestDispatcher
//original value. Otherwise, this is the first forward and we need to establish the values. //original value. Otherwise, this is the first forward and we need to establish the values.
//Note: the established value on the original request for pathInfo and //Note: the established value on the original request for pathInfo and
//for queryString is allowed to be null, but cannot be null for the other values. //for queryString is allowed to be null, but cannot be null for the other values.
if ((String)old_attr.getAttribute(__FORWARD_REQUEST_URI) != null) if ((String)old_attr.getAttribute(FORWARD_REQUEST_URI) != null)
{ {
attr._pathInfo=(String)old_attr.getAttribute(__FORWARD_PATH_INFO); attr._pathInfo=(String)old_attr.getAttribute(FORWARD_PATH_INFO);
attr._query=(String)old_attr.getAttribute(__FORWARD_QUERY_STRING); attr._query=(String)old_attr.getAttribute(FORWARD_QUERY_STRING);
attr._requestURI=(String)old_attr.getAttribute(__FORWARD_REQUEST_URI); attr._requestURI=(String)old_attr.getAttribute(FORWARD_REQUEST_URI);
attr._contextPath=(String)old_attr.getAttribute(__FORWARD_CONTEXT_PATH); attr._contextPath=(String)old_attr.getAttribute(FORWARD_CONTEXT_PATH);
attr._servletPath=(String)old_attr.getAttribute(__FORWARD_SERVLET_PATH); attr._servletPath=(String)old_attr.getAttribute(FORWARD_SERVLET_PATH);
} }
else else
{ {
@ -368,15 +378,15 @@ public class Dispatcher implements RequestDispatcher
{ {
if (Dispatcher.this._named==null) if (Dispatcher.this._named==null)
{ {
if (key.equals(__FORWARD_PATH_INFO)) if (key.equals(FORWARD_PATH_INFO))
return _pathInfo; return _pathInfo;
if (key.equals(__FORWARD_REQUEST_URI)) if (key.equals(FORWARD_REQUEST_URI))
return _requestURI; return _requestURI;
if (key.equals(__FORWARD_SERVLET_PATH)) if (key.equals(FORWARD_SERVLET_PATH))
return _servletPath; return _servletPath;
if (key.equals(__FORWARD_CONTEXT_PATH)) if (key.equals(FORWARD_CONTEXT_PATH))
return _contextPath; return _contextPath;
if (key.equals(__FORWARD_QUERY_STRING)) if (key.equals(FORWARD_QUERY_STRING))
return _query; return _query;
} }
@ -402,16 +412,16 @@ public class Dispatcher implements RequestDispatcher
if (_named==null) if (_named==null)
{ {
if (_pathInfo!=null) if (_pathInfo!=null)
set.add(__FORWARD_PATH_INFO); set.add(FORWARD_PATH_INFO);
else else
set.remove(__FORWARD_PATH_INFO); set.remove(FORWARD_PATH_INFO);
set.add(__FORWARD_REQUEST_URI); set.add(FORWARD_REQUEST_URI);
set.add(__FORWARD_SERVLET_PATH); set.add(FORWARD_SERVLET_PATH);
set.add(__FORWARD_CONTEXT_PATH); set.add(FORWARD_CONTEXT_PATH);
if (_query!=null) if (_query!=null)
set.add(__FORWARD_QUERY_STRING); set.add(FORWARD_QUERY_STRING);
else else
set.remove(__FORWARD_QUERY_STRING); set.remove(FORWARD_QUERY_STRING);
} }
return Collections.enumeration(set); return Collections.enumeration(set);
@ -422,15 +432,15 @@ public class Dispatcher implements RequestDispatcher
{ {
if (_named==null && key.startsWith("javax.servlet.")) if (_named==null && key.startsWith("javax.servlet."))
{ {
if (key.equals(__FORWARD_PATH_INFO)) if (key.equals(FORWARD_PATH_INFO))
_pathInfo=(String)value; _pathInfo=(String)value;
else if (key.equals(__FORWARD_REQUEST_URI)) else if (key.equals(FORWARD_REQUEST_URI))
_requestURI=(String)value; _requestURI=(String)value;
else if (key.equals(__FORWARD_SERVLET_PATH)) else if (key.equals(FORWARD_SERVLET_PATH))
_servletPath=(String)value; _servletPath=(String)value;
else if (key.equals(__FORWARD_CONTEXT_PATH)) else if (key.equals(FORWARD_CONTEXT_PATH))
_contextPath=(String)value; _contextPath=(String)value;
else if (key.equals(__FORWARD_QUERY_STRING)) else if (key.equals(FORWARD_QUERY_STRING))
_query=(String)value; _query=(String)value;
else if (value==null) else if (value==null)
@ -486,11 +496,11 @@ public class Dispatcher implements RequestDispatcher
{ {
if (Dispatcher.this._named==null) if (Dispatcher.this._named==null)
{ {
if (key.equals(__INCLUDE_PATH_INFO)) return _pathInfo; if (key.equals(INCLUDE_PATH_INFO)) return _pathInfo;
if (key.equals(__INCLUDE_SERVLET_PATH)) return _servletPath; if (key.equals(INCLUDE_SERVLET_PATH)) return _servletPath;
if (key.equals(__INCLUDE_CONTEXT_PATH)) return _contextPath; if (key.equals(INCLUDE_CONTEXT_PATH)) return _contextPath;
if (key.equals(__INCLUDE_QUERY_STRING)) return _query; if (key.equals(INCLUDE_QUERY_STRING)) return _query;
if (key.equals(__INCLUDE_REQUEST_URI)) return _requestURI; if (key.equals(INCLUDE_REQUEST_URI)) return _requestURI;
} }
else if (key.startsWith(__INCLUDE_PREFIX)) else if (key.startsWith(__INCLUDE_PREFIX))
return null; return null;
@ -514,16 +524,16 @@ public class Dispatcher implements RequestDispatcher
if (_named==null) if (_named==null)
{ {
if (_pathInfo!=null) if (_pathInfo!=null)
set.add(__INCLUDE_PATH_INFO); set.add(INCLUDE_PATH_INFO);
else else
set.remove(__INCLUDE_PATH_INFO); set.remove(INCLUDE_PATH_INFO);
set.add(__INCLUDE_REQUEST_URI); set.add(INCLUDE_REQUEST_URI);
set.add(__INCLUDE_SERVLET_PATH); set.add(INCLUDE_SERVLET_PATH);
set.add(__INCLUDE_CONTEXT_PATH); set.add(INCLUDE_CONTEXT_PATH);
if (_query!=null) if (_query!=null)
set.add(__INCLUDE_QUERY_STRING); set.add(INCLUDE_QUERY_STRING);
else else
set.remove(__INCLUDE_QUERY_STRING); set.remove(INCLUDE_QUERY_STRING);
} }
return Collections.enumeration(set); return Collections.enumeration(set);
@ -534,11 +544,11 @@ public class Dispatcher implements RequestDispatcher
{ {
if (_named==null && key.startsWith("javax.servlet.")) if (_named==null && key.startsWith("javax.servlet."))
{ {
if (key.equals(__INCLUDE_PATH_INFO)) _pathInfo=(String)value; if (key.equals(INCLUDE_PATH_INFO)) _pathInfo=(String)value;
else if (key.equals(__INCLUDE_REQUEST_URI)) _requestURI=(String)value; else if (key.equals(INCLUDE_REQUEST_URI)) _requestURI=(String)value;
else if (key.equals(__INCLUDE_SERVLET_PATH)) _servletPath=(String)value; else if (key.equals(INCLUDE_SERVLET_PATH)) _servletPath=(String)value;
else if (key.equals(__INCLUDE_CONTEXT_PATH)) _contextPath=(String)value; else if (key.equals(INCLUDE_CONTEXT_PATH)) _contextPath=(String)value;
else if (key.equals(__INCLUDE_QUERY_STRING)) _query=(String)value; else if (key.equals(INCLUDE_QUERY_STRING)) _query=(String)value;
else if (value==null) else if (value==null)
_attr.removeAttribute(key); _attr.removeAttribute(key);
else else

View File

@ -1,45 +0,0 @@
// ========================================================================
// Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
package org.eclipse.jetty.server;
import javax.servlet.http.Cookie;
/* ------------------------------------------------------------ */
/** HttpOnlyCookie.
*
* <p>
* Implements {@link javax.servlet.Cookie} from the {@link javax.servlet} package.
* </p>
* This derivation of javax.servlet.http.Cookie can be used to indicate
* that the microsoft httponly extension should be used.
* The addSetCookie method on HttpFields checks for this type.
* @deprecated use {@link javax.servlet.Cookie#setHttpOnly(boolean)}
*
*
*/
public class HttpOnlyCookie extends Cookie
{
/* ------------------------------------------------------------ */
/**
* @param name
* @param value
*/
public HttpOnlyCookie(String name, String value)
{
super(name, value);
setHttpOnly(true);
}
}

View File

@ -49,6 +49,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.HttpHeaders; import org.eclipse.jetty.http.HttpHeaders;
import org.eclipse.jetty.http.HttpMethods; import org.eclipse.jetty.http.HttpMethods;
@ -341,11 +342,11 @@ public class Request implements HttpServletRequest
if (DispatcherType.ASYNC.equals(_dispatcherType)) if (DispatcherType.ASYNC.equals(_dispatcherType))
{ {
// TODO handle forwards(path!) // TODO handle forwards(path!)
if (name.equals(Dispatcher.__FORWARD_PATH_INFO)) return getPathInfo(); if (name.equals(Dispatcher.FORWARD_PATH_INFO)) return getPathInfo();
if (name.equals(Dispatcher.__FORWARD_REQUEST_URI)) return getRequestURI(); if (name.equals(Dispatcher.FORWARD_REQUEST_URI)) return getRequestURI();
if (name.equals(Dispatcher.__FORWARD_SERVLET_PATH)) return getServletPath(); if (name.equals(Dispatcher.FORWARD_SERVLET_PATH)) return getServletPath();
if (name.equals(Dispatcher.__FORWARD_CONTEXT_PATH)) return getContextPath(); if (name.equals(Dispatcher.FORWARD_CONTEXT_PATH)) return getContextPath();
if (name.equals(Dispatcher.__FORWARD_QUERY_STRING)) return getQueryString(); if (name.equals(Dispatcher.FORWARD_QUERY_STRING)) return getQueryString();
} }
if (_attributes==null) if (_attributes==null)
@ -1165,7 +1166,7 @@ public class Request implements HttpServletRequest
if (_session == null && _sessionManager!=null && create ) if (_session == null && _sessionManager!=null && create )
{ {
_session=_sessionManager.newHttpSession(this); _session=_sessionManager.newHttpSession(this);
Cookie cookie=_sessionManager.getSessionCookie(_session,getContextPath(),isSecure()); HttpCookie cookie=_sessionManager.getSessionCookie(_session,getContextPath(),isSecure());
if (cookie!=null) if (cookie!=null)
_connection.getResponse().addCookie(cookie); _connection.getResponse().addCookie(cookie);
} }

View File

@ -26,6 +26,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.eclipse.jetty.http.Generator; import org.eclipse.jetty.http.Generator;
import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.HttpGenerator; import org.eclipse.jetty.http.HttpGenerator;
import org.eclipse.jetty.http.HttpHeaderValues; import org.eclipse.jetty.http.HttpHeaderValues;
@ -121,6 +122,15 @@ public class Response implements HttpServletResponse
_writer=null; _writer=null;
} }
/* ------------------------------------------------------------ */
/*
* @see javax.servlet.http.HttpServletResponse#addCookie(javax.servlet.http.Cookie)
*/
public void addCookie(HttpCookie cookie)
{
_connection.getResponseFields().addSetCookie(cookie);
}
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
* @see javax.servlet.http.HttpServletResponse#addCookie(javax.servlet.http.Cookie) * @see javax.servlet.http.HttpServletResponse#addCookie(javax.servlet.http.Cookie)
@ -134,7 +144,7 @@ public class Response implements HttpServletResponse
cookie.getMaxAge(), cookie.getMaxAge(),
cookie.getComment(), cookie.getComment(),
cookie.getSecure(), cookie.getSecure(),
cookie.isHttpOnly(), false,//cookie.isHttpOnly(),
cookie.getVersion()); cookie.getVersion());
} }
@ -286,10 +296,10 @@ public class Response implements HttpServletResponse
if (error_handler!=null) if (error_handler!=null)
{ {
// TODO - probably should reset these after the request? // TODO - probably should reset these after the request?
request.setAttribute(RequestDispatcher.ERROR_STATUS_CODE,new Integer(code)); request.setAttribute(Dispatcher.ERROR_STATUS_CODE,new Integer(code));
request.setAttribute(RequestDispatcher.ERROR_MESSAGE, message); request.setAttribute(Dispatcher.ERROR_MESSAGE, message);
request.setAttribute(RequestDispatcher.ERROR_REQUEST_URI, request.getRequestURI()); request.setAttribute(Dispatcher.ERROR_REQUEST_URI, request.getRequestURI());
request.setAttribute(RequestDispatcher.ERROR_SERVLET_NAME,request.getServletName()); request.setAttribute(Dispatcher.ERROR_SERVLET_NAME,request.getServletName());
error_handler.handle(null,_connection.getRequest(),this); error_handler.handle(null,_connection.getRequest(),this);
} }

View File

@ -15,10 +15,10 @@ package org.eclipse.jetty.server;
import java.util.EventListener; import java.util.EventListener;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.server.session.SessionHandler; import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.util.component.LifeCycle; import org.eclipse.jetty.util.component.LifeCycle;
@ -177,7 +177,7 @@ public interface SessionManager extends LifeCycle
* {@link Cookie cookie object} that should be set on the client in order to link future HTTP requests * {@link Cookie cookie object} that should be set on the client in order to link future HTTP requests
* with the <code>session</code>. If cookies are not in use, this method returns <code>null</code>. * with the <code>session</code>. If cookies are not in use, this method returns <code>null</code>.
*/ */
public Cookie getSessionCookie(HttpSession session, String contextPath, boolean requestIsSecure); public HttpCookie getSessionCookie(HttpSession session, String contextPath, boolean requestIsSecure);
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/** /**
@ -235,7 +235,7 @@ public interface SessionManager extends LifeCycle
* the session or to refresh a session cookie that may expire. * the session or to refresh a session cookie that may expire.
* @see #complete(HttpSession) * @see #complete(HttpSession)
*/ */
public Cookie access(HttpSession session, boolean secure); public HttpCookie access(HttpSession session, boolean secure);
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/** /**

View File

@ -675,10 +675,10 @@ public class ContextHandler extends HandlerWrapper implements Attributes, Server
public void handle(String target, HttpServletRequest request, HttpServletResponse response) public void handle(String target, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException throws IOException, ServletException
{ {
Request baseRequest=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest(); Request base_request=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest();
DispatcherType dispatch=request.getDispatcherType(); DispatcherType dispatch=base_request.getDispatcherType();
if( !isStarted() || _shutdown || (DispatcherType.REQUEST.equals(dispatch) && baseRequest.isHandled())) if( !isStarted() || _shutdown || (DispatcherType.REQUEST.equals(dispatch) && base_request.isHandled()))
return; return;
// Check the vhosts // Check the vhosts
@ -719,7 +719,7 @@ public class ContextHandler extends HandlerWrapper implements Attributes, Server
if (_contextPath.length()==target.length() && _contextPath.length()>1 &&!_allowNullPathInfo) if (_contextPath.length()==target.length() && _contextPath.length()>1 &&!_allowNullPathInfo)
{ {
// context request must end with / // context request must end with /
baseRequest.setHandled(true); base_request.setHandled(true);
if (request.getQueryString()!=null) if (request.getQueryString()!=null)
response.sendRedirect(URIUtil.addPaths(request.getRequestURI(),URIUtil.SLASH)+"?"+request.getQueryString()); response.sendRedirect(URIUtil.addPaths(request.getRequestURI(),URIUtil.SLASH)+"?"+request.getQueryString());
else else
@ -733,7 +733,7 @@ public class ContextHandler extends HandlerWrapper implements Attributes, Server
return; return;
} }
doHandle(target,baseRequest,request,response); doHandle(target,base_request,request,response);
} }
@ -753,7 +753,7 @@ public class ContextHandler extends HandlerWrapper implements Attributes, Server
Thread current_thread=null; Thread current_thread=null;
String pathInfo=null; String pathInfo=null;
DispatcherType dispatch=request.getDispatcherType(); DispatcherType dispatch=baseRequest.getDispatcherType();
old_context=baseRequest.getContext(); old_context=baseRequest.getContext();

View File

@ -20,6 +20,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.HttpConnection;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.RequestLog; import org.eclipse.jetty.server.RequestLog;
import org.eclipse.jetty.server.Response; import org.eclipse.jetty.server.Response;
@ -47,7 +48,8 @@ public class RequestLogHandler extends HandlerWrapper
throws IOException, ServletException throws IOException, ServletException
{ {
super.handle(target, request, response); super.handle(target, request, response);
if (DispatcherType.REQUEST.equals(request.getDispatcherType()) && _requestLog!=null) Request base_request=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest();
if (DispatcherType.REQUEST.equals(base_request.getDispatcherType()) && _requestLog!=null)
_requestLog.log((Request)request, (Response)response); _requestLog.log((Request)request, (Response)response);
} }

View File

@ -138,7 +138,7 @@ public class StatisticsHandler extends HandlerWrapper implements CompleteHandler
_requestsActiveDurationMax=duration; _requestsActiveDurationMax=duration;
if(request.isAsyncStarted()) if(base_request.isAsyncStarted())
{ {
Object list = base_request.getAttribute(COMPLETE_HANDLER_ATTR); Object list = base_request.getAttribute(COMPLETE_HANDLER_ATTR);
base_request.setAttribute(COMPLETE_HANDLER_ATTR, LazyList.add(list, this)); base_request.setAttribute(COMPLETE_HANDLER_ATTR, LazyList.add(list, this));

View File

@ -34,6 +34,7 @@ import javax.servlet.http.HttpSessionContext;
import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionListener;
import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.SessionIdManager; import org.eclipse.jetty.server.SessionIdManager;
import org.eclipse.jetty.server.SessionManager; import org.eclipse.jetty.server.SessionManager;
@ -97,7 +98,7 @@ public abstract class AbstractSessionManager extends AbstractLifeCycle implement
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
public Cookie access(HttpSession session,boolean secure) public HttpCookie access(HttpSession session,boolean secure)
{ {
long now=System.currentTimeMillis(); long now=System.currentTimeMillis();
@ -111,7 +112,7 @@ public abstract class AbstractSessionManager extends AbstractLifeCycle implement
) )
) )
{ {
Cookie cookie=getSessionCookie(session,_context.getContextPath(),secure); HttpCookie cookie=getSessionCookie(session,_context.getContextPath(),secure);
s.cookieSet(); s.cookieSet();
s.setIdChanged(false); s.setIdChanged(false);
return cookie; return cookie;
@ -308,23 +309,19 @@ public abstract class AbstractSessionManager extends AbstractLifeCycle implement
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
public Cookie getSessionCookie(HttpSession session, String contextPath, boolean requestIsSecure) public HttpCookie getSessionCookie(HttpSession session, String contextPath, boolean requestIsSecure)
{ {
if (isUsingCookies()) if (isUsingCookies())
{ {
String id = getNodeId(session); String id = getNodeId(session);
Cookie cookie=new Cookie(_sessionCookie,id); HttpCookie cookie=new HttpCookie(
cookie.setHttpOnly(getHttpOnly()); _sessionCookie,
id,
cookie.setPath((contextPath==null||contextPath.length()==0)?"/":contextPath); _sessionDomain,
cookie.setMaxAge(getMaxCookieAge()); (contextPath==null||contextPath.length()==0)?"/":contextPath,
cookie.setSecure(requestIsSecure&&getSecureCookies()); getMaxCookieAge(),
getHttpOnly(),
// set up the overrides requestIsSecure&&getSecureCookies());
if (_sessionDomain!=null)
cookie.setDomain(_sessionDomain);
if (_sessionPath!=null)
cookie.setPath(_sessionPath);
return cookie; return cookie;
} }

View File

@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.eclipse.jetty.http.HttpCookie;
import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.HttpConnection;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.RetryRequest; import org.eclipse.jetty.server.RetryRequest;
@ -162,9 +163,9 @@ public class SessionHandler extends HandlerWrapper
{ {
if(session!=old_session) if(session!=old_session)
{ {
Cookie cookie = _sessionManager.access(session,request.isSecure()); HttpCookie cookie = _sessionManager.access(session,request.isSecure());
if (cookie!=null ) // Handle changed ID or max-age refresh if (cookie!=null ) // Handle changed ID or max-age refresh
response.addCookie(cookie); base_request.getResponse().addCookie(cookie);
} }
} }
else else
@ -214,7 +215,7 @@ public class SessionHandler extends HandlerWrapper
{ {
Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getRequest(); Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getRequest();
String requested_session_id=request.getRequestedSessionId(); String requested_session_id=request.getRequestedSessionId();
if (!DispatcherType.REQUEST.equals(request.getDispatcherType()) || requested_session_id!=null) if (!DispatcherType.REQUEST.equals(base_request.getDispatcherType()) || requested_session_id!=null)
{ {
return; return;
} }

View File

@ -191,7 +191,7 @@ public class AsyncContextTest extends TestCase
{ {
final Request base_request = (request instanceof Request)?((Request)request):HttpConnection.getCurrentConnection().getRequest(); final Request base_request = (request instanceof Request)?((Request)request):HttpConnection.getCurrentConnection().getRequest();
if (DispatcherType.REQUEST.equals(request.getDispatcherType())) if (DispatcherType.REQUEST.equals(base_request.getDispatcherType()))
{ {
if (_read>0) if (_read>0)
{ {
@ -207,9 +207,9 @@ public class AsyncContextTest extends TestCase
} }
if (_suspendFor>0) if (_suspendFor>0)
request.setAsyncTimeout(_suspendFor); base_request.setAsyncTimeout(_suspendFor);
request.addAsyncListener(__asyncListener); base_request.addAsyncListener(__asyncListener);
final AsyncContext asyncContext = request.startAsync(); final AsyncContext asyncContext = base_request.startAsync();
if (_completeAfter>0) if (_completeAfter>0)
{ {
@ -287,7 +287,7 @@ public class AsyncContextTest extends TestCase
public void onTimeout(AsyncEvent event) throws IOException public void onTimeout(AsyncEvent event) throws IOException
{ {
event.getRequest().setAttribute("TIMEOUT",Boolean.TRUE); event.getRequest().setAttribute("TIMEOUT",Boolean.TRUE);
event.getRequest().getAsyncContext().dispatch(); ((Request)event.getRequest()).getAsyncContext().dispatch();
} }
}; };

View File

@ -208,7 +208,7 @@ public class StatisticsHandlerTest extends TestCase
public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{ {
if (!request.isAsyncStarted()) if (!((Request)request).isAsyncStarted())
{ {
try try
{ {
@ -241,10 +241,10 @@ public class StatisticsHandlerTest extends TestCase
public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{ {
if (!request.isAsyncStarted()) if (!((Request)request).isAsyncStarted())
{ {
request.setAsyncTimeout(_suspendFor); ((Request)request).setAsyncTimeout(_suspendFor);
request.startAsync(); ((Request)request).startAsync();
} }
} }
@ -254,10 +254,10 @@ public class StatisticsHandlerTest extends TestCase
{ {
public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{ {
if (!request.isAsyncStarted()) if (!((Request)request).isAsyncStarted())
{ {
request.setAsyncTimeout(100000); ((Request)request).setAsyncTimeout(100000);
request.startAsync().dispatch(); ((Request)request).startAsync().dispatch();
} }
} }
@ -274,7 +274,7 @@ public class StatisticsHandlerTest extends TestCase
public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException public void handle(String target, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{ {
if (!request.isAsyncStarted()) if (!((Request)request).isAsyncStarted())
{ {
try try
{ {
@ -309,8 +309,8 @@ public class StatisticsHandlerTest extends TestCase
if (i < _suspendFor.length) if (i < _suspendFor.length)
{ {
request.setAsyncTimeout(_suspendFor[i]); ((Request)request).setAsyncTimeout(_suspendFor[i]);
request.startAsync(); ((Request)request).startAsync();
request.setAttribute("i",i + 1); request.setAttribute("i",i + 1);
return; return;
} }
@ -346,7 +346,7 @@ public class StatisticsHandlerTest extends TestCase
{ {
final Request base_request=(request instanceof Request)?((Request)request):HttpConnection.getCurrentConnection().getRequest(); final Request base_request=(request instanceof Request)?((Request)request):HttpConnection.getCurrentConnection().getRequest();
if(!request.isAsyncStarted()) if(!base_request.isAsyncStarted())
{ {
try try
{ {
@ -355,8 +355,9 @@ public class StatisticsHandlerTest extends TestCase
{ {
} }
request.setAsyncTimeout(_completeDuration*10); base_request.setAsyncTimeout(_completeDuration*10);
request.startAsync();
base_request.startAsync();
(new Thread() { (new Thread() {
public void run() public void run()
@ -364,7 +365,7 @@ public class StatisticsHandlerTest extends TestCase
try try
{ {
Thread.sleep(_completeDuration); Thread.sleep(_completeDuration);
request.getAsyncContext().complete(); base_request.getAsyncContext().complete();
synchronized(_lock) synchronized(_lock)
{ {

View File

@ -300,11 +300,11 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory
String servletPath=null; String servletPath=null;
String pathInfo=null; String pathInfo=null;
Enumeration reqRanges = null; Enumeration reqRanges = null;
Boolean included =request.getAttribute(Dispatcher.__INCLUDE_REQUEST_URI)!=null; Boolean included =request.getAttribute(Dispatcher.INCLUDE_REQUEST_URI)!=null;
if (included!=null && included.booleanValue()) if (included!=null && included.booleanValue())
{ {
servletPath=(String)request.getAttribute(Dispatcher.__INCLUDE_SERVLET_PATH); servletPath=(String)request.getAttribute(Dispatcher.INCLUDE_SERVLET_PATH);
pathInfo=(String)request.getAttribute(Dispatcher.__INCLUDE_PATH_INFO); pathInfo=(String)request.getAttribute(Dispatcher.INCLUDE_PATH_INFO);
if (servletPath==null) if (servletPath==null)
{ {
servletPath=request.getServletPath(); servletPath=request.getServletPath();

View File

@ -107,12 +107,12 @@ public class Invoker extends HttpServlet
{ {
// Get the requested path and info // Get the requested path and info
boolean included=false; boolean included=false;
String servlet_path=(String)request.getAttribute(Dispatcher.__INCLUDE_SERVLET_PATH); String servlet_path=(String)request.getAttribute(Dispatcher.INCLUDE_SERVLET_PATH);
if (servlet_path==null) if (servlet_path==null)
servlet_path=request.getServletPath(); servlet_path=request.getServletPath();
else else
included=true; included=true;
String path_info = (String)request.getAttribute(Dispatcher.__INCLUDE_PATH_INFO); String path_info = (String)request.getAttribute(Dispatcher.INCLUDE_PATH_INFO);
if (path_info==null) if (path_info==null)
path_info=request.getPathInfo(); path_info=request.getPathInfo();
@ -273,11 +273,11 @@ public class Invoker extends HttpServlet
{ {
if (_included) if (_included)
{ {
if (name.equals(Dispatcher.__INCLUDE_REQUEST_URI)) if (name.equals(Dispatcher.INCLUDE_REQUEST_URI))
return URIUtil.addPaths(URIUtil.addPaths(getContextPath(),_servletPath),_pathInfo); return URIUtil.addPaths(URIUtil.addPaths(getContextPath(),_servletPath),_pathInfo);
if (name.equals(Dispatcher.__INCLUDE_PATH_INFO)) if (name.equals(Dispatcher.INCLUDE_PATH_INFO))
return _pathInfo; return _pathInfo;
if (name.equals(Dispatcher.__INCLUDE_SERVLET_PATH)) if (name.equals(Dispatcher.INCLUDE_SERVLET_PATH))
return _servletPath; return _servletPath;
} }
return super.getAttribute(name); return super.getAttribute(name);

View File

@ -338,8 +338,8 @@ public class ServletHandler extends AbstractHandler
if (DispatcherType.INCLUDE.equals(type)) if (DispatcherType.INCLUDE.equals(type))
{ {
base_request.setAttribute(Dispatcher.__INCLUDE_SERVLET_PATH,servlet_path); base_request.setAttribute(Dispatcher.INCLUDE_SERVLET_PATH,servlet_path);
base_request.setAttribute(Dispatcher.__INCLUDE_PATH_INFO, path_info); base_request.setAttribute(Dispatcher.INCLUDE_PATH_INFO, path_info);
} }
else else
{ {

View File

@ -153,16 +153,16 @@ public class DispatcherTest extends TestCase
{ {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ {
assertEquals( "/context/ForwardServlet", request.getAttribute(Dispatcher.__FORWARD_REQUEST_URI)); assertEquals( "/context/ForwardServlet", request.getAttribute(Dispatcher.FORWARD_REQUEST_URI));
assertEquals( "/context", request.getAttribute(Dispatcher.__FORWARD_CONTEXT_PATH) ); assertEquals( "/context", request.getAttribute(Dispatcher.FORWARD_CONTEXT_PATH) );
assertEquals( "/ForwardServlet", request.getAttribute(Dispatcher.__FORWARD_SERVLET_PATH)); assertEquals( "/ForwardServlet", request.getAttribute(Dispatcher.FORWARD_SERVLET_PATH));
assertEquals( null, request.getAttribute(Dispatcher.__FORWARD_PATH_INFO)); assertEquals( null, request.getAttribute(Dispatcher.FORWARD_PATH_INFO));
assertEquals( "do=assertforward&do=more&test=1", request.getAttribute(Dispatcher.__FORWARD_QUERY_STRING) ); assertEquals( "do=assertforward&do=more&test=1", request.getAttribute(Dispatcher.FORWARD_QUERY_STRING) );
List expectedAttributeNames = Arrays.asList(new String[] { List expectedAttributeNames = Arrays.asList(new String[] {
Dispatcher.__FORWARD_REQUEST_URI, Dispatcher.__FORWARD_CONTEXT_PATH, Dispatcher.FORWARD_REQUEST_URI, Dispatcher.FORWARD_CONTEXT_PATH,
Dispatcher.__FORWARD_SERVLET_PATH, Dispatcher.__FORWARD_QUERY_STRING Dispatcher.FORWARD_SERVLET_PATH, Dispatcher.FORWARD_QUERY_STRING
}); });
List requestAttributeNames = Collections.list(request.getAttributeNames()); List requestAttributeNames = Collections.list(request.getAttributeNames());
assertTrue(requestAttributeNames.containsAll(expectedAttributeNames)); assertTrue(requestAttributeNames.containsAll(expectedAttributeNames));
@ -185,15 +185,15 @@ public class DispatcherTest extends TestCase
{ {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ {
assertEquals( "/context/AssertIncludeServlet", request.getAttribute(Dispatcher.__INCLUDE_REQUEST_URI)); assertEquals( "/context/AssertIncludeServlet", request.getAttribute(Dispatcher.INCLUDE_REQUEST_URI));
assertEquals( "/context", request.getAttribute(Dispatcher.__INCLUDE_CONTEXT_PATH) ); assertEquals( "/context", request.getAttribute(Dispatcher.INCLUDE_CONTEXT_PATH) );
assertEquals( "/AssertIncludeServlet", request.getAttribute(Dispatcher.__INCLUDE_SERVLET_PATH)); assertEquals( "/AssertIncludeServlet", request.getAttribute(Dispatcher.INCLUDE_SERVLET_PATH));
assertEquals( null, request.getAttribute(Dispatcher.__INCLUDE_PATH_INFO)); assertEquals( null, request.getAttribute(Dispatcher.INCLUDE_PATH_INFO));
assertEquals( "do=end&do=the", request.getAttribute(Dispatcher.__INCLUDE_QUERY_STRING)); assertEquals( "do=end&do=the", request.getAttribute(Dispatcher.INCLUDE_QUERY_STRING));
List expectedAttributeNames = Arrays.asList(new String[] { List expectedAttributeNames = Arrays.asList(new String[] {
Dispatcher.__INCLUDE_REQUEST_URI, Dispatcher.__INCLUDE_CONTEXT_PATH, Dispatcher.INCLUDE_REQUEST_URI, Dispatcher.INCLUDE_CONTEXT_PATH,
Dispatcher.__INCLUDE_SERVLET_PATH, Dispatcher.__INCLUDE_QUERY_STRING Dispatcher.INCLUDE_SERVLET_PATH, Dispatcher.INCLUDE_QUERY_STRING
}); });
List requestAttributeNames = Collections.list(request.getAttributeNames()); List requestAttributeNames = Collections.list(request.getAttributeNames());
assertTrue(requestAttributeNames.containsAll(expectedAttributeNames)); assertTrue(requestAttributeNames.containsAll(expectedAttributeNames));
@ -219,24 +219,24 @@ public class DispatcherTest extends TestCase
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ {
// include doesn't hide forward // include doesn't hide forward
assertEquals( "/context/ForwardServlet/forwardpath", request.getAttribute(Dispatcher.__FORWARD_REQUEST_URI)); assertEquals( "/context/ForwardServlet/forwardpath", request.getAttribute(Dispatcher.FORWARD_REQUEST_URI));
assertEquals( "/context", request.getAttribute(Dispatcher.__FORWARD_CONTEXT_PATH) ); assertEquals( "/context", request.getAttribute(Dispatcher.FORWARD_CONTEXT_PATH) );
assertEquals( "/ForwardServlet", request.getAttribute(Dispatcher.__FORWARD_SERVLET_PATH)); assertEquals( "/ForwardServlet", request.getAttribute(Dispatcher.FORWARD_SERVLET_PATH));
assertEquals( "/forwardpath", request.getAttribute(Dispatcher.__FORWARD_PATH_INFO)); assertEquals( "/forwardpath", request.getAttribute(Dispatcher.FORWARD_PATH_INFO));
assertEquals( "do=include", request.getAttribute(Dispatcher.__FORWARD_QUERY_STRING) ); assertEquals( "do=include", request.getAttribute(Dispatcher.FORWARD_QUERY_STRING) );
assertEquals( "/context/AssertForwardIncludeServlet/assertpath", request.getAttribute(Dispatcher.__INCLUDE_REQUEST_URI)); assertEquals( "/context/AssertForwardIncludeServlet/assertpath", request.getAttribute(Dispatcher.INCLUDE_REQUEST_URI));
assertEquals( "/context", request.getAttribute(Dispatcher.__INCLUDE_CONTEXT_PATH) ); assertEquals( "/context", request.getAttribute(Dispatcher.INCLUDE_CONTEXT_PATH) );
assertEquals( "/AssertForwardIncludeServlet", request.getAttribute(Dispatcher.__INCLUDE_SERVLET_PATH)); assertEquals( "/AssertForwardIncludeServlet", request.getAttribute(Dispatcher.INCLUDE_SERVLET_PATH));
assertEquals( "/assertpath", request.getAttribute(Dispatcher.__INCLUDE_PATH_INFO)); assertEquals( "/assertpath", request.getAttribute(Dispatcher.INCLUDE_PATH_INFO));
assertEquals( "do=end", request.getAttribute(Dispatcher.__INCLUDE_QUERY_STRING)); assertEquals( "do=end", request.getAttribute(Dispatcher.INCLUDE_QUERY_STRING));
List expectedAttributeNames = Arrays.asList(new String[] { List expectedAttributeNames = Arrays.asList(new String[] {
Dispatcher.__FORWARD_REQUEST_URI, Dispatcher.__FORWARD_CONTEXT_PATH, Dispatcher.__FORWARD_SERVLET_PATH, Dispatcher.FORWARD_REQUEST_URI, Dispatcher.FORWARD_CONTEXT_PATH, Dispatcher.FORWARD_SERVLET_PATH,
Dispatcher.__FORWARD_PATH_INFO, Dispatcher.__FORWARD_QUERY_STRING, Dispatcher.FORWARD_PATH_INFO, Dispatcher.FORWARD_QUERY_STRING,
Dispatcher.__INCLUDE_REQUEST_URI, Dispatcher.__INCLUDE_CONTEXT_PATH, Dispatcher.__INCLUDE_SERVLET_PATH, Dispatcher.INCLUDE_REQUEST_URI, Dispatcher.INCLUDE_CONTEXT_PATH, Dispatcher.INCLUDE_SERVLET_PATH,
Dispatcher.__INCLUDE_PATH_INFO, Dispatcher.__INCLUDE_QUERY_STRING Dispatcher.INCLUDE_PATH_INFO, Dispatcher.INCLUDE_QUERY_STRING
}); });
List requestAttributeNames = Collections.list(request.getAttributeNames()); List requestAttributeNames = Collections.list(request.getAttributeNames());
assertTrue(requestAttributeNames.containsAll(expectedAttributeNames)); assertTrue(requestAttributeNames.containsAll(expectedAttributeNames));
@ -259,22 +259,22 @@ public class DispatcherTest extends TestCase
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ {
// forward hides include // forward hides include
assertEquals( null, request.getAttribute(Dispatcher.__INCLUDE_REQUEST_URI)); assertEquals( null, request.getAttribute(Dispatcher.INCLUDE_REQUEST_URI));
assertEquals( null, request.getAttribute(Dispatcher.__INCLUDE_CONTEXT_PATH) ); assertEquals( null, request.getAttribute(Dispatcher.INCLUDE_CONTEXT_PATH) );
assertEquals( null, request.getAttribute(Dispatcher.__INCLUDE_SERVLET_PATH)); assertEquals( null, request.getAttribute(Dispatcher.INCLUDE_SERVLET_PATH));
assertEquals( null, request.getAttribute(Dispatcher.__INCLUDE_PATH_INFO)); assertEquals( null, request.getAttribute(Dispatcher.INCLUDE_PATH_INFO));
assertEquals( null, request.getAttribute(Dispatcher.__INCLUDE_QUERY_STRING)); assertEquals( null, request.getAttribute(Dispatcher.INCLUDE_QUERY_STRING));
assertEquals( "/context/IncludeServlet/includepath", request.getAttribute(Dispatcher.__FORWARD_REQUEST_URI)); assertEquals( "/context/IncludeServlet/includepath", request.getAttribute(Dispatcher.FORWARD_REQUEST_URI));
assertEquals( "/context", request.getAttribute(Dispatcher.__FORWARD_CONTEXT_PATH) ); assertEquals( "/context", request.getAttribute(Dispatcher.FORWARD_CONTEXT_PATH) );
assertEquals( "/IncludeServlet", request.getAttribute(Dispatcher.__FORWARD_SERVLET_PATH)); assertEquals( "/IncludeServlet", request.getAttribute(Dispatcher.FORWARD_SERVLET_PATH));
assertEquals( "/includepath", request.getAttribute(Dispatcher.__FORWARD_PATH_INFO)); assertEquals( "/includepath", request.getAttribute(Dispatcher.FORWARD_PATH_INFO));
assertEquals( "do=forward", request.getAttribute(Dispatcher.__FORWARD_QUERY_STRING) ); assertEquals( "do=forward", request.getAttribute(Dispatcher.FORWARD_QUERY_STRING) );
List expectedAttributeNames = Arrays.asList(new String[] { List expectedAttributeNames = Arrays.asList(new String[] {
Dispatcher.__FORWARD_REQUEST_URI, Dispatcher.__FORWARD_CONTEXT_PATH, Dispatcher.__FORWARD_SERVLET_PATH, Dispatcher.FORWARD_REQUEST_URI, Dispatcher.FORWARD_CONTEXT_PATH, Dispatcher.FORWARD_SERVLET_PATH,
Dispatcher.__FORWARD_PATH_INFO, Dispatcher.__FORWARD_QUERY_STRING, Dispatcher.FORWARD_PATH_INFO, Dispatcher.FORWARD_QUERY_STRING,
}); });
List requestAttributeNames = Collections.list(request.getAttributeNames()); List requestAttributeNames = Collections.list(request.getAttributeNames());
assertTrue(requestAttributeNames.containsAll(expectedAttributeNames)); assertTrue(requestAttributeNames.containsAll(expectedAttributeNames));

View File

@ -13,6 +13,7 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<properties> <properties>
<!--servlet-api-version>2.5-20081211</servlet-api-version-->
<servlet-api-version>3.0-SNAPSHOT</servlet-api-version> <servlet-api-version>3.0-SNAPSHOT</servlet-api-version>
<activation-version>1.1</activation-version> <activation-version>1.1</activation-version>
<ant-version>1.6.5</ant-version> <ant-version>1.6.5</ant-version>