ottenere jsp risposta come una stringa all’interno di servlet

C’è un modo per ottenere la risposta da un file jsp come una Stringa all’interno di servlet. Qualcosa di simile

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     String section1 = getResponseFromJSP();
     //do something else ...
     sendMailToUser(section1);
}

Sto utilizzando Servlet API 2.4 e java 1.4

Perchè vuoi fare questo?
Vi preghiamo di essere chiari con il capire che JSP viene introdotto per generare una richiesta e la servlet agisce come un controller di catering che richiesta, e di inviare la risposta, che Cosa avete bisogno da JSP?
Ho una pagina JSP che mostra il risultato del calcolo, il risultato deve essere inviato, tramite e-mail all’utente
Si invia il risultato di un’azione a una servlet, attraverso ajax, e poi fare il necessario a inviare la mail
È possibile utilizzare java.net.URL e java.net.URLConnection classe di chiedere la risorsa web.

OriginaleL’autore Marko Vranjkovic | 2012-12-05

One Reply
  1. 18

    Una soluzione migliore potrebbe essere quella di utilizzare un altro motore di template come freemarker o la velocità, che sono indipendenti dal servlet api e più adatto per il testo che per le e-mail.

    Tuttavia, è possibile avvolgere il HttpServletResponse e prevalente getWriter metodi. Il codice riportato di seguito funziona per me su glassfish.

    Servlet:

    public class TestServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response) {
                private final StringWriter sw = new StringWriter();
    
                @Override
                public PrintWriter getWriter() throws IOException {
                    return new PrintWriter(sw);
                }
    
                @Override
                public String toString() {
                    return sw.toString();
                }
            };
            request.getRequestDispatcher("test.jsp").include(request, responseWrapper);
            String content = responseWrapper.toString();
            System.out.println("Output : " + content);
            response.getWriter().write(content);
        }
    }

    JSP:

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Hello world</title>
        </head>
        <body>
            <h1><%= "Hello world from a JSP!" %></h1>
        </body>
    </html>
    Provato, responseWrapper.toString(); restituisce una Stringa vuota;
    ma questo farà il lavoro link Grazie per l’idea!
    Ho modificato il codice e testato su glassfish server. Non certo perché il precedente codice tramite un OutputStream non era funzionante.
    nuovo codice funziona abbastanza bene, grazie
    Si potrebbe desiderare di chiedere a questo come una questione a parte e includere il codice in modo che altri possono riprodurre il problema. La probabilità di ottenere una risposta, sono molto più elevati in quel modo.

    OriginaleL’autore Jörn Horstmann

Lascia un commento