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

    [Jsp/Servlet]Riscrittura url

    ho questa servlet per inserire dati in un db che prende i valori da un form e che al termine dell'operazione fa il forward su un'altra servlet che fa la query e che fa il forward su index.jsp:
    codice:
    package operazioni_database;
    
    import java.io.IOException;
    import java.sql.*;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Insert extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html");
            String entrate = request.getParameter("txtEntrate".trim());
            String uscite = request.getParameter("txtUscite".trim());
            String causale = request.getParameter("txtCausale".trim());
    //        String data = request.getParameter("data".trim());
            boolean proceed = false;
            try {
                if (entrate != null && uscite != null && causale != null /*&& data != null*/) {
                    if (entrate.length() > 0 && uscite.length() > 0 && causale.length() > 0) {
                        proceed = true;
                        Connection conn = Connessione.getConnection();
                        PreparedStatement ps = null;
                        String sql = "INSERT INTO movimenti(entrate,uscite,causale,data) VALUES(?,?,?,curdate())";
                        ps = conn.prepareStatement(sql);
                        if (proceed) {
                            ps.setString(1, entrate);
                            ps.setString(2, uscite);
                            ps.setString(3, causale);
                            ps.executeUpdate();
                        }
                        RequestDispatcher disp = request.getRequestDispatcher("DoQuery");
                        disp.forward(request, response);
                        ps.close();
                    }
                }
            } catch (ClassNotFoundException ex) {
                ex.getMessage();
            } catch (SQLException ex) {
                ex.getMessage();
            }
        }
    }
    il problema è che dopo l'invio dei dati l'url mi compare così:
    codice:
    nome_dell'host/ecc...../Insert?txtEntrate=100&txtUscite=0&txtCausale=jsp+2&Submit=Submit
    e nn mi piace.
    è possibile lasciare solo il nome della pagina dove mi trovo (praticamente alla fine delle operazioni in index.jsp)??

  2. #2
    Ti scrive così perchè la chiamata alla servlet è con metodo get e non post e quindi appende i parametri alla url.

  3. #3
    ok allora se mi basta usare post nel form ho un altro problema ma penso sia meglio aprire un'altra discussione.

  4. #4
    ok per il form, ma nel caso di un delete fatto da link?
    codice:
            <c:forEach items="${requestScope.list}" var="lists">
                <tr>
                    <td>
                        <c:out value="${lists.id}"/>
                    </td>
                    <td>
                        <c:out value="${lists.entrate}"/>
                    </td>
                    <td>
                        <c:out value="${lists.uscite}"/>
                    </td>
                    <td>
                        <c:out value="${lists.causale}"/>
                    </td>
                    <td>
                        <c:out value="${lists.data}"/>
                    </td>
                    <td>
                        Elimina
                    </td>
                </tr>
            </c:forEach>
        </table>
    servlet:
    codice:
    public class Delete extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            Connection conn = null;
            PreparedStatement ps = null;
            String sql = "DELETE FROM movimenti WHERE id=?";
            int id = Integer.parseInt(request.getParameter("elimina"));
            try {
                conn = Connessione.getConnection();
                ps = conn.prepareStatement(sql);
                ps.setInt(1, id);
                ps.executeUpdate();
                RequestDispatcher disp = request.getRequestDispatcher("DoQuery");
                disp.forward(request, response);
            } catch (ClassNotFoundException ex) {
                ex.getMessage();
            } catch (SQLException ex) {
                ex.getMessage();
            } finally {
                try {
                    ps.close();
                } catch (SQLException ex) {
                    ex.getMessage();
                }
            }
        }
    }
    l'url diventa così:
    http://localhost:8080/BancaJSP/Delete?elimina=28

    è possibile ovviare qua in qualche modo??

  5. #5
    usando javascript chiami una funzione passandogli l'id la funzione setta un input hidden e fa il submit sulla delete.
    Poi a chi la intesto la fattura uhauahuahuahuahuahuahua

  6. #6
    Originariamente inviato da snakeplinsky
    usando javascript chiami una funzione passandogli l'id la funzione setta un input hidden e fa il submit sulla delete.
    Poi a chi la intesto la fattura uhauahuahuahuahuahuahua
    mettila in conto al resto del forum che appena posso ripago tutti!!!

    a parte gli scherzi, ho provato così:
    codice:
            <script type="text/javascript">
                function deleteRecord(id) {
                    var obj = document.getElementById('id_hidden');
                    obj.value = id;
                }
            </script>
    ........
                        Elimina
                        <input type="hidden" name="delete" value="" id="id_hidden"/>
    fin qui è giusto??
    e la servlet come la richiamo??

  7. #7
    questo problema l'ho risolto:
    codice:
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Banca JSP</title>
            <script type="text/javascript">
                function deleteRecord(id) {
                    var obj = document.getElementById('id_hidden');
                    obj.value = id;
                    document.form_cancella.submit();
                }
            </script>
        </head>
        <body>
            <table>
                <thead>
                <th>
                    ID
                </th>
                <th>
                    ENTRATE
                </th>
                <th>
                    USICTE
                </th>
                <th>
                    CAUSALE
                </th>
                <th>
                    DATA
                </th>
            </thead>
            <c:forEach items="${requestScope.list}" var="lists">
                <tr>
                    <td>
                        <c:out value="${lists.id}"/>
                    </td>
                    <td>
                        <c:out value="${lists.entrate}"/>
                    </td>
                    <td>
                        <c:out value="${lists.uscite}"/>
                    </td>
                    <td>
                        <c:out value="${lists.causale}"/>
                    </td>
                    <td>
                        <c:out value="${lists.data}"/>
                    </td>
                    <td>
                        Elimina
                    </td>
                </tr>
            </c:forEach>
        </table>
        
    
        
    
        <form action="Insert" method="post">
            <input type="text" name="txtEntrate" value="100"/>
    
            <input type="text" name="txtUscite" value="0"/>
    
            <input type="text" name="txtCausale" value="jsp 1"/>
    
            <input type="submit" name="Submit" value="Submit" />
        </form>
        <form method="post" action="Delete" name="form_cancella">
            <input type="hidden" name="delete" value="" id="id_hidden"/>
        </form>
    </body>
    </html>
    però c'è una cosa che ancora nn capisco di sti url.
    dopo il clic su elimina e la conseguente operazione di delete l'url si chiama così:
    http://localhost:8080/BancaJSP/Delete
    con Delete che è il nome della servlet, anche se questa fa il forwars su index.jsp.
    perchè continua a esserci la servlet in mezzo alle scatole??

  8. #8
    ho provato con encoderurl:
    codice:
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String contextPath = request.getContextPath();
            String encodedUrl = response.encodeURL(contextPath + "/index.jsp");
    ............
                RequestDispatcher disp = request.getRequestDispatcher(encodedUrl);
                disp.forward(request, response);
    ma nn funge in quanto mi da questo errore:
    codice:
    The requested resource (/BancaJSP/BancaJSP/index.jsp) is not available.
    quello che nn ho capito è perchè mette due volte il nome della directory.
    sulla pagina jsp se metto:
    <%=request.getContextPath()%>
    mi da il path corretto.

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.