Avatar billede thinge Nybegynder
27. november 2006 - 15:44 Der er 5 kommentarer og
1 løsning

getOutputStream() has already been called for this response

Alle mine JSP-filer skulle gerne være ens, men med forskellig text, derfor denne DefaultPage:

public class DefaultPage extends AbstractHKPage{
   
    public void createPage()throws IOException{       
        //response.setContentType("text/html");
        String jspPage = getRequest().getAttribute("defaultPage").toString();
        PrintWriter printWriter = new PrintWriter(response);
        printWriter.println("<HTML>");
        printWriter.println("<HEAD>");
        printWriter.print("<TITLE>");
        printWriter.print("Hesteklubben.dk");
        printWriter.println("</TITLE>");
        printWriter.print("<link rel=\"stylesheet\" href='");
        printWriter.print(getRequest().getContextPath());
        printWriter.println("/utilities/javascriptfiles/DefaultStyle.css' type=\"text/css\"/>");
        printWriter.println("</HEAD>");
        printWriter.println("<BODY STYLE=\"background-color:transparent;background-image:url('"+getRequest().getContextPath()+"/pictures/HesteklubbenWaterMark.jpg');\">");
        include(jspPage);
        printWriter.println("</BODY>");
        printWriter.println("</HTML>");
        printWriter.close();
    }
}

Får denne fejl:
getOutputStream() has already been called for this response
Ved:
include(jspPage);

jspPage ser således:

<form name="test" action="testAction" method="POST">
  <input type="text" name="test" value="Henning"/>
  <input type="submit" name="sub"/>
</form>
TEST

er der nogen der ved hvad jeg laver forkert?

Kører på en tomcat-server, når jeg kører lokalt i Jdeveloper giver det ingen problemer!!!

/thinge
Avatar billede thinge Nybegynder
27. november 2006 - 15:53 #1
min AbstractHKPage ser således ud:

public abstract class AbstractHKPage extends HttpServlet implements Page {
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected HttpSession session;
   
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
   
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
        this.request = request;
        this.response = response;
        this.session = request.getSession();
        createPage();
    }
   
    public void include(String include){
        try {
            getServletConfig().getServletContext().getRequestDispatcher(include).include(request, response); // Includes a JSP-PAGE
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch (ServletException e) {
            e.printStackTrace();
        }
    }

    public HttpServletRequest getRequest() {
        return request;
    }

    public HttpServletResponse getResponse() {
        return response;
    }
}
Avatar billede cayman Nybegynder
19. december 2006 - 10:08 #2
Hmm Har aldrig set denne løsningsform før. Synes du skal vælge om du vil bruge jsp 100% eller 0%.

Mener ikke du kan "include" noget når du er begyndt at skrive til outputstreamen.

100% jsp:
Den helt simple løsning er at lave en nogle jsp sider (header.jsp, footer.jsp), og så include dem i top/bund i dine jsp sider.
Selv bruger jeg tagfiles (hvis det er java 5) eller taglibs (hvis det er 1.4).
Det lader desuden til at dine jsp sider er meget meget ens. Hvis det kun er navnet i feltet der er ens, kan du jo overveje om det skal være dynamisk.

0%jsp
Alternativt kan du lave en servlet pr. side, og lade dem extende din servlet. Så kan du implementere det side specifikke der.
Avatar billede thinge Nybegynder
19. december 2006 - 10:40 #3
Alle mine jsp'er skal meget gerne kun indeholde tags, ikke noget javacode. Derfor denne blanding af servlets og JSP.
"public abstract class AbstractHKPage extends HttpServlet implements Page"
Page er en servlet, hvor createPage() findes.
I bund og grund skal mine JSP'er kun indeholde HTML kode, som er gældende for den specifike JSP, altså ikke <HTML> <body> osv. Dette skulle gerne betyde at jeg kun skal rette en sted hvis jeg nu skulle finde en fejl.

"Mener ikke du kan "include" noget når du er begyndt at skrive til outputstreamen."
Hvorfor fejler det så ikke begge steder?

/thinge
Avatar billede cayman Nybegynder
19. december 2006 - 12:34 #4
Det er jeg helt med på :o)

Men du kan jo så benytte dig af tagfiles/taglibs. Der er også en anden ting. Du skal passe på med at benytte instans variable i en servlet. Alt efter din servletcontainer, så kan du ikke helt vide hvilken instans af servletten du får ved runtime. Du kan løse dette ved at føre dit HttpServletRequest med rundt i dine metodekald, så du ikke behøver sætte dine request/response/session.

Kører du java 5?
Avatar billede thinge Nybegynder
19. december 2006 - 12:39 #5
som spurgt i det andet spørgsmål du besvare, så ved jeg ikke hvad du mener med JAVA 5
Så mit svar må være:
"Nej det gør jeg nok ikke....tror jeg"

/thinge
Avatar billede thinge Nybegynder
21. december 2006 - 11:50 #6
lukker
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