Avatar billede stigc Nybegynder
05. maj 2003 - 21:20 Der er 7 kommentarer og
1 løsning

hente bufferen ned i en string

Jeg skal nederest på en JSP side betstående både af HTML og java, kunne putte siden/buffern i en streng, så jeg kan skrive den til en fil. Hvordan gør jeg dette?
Avatar billede arne_v Ekspert
05. maj 2003 - 21:27 #1
Du vil gemme hele HTML outputtet genereret af en JSP side til en
fil og stadigvæk sende det tilbage til browseren ?
Avatar billede arne_v Ekspert
05. maj 2003 - 21:30 #2
Umiddelbart vil det nok være meget svært da output bliver fortløbende skrevet.

To forslag:

1)  Brug en lille standalone utility (wget eller et lille Java program
    som bruger HttpURLConnection) til at hente med og gemme til fil.

2)  Lad din JSP side bruge HttpUrlConnection til at hente sig selv med
    (husk et lille check for at undgå en uendelig rekursion).

Ingen af forslagene er perfekte. Men hvis JSP siden ikke ændrer noget,
så burde det faktisk virke.
Avatar billede stigc Nybegynder
05. maj 2003 - 22:58 #3
Jeg har prøvet det med PHP. Kan man i JSP sørger for at buffe siden, inden den sendes? (Ligesom i ASP: "response.buffer=true") Hvis man kan det, så må man da kunne tilgå denne buffer, eller hvad?
Avatar billede stigc Nybegynder
05. maj 2003 - 23:00 #4
Jeg skal bruge det til at lave statiske sider HTML sider, udfra dynmaiske JSP sider. Er ikke meget for at lave en HTTP forbindelse fra JAVA.
Avatar billede arne_v Ekspert
06. maj 2003 - 05:36 #5
Så download og brug wget eller en tilsvarende utility.
Avatar billede arne_v Ekspert
06. maj 2003 - 05:40 #6
wget http://arne:8080/useradmin/Login.jsp

gør lige præcis det man tror den gør.
Avatar billede arne_v Ekspert
15. maj 2003 - 00:24 #7
Det er lykkes mig at komme op med en lille snedighed.

Du skal bruge følgende utility klasse:

package dirtyhacks;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.jsp.JspWriter;

public class MyJspWriter extends JspWriter {
    private StringWriter sw;
    private PrintWriter pw;
    private JspWriter original;
    public MyJspWriter(JspWriter original) {
        super(original.getBufferSize(), original.isAutoFlush());
        sw = new StringWriter();
        pw = new PrintWriter(sw);
        this.original = original;
    }

    public void newLine() throws IOException {
        original.newLine();
        pw.println();
    }

    public void print(boolean arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(char arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(int arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(long arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(float arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(double arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(char[] arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(String arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void print(Object arg0) throws IOException {
        original.print(arg0);
        pw.print(arg0);
    }

    public void println() throws IOException {
        original.println();
        pw.println();
    }

    public void println(boolean arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(char arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(int arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(long arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(float arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(double arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(char[] arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(String arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void println(Object arg0) throws IOException {
        original.println(arg0);
        pw.println(arg0);
    }

    public void clear() throws IOException {
        original.clear();
        sw = new StringWriter();
        pw = new PrintWriter(sw);
    }

    public void clearBuffer() throws IOException {
        original.clear();
        sw = new StringWriter();
        pw = new PrintWriter(sw);
    }

    public void flush() throws IOException {
        original.flush();
        pw.flush();
        sw.flush();
    }

    public void close() throws IOException {
        original.close();
        pw.close();
        sw.close();
    }

    public int getRemaining() {
        return original.getRemaining();
    }

    public void write(char[] cbuf, int off, int len) throws IOException {
        original.write(cbuf,off, len);
        sw.write(cbuf, off,len);
    }
   
    public String getContent() {
        pw.flush();
        sw.flush();
        return sw.getBuffer().toString();
    }
}

Så kan du øverst i din JSP side have:

<%@page import="dirtyhacks.*"%>
<%
out = new MyJspWriter(out);
%>

og når som helst du indenfor <% %> får løst til at have en String med
hele content, så bruger du bare:
  ((MyJspWriter)out).getContent()

Jeg har testet på Tomcat at det virker. Men det burde faktisk virke
på alle servere.

NB: Du har bemærket package navn ikke !
Avatar billede stigc Nybegynder
19. maj 2003 - 20:27 #8
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester