tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
511
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    oscar33 oscar33 ist offline Grünschnabel
    Registriert seit
    Sep 2007
    Beiträge
    3
    Hallo,

    ich beschäftige mich seit einiger Zeit mit Servlets und Portlets und bin im Laufe zu der Fragestellung gekommen, ob es möglich ist, nach einem forward im Response zu prüfen, ob das Servlet durch ein forward aufgerufen worden ist. Mir würde es reichen, wenn ich vorher ein boolean hinterlegen kann, auf welches ich nachher zugreife. Leider hat dies Momentan nicht zum gewünschten Erfolg geführt . Mir wird bei Änderung des flags im response gleich angezeigt, das ich committed habe, womit ein forward automatisch fehlschlägt.

    Ich hoffe, es hatte schon jemand eine ähnliche Fragestellung. Ob der Aufruf von einem Portlet oder Servlet gekommen ist, spielt keine Rolle.

    Viele Grüße
     

  2. #2
    bl4ck29 bl4ck29 ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    85
    Hi,

    also wenn ich dich richtig verstehe müsste es doch reichen auf der Seite die das "forward" ausführt einen Parameter im Request zu übergeben, welcher auf der forwarded Seite dann in den Response geschrieben wird und von dir gelesen werden kann. Eventuell hab ich das Problem aber auch nicht ganz verstanden

    MfG
     

  3. #3
    oscar33 oscar33 ist offline Grünschnabel
    Registriert seit
    Sep 2007
    Beiträge
    3
    Hallo, leider reicht mir das nicht. Ich habe eine Klasse die von HttpServletResponseWrapper abgeleitet ist und in der will ich über den response auswerten können, ob das servlet über ein forward aufgerufen worden ist.
     

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    also wenn du in deinem Servlet den Request über einen RequestDispatcher forwardest kannst du ein Attribut am Request setzen welches du dann später wieder ausliest...

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    package de.tutorials.web.servlets;
     
    import java.io.IOException;
     
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    /**
     * Servlet implementation class for Servlet: FrontController
     *
     * @web.servlet
     *   name="FrontController"
     *   display-name="FrontController" 
     *
     * @web.servlet-mapping
     *   url-pattern="/FrontController"
     *  
     */
     public class FrontController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
       static final long serialVersionUID = 1L;
       
        /* (non-Java-doc)
         * @see javax.servlet.http.HttpServlet#HttpServlet()
         */
        public FrontController() {
            super();
        }       
        
        /* (non-Java-doc)
         * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //response.getWriter().println("hello");
            request.setAttribute("forwarder", getServletName());
            request.getRequestDispatcher("BubuServlet").forward(request, response);
        }                      
    }

    Anschließend kannst du dann via:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
    package de.tutorials.web.servlets;
     
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    /**
     * Servlet implementation class for Servlet: BubuServlet
     * 
     * @web.servlet name="BubuServlet" display-name="BubuServlet"
     * 
     * @web.servlet-mapping url-pattern="/BubuServlet"
     * 
     */
    public class BubuServlet extends javax.servlet.http.HttpServlet implements
            javax.servlet.Servlet {
        static final long serialVersionUID = 1L;
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#HttpServlet()
         */
        public BubuServlet() {
            super();
        }
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
         *      HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            if (null != request.getAttribute("forwarder")) {
                response.getWriter().println(
                        request.getAttribute("forwarder")
                                + " forwarded to this servlet");
            } else {
                response.getWriter().println("servlet was called directly");
            }
        }
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
         *      HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
        }
    }

    darauf zugreifen, ganz einfach...

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    oscar33 oscar33 ist offline Grünschnabel
    Registriert seit
    Sep 2007
    Beiträge
    3
    Hallo, ich meine etwas in der folgenden Art:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
     
    public class dispatcher {
        public void forward(Request request, Response response){
            if (((HttpServletResponse)response).isCommitted()){
                throw new IllegalStateException("Response has been committed, this isn't allowed before forward" +
                                                " method. Content must delete before service from servlet is called.");
            }
            InternalPortletRequest internalRequest = InternalImplConverter.getInternalRequest(request);
            InternalPortletResponse internalResponse = InternalImplConverter.getInternalResponse(response);
            boolean isForwarded = (internalRequest.isForwarded()||internalResponse.isForwarded());
            try {
                internalRequest.setForwarded(true);
                internalRequest.setForwardedQueryString(queryString);
                if (!namedDispatcher){
                    setAttributesForward(internalRequest);
                }
                [COLOR="Red"]internalResponse.setForwarded(true);[/COLOR]
     
                requestDispatcher.forward((HttpServletRequest) internalRequest,
                        (HttpServletResponse) internalResponse);
            } catch (IOException ex) {
                throw ex;
            } 
        }
    }
     
     
    class Request extends HttpServletRequestWrapper{
        .....
    }
     
    class Response extends HttpServletResponseWrapper{
        ...
        
        
        [COLOR="Blue"]boolean forwarded =false;
        public void setForwarded(boolean forwarded){
            this.forwarded = forwarded; 
        }
        public boolean isCommitted(){
            if (forwarded)
                return false;
            else
                return super.isCommitted();
        }[/COLOR]
    }

    damit kann ich vom response Objekt auf die Standardmethoden zugreifen, kann diese aber gegebenenfalls auch manipulieren. Ich will hoffen, ich habe mich mit dem Bsp ein bisschen deutlicher ausgedrückt. Setze ich den rot markierten Bereich nicht, gibt es beim forwarden kein Problem.
     

Ähnliche Themen

  1. Servlet forward
    Von CosmoKey im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 19.04.06, 11:37
  2. Da Vinci Forward
    Von tawarwaith im Forum Typografie
    Antworten: 3
    Letzter Beitrag: 29.11.04, 09:31
  3. forward
    Von rosmi im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 27.05.04, 23:23
  4. back & forward
    Von fishman im Forum Javascript & Ajax
    Antworten: 11
    Letzter Beitrag: 19.07.02, 08:34
  5. Forward - Back ? Wie geht das?
    Von Crasher im Forum PHP
    Antworten: 7
    Letzter Beitrag: 02.02.02, 20:53