CPPSERV


Home Projects Jobs Clientele Contact
CPPSERV Documentation Download TODO Mailing lists Bug tracker News RSS Feed Browse source

ServletRequest.h

Go to the documentation of this file.
00001 /*
00002  * ====================================================================
00003  *
00004  * The Apache Software License, Version 1.1
00005  *
00006  * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
00007  * reserved.
00008  *
00009  * Redistribution and use in source and binary forms, with or without
00010  * modification, are permitted provided that the following conditions
00011  * are met:
00012  *
00013  * 1. Redistributions of source code must retain the above copyright
00014  *    notice, this list of conditions and the following disclaimer.
00015  *
00016  * 2. Redistributions in binary form must reproduce the above copyright
00017  *    notice, this list of conditions and the following disclaimer in
00018  *    the documentation and/or other materials provided with the
00019  *    distribution.
00020  *
00021  * 3. The end-user documentation included with the redistribution, if
00022  *    any, must include the following acknowlegement:
00023  *       "This product includes software developed by the
00024  *        Apache Software Foundation (http://www.apache.org/)."
00025  *    Alternately, this acknowlegement may appear in the software itself,
00026  *    if and wherever such third-party acknowlegements normally appear.
00027  *
00028  * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
00029  *    Foundation" must not be used to endorse or promote products derived
00030  *    from this software without prior written permission. For written
00031  *    permission, please contact apache@apache.org.
00032  *
00033  * 5. Products derived from this software may not be called "Apache"
00034  *    nor may "Apache" appear in their names without prior written
00035  *    permission of the Apache Group.
00036  *
00037  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
00038  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00039  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00040  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
00041  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00042  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00043  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
00044  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00045  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00046  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00047  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00048  * SUCH DAMAGE.
00049  * ====================================================================
00050  *
00051  */
00052 
00053 
00054 #ifndef SERVLET_REQUEST_H
00055 #define SERVLET_REQUEST_H
00056 
00057 #include <memory>
00058 #include <string>
00059 #include <vector>
00060 #include <map>
00061 #include <memory>
00062 #include <iostream>
00063 #include <boost/shared_ptr.hpp>
00064 
00065 namespace servlet {
00066 
00067     class RequestDispatcher;
00068     //class Locale;
00069     
00090     class ServletRequest {
00091     public:
00092     virtual ~ServletRequest(){}
00093 
00120         virtual boost::shared_ptr<void> getAttribute(const std::string& name)=0;
00121     template <typename T>
00122      T getAttribute(const std::string& name);
00123     
00147         virtual bool hasAttribute(const std::string& name) const = 0;
00148     
00161         virtual std::auto_ptr< std::vector<std::string> > getAttributeNames() const=0;
00162     
00187         virtual void setAttribute(const std::string& name, boost::shared_ptr<void> o)=0;
00188         template <typename T>
00189      void setAttribute(const std::string& name, boost::shared_ptr<T> o)
00190     {
00191         setAttribute(name, static_cast<boost::shared_ptr<void> >(o));
00192     }
00193         template <typename T>
00194      void setAttribute(const std::string& name, const T& o);
00195 
00212         virtual void  removeAttribute(const std::string& name)=0;
00213     
00225         virtual std::string  getCharacterEncoding() const=0;
00226     
00237         virtual void  setCharacterEncoding(const std::string& env) =0;
00238     
00249         virtual int  getContentLength() const=0;
00250     
00261         virtual std::string  getContentType() const=0;
00262     
00277         virtual std::istream&  getInputStream()=0;
00278     
00307         virtual std::string  getParameter(const std::string& name) const=0;
00308     
00324         virtual std::auto_ptr< std::vector<std::string> > getParameterNames() const=0;
00325     
00343         virtual std::auto_ptr< std::vector<std::string> > getParameterValues(const std::string& name) const=0;
00344     
00356         virtual std::auto_ptr< std::multimap<std::string,std::string> > getParameterMap() const=0;
00357     
00369         virtual std::string  getProtocol() const=0;
00370     
00382         virtual std::string  getScheme() const=0;
00383     
00392         virtual std::string  getServerName() const=0;
00393     
00403         virtual int  getServerPort() const=0;
00404     
00415         virtual std::string  getRemoteAddr() const=0;
00416     
00429         virtual std::string  getRemoteHost() const=0;
00430     
00471         virtual bool  isSecure() const=0;
00472     
00505         virtual RequestDispatcher* getRequestDispatcher(const std::string& path)=0;
00506     
00515         virtual int  getRemotePort() const=0;
00516     
00526         virtual std::string  getLocalName() const=0;
00527     
00538         virtual std::string  getLocalAddr() const=0;
00539     
00548         virtual int  getLocalPort() const=0;
00549     };
00550 
00551     template<typename T>
00552     T ServletRequest::getAttribute(const std::string& name) {
00553         const boost::shared_ptr<void> value = getAttribute(name);
00554         if(!value)
00555             return T();
00556         return *boost::static_pointer_cast<T>(value);
00557     }
00558     template<typename T>
00559     void ServletRequest::setAttribute(const std::string& name, const T& o) {
00560     setAttribute(name,boost::shared_ptr<void>(new T(o)));
00561     }
00562 
00563 }//namespace
00564 
00565 #endif/*SERVLET_REQUEST_H*/

SourceForge.net Logo