Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [J2EE-Servlet-JSP] problema con il Dispatch

    Spero che qualcuno mi possa aiutare:
    codice:
    AVVERTENZA: StandardWrapperValve[LoginServlet]: PWC1406: Servlet.service() for servlet LoginServlet threw exception
    java.lang.IllegalStateException: PWC1227: Cannot forward after response has been committed
    	at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:370)
    	at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)
    	-->at servlet.LoginServlet.doPost(LoginServlet.java:126)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:662)
    sapete dirmi che tipo di errore si tratta? questo errore me lo restituisce una servlet dopo la chiamata della index.jsp.... questa servlet è molto semplice, si composta in uesto modo:
    - viene chiama dalla form di login che si trova nella index.jsp
    - la servlet si prende i dati
    -a sua volta gli passa al bean. Il bean esegue una query nel DB e controlla se i dati sono corretti
    -ripassa il controllo alla servlet che riceve il risultato del bean ( ho cotrollato il risultatodel bean stampandolo a video e trova l'utente)
    - per ultimo setta i dati nella sezione con i metodi opportuni
    - come ultimo passaggio dovrebbe fare il redirect alla index.jsp(questo non funziona)
    questo è la linea di codice chee da l'errore
    codice:
     getServletContext().getRequestDispatcher("index.jsp").forward(request, response);
    ho pure tentato con questo codice:
    codice:
    request.getServletContext().getRequestDispatcher("index.jsp").forward(request, response);

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Stai cercando di fare il forward ad una pagina JSP, dopo che hai già scritto la Response al client.

    Controlla (ed eventualmente posta) il codice che c'è prima della chiamata al forward del Dispatcher.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    GRazie per la tua risposta ...scusami se non ho risposto prima ... ma ieri sn stato tutto il giorno impegnato con un altro progetto ....
    stamattina ho trovato a fare alcune modfica ma niente sempre stesso problema
    iquesto è il codice della servlet:
    codice:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.ejb.EJB;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import model.Admin;
    import model.Cameriere;
    import model.Cliente;
    import model.Cuoco;
    import server.GestioneLoginLocal;
    
    /**
     *
     * @author orphen
     */
    @WebServlet(name = "LoginServlet", urlPatterns = {"/LoginServlet"})
    public class LoginServlet extends HttpServlet {
    
        @EJB(name="login",beanInterface=GestioneLoginLocal.class)
        private GestioneLoginLocal login;
        
    
    
        /** 
         * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                 
    //            out.println("<html>");
    //            out.println("<head>");
    //            out.println("<title>Servlet LoginServlet</title>");  
    //            out.println("</head>");
    //            out.println("<body>"+st);
    //            out.println("<h1>Servlet LoginServlet at " + request.getContextPath () + "</h1>");
    //            out.println("</body>");
    //            out.println("</html>");
                 
            } finally {
                out.close();
            }
        }
    
        // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /** 
         * Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }
    
        /** 
         * Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
            String address = "";
      
    
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            Object o = login.executeLogin(username, password); 
            
            System.out.println("requestttttttttttt");
           
            
             
            
            if (o == null) {
                address="index.jsp";
             
                 request.getRequestDispatcher("hello.jsp").forward(request, response);
                 return;
            }
           
            HttpSession sessione = request.getSession(true);
            sessione.setAttribute("login", o);
           
            if (o instanceof Admin) {
                 System.out.println("Admin");
                sessione.setAttribute("Grado", "Admin");
                address="HomeAdmin.jsp";
            }
            if (o instanceof Cuoco) {
                sessione.setAttribute("Grado", "Cuoco");
                address="HomeCuoco.jsp";
            }
            if (o instanceof Cameriere) {
                sessione.setAttribute("Grado", "Camerire");
               address="HomeCameriere.jsp";
            }
            if (o instanceof Cliente) {
                sessione.setAttribute("Grado", "Cliente");
                address="HomeCliente.jsp";
            }
            getServletContext().getRequestDispatcher("/WEB_INF/hello.jsp").forward(request, response);// questa e la riga dove da l'errore
             //request.getRequestDispatcher("hello.html").forward(request, response);
    //        address="index.jsp";
     //       dispatcher = getServletContext().getRequestDispatcher("/hello.html");
    //        dispatcher.forward(request, response);
    
           
        }
    
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    
    
    }
    invece il codice della jsp hello.jspe semplicissimo, e la pagina iniziale quando con netbeans si fa new jsp:
    codice:
    <%-- 
        Document   : hello
        Created on : 25-mag-2011, 17.18.27
        Author     : orphen
    --%>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1>Hello World!</h1>
        </body>
    </html>
    quella invece della jso che chiame la servlet e la index.sp, il codice e questo:
    codice:
    <%-- 
        Document   : index
        Created on : 10-mag-2011, 17.19.36
        Author     : orphen
    --%>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1>Hello World!</h1>
            <% Object u =  session.getAttribute("login");
         if(u==null){
               
    %>
              <FORM METHOD="POST" ACTION="LoginServlet"> 
                
    Username: <INPUT TYPE="text" NAME="username" SIZE=10> 
                
     
                
    Password: <INPUT TYPE="password" NAME="password" SIZE=12> 
                
     
                
     
                
     
                <INPUT TYPE=submit NAME="Submit" VALUE="Ok"> 
                <INPUT TYPE=reset NAME="Cancel" VALUE="Annulla"> 
            </FORM> 
              <% } else{
                
                  out.println("benvenuto "+ session.getAttribute("Grado"));
              } %>
            AggiungiPersonale
        </body>
    </html>

    non so se serve anche il codice del bean... ma il bean fa tutte le operazione senza nessun errore restituisce corretamente anche l'user.
    il percorso di hello.jsp è giusto si trovaall'interno di web-inf, mentre hello.html si trova nella cartella web del progetto quindi con path uguale alla index.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non ho seguito tutto il codice, ma ho visto questo:

    codice:
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                 
    //            out.println("<html>");
    //            out.println("<head>");
    //            out.println("<title>Servlet LoginServlet</title>");  
    //            out.println("</head>");
    //            out.println("<body>"+st);
    //            out.println("<h1>Servlet LoginServlet at " + request.getContextPath () + "</h1>");
    //            out.println("</body>");
    //            out.println("</html>");
                 
            } finally {
                out.close();
            }
        }
    che viene chiamato all'inizio sia da doPost() che da doGet().

    I casi sono due: o non richiami il metodo processRequest (tanto non "sembra" fare nulla), oppure togli di mezzo l'apertura del PrintWriter. Al termine del metodo il PrintWriter viene chiuso e la response, di conseguenza, viene inviata al client. E questo ti impedisce di fare qualunque altra cosa dopo. Per questo ho scritto "sembra" tra virgolette.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie mille LELLEFT.... ti costruisco una statua xd....

    seguendo il tuo consiglio sn riuscito ad far funzionare il dispacther ho comentato tutto il codice dentro process request ora il codice funziona senza problemi... cioe ho scritto:
    codice:
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
          //  PrintWriter out = response.getWriter();
        //    try {
                 
    //            out.println("<html>");
    //            out.println("<head>");
    //            out.println("<title>Servlet LoginServlet</title>");  
    //            out.println("</head>");
    //            out.println("<body>"+st);
    //            out.println("<h1>Servlet LoginServlet at " + request.getContextPath () + "</h1>");
    //            out.println("</body>");
    //            out.println("</html>");
                 
          //  } finally {
            //    out.close();
            //}
        }
    ora funziona

    grazie mille ..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.