Der var jeg lige hurtig nok - jeg skulle lige kopiere "den" forkerte version over igen.
Fejler jeg får er den her:
java.lang.NullPointerException
at DrawCinemaServlet.drawCinema(DrawCinemaServlet.java:52)
at OrderServlet.doPost(OrderServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:534)
Historien er den at OrderServlet kalder klassen DrawCinemaServlet der tegner en biografsal.
Her er OrderServlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class OrderServlet extends MainServlet {
/*
* OrderServlet er subklasse til MainServlet. OrderServlet tegner biografen op for en given forestilling og giver
* mulighed for enten som kunde at vælge sæder, indtaste kundeoplysninger og derefter bestille en eller flere
* billetter, eller som medarbejder at bestille en billet til en kunde, eller vælge og sælge en ikke bestilt billet.
*
* Man kommer til OrderServlet fra RequestServlet, eller fra PlaceOrderServlet via MessageServlet ved en fejl
* i en transaktion.
*
*/
Presentation present = new Presentation("Biografoversigt", "
http://www.itu.dk/people/rlh/");
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String Medarbejder_email = req.getParameter("Medarbejder_email");
String Admin = req.getParameter("Admin");
String Bio_ID = req.getParameter("Bio_ID");
String source = req.getParameter("source");
String forestilling1 = req.getParameter("Forestilling_ID");
String sal1 = req.getParameter("Sal_ID");
int Forestilling_ID = Integer.parseInt(forestilling1);
int Sal_ID = Integer.parseInt(sal1);
String Medarbejder_ID = req.getParameter("Medarbejder_ID");
res.setContentType("text/html");
ServletOutputStream out = res.getOutputStream();
out.println(present.makeHeader());
DrawCinemaServlet cinema = new DrawCinemaServlet(Forestilling_ID, Sal_ID); // tegner Salen ud fra de angive parametre.
try {
String bio = cinema.drawCinema();
if(source.equals("Med_Kunde_Bestil")){
out.println("<form action='
http://localhost:8080/servlets/servlet/PlaceOrderServlet' method='post'>"+bio
+" <br/><br/><table><tr><td>Navn:</td><td><input type='text' name='Kunde_navn1'></td></tr>"
+"<tr><td>Email:</td><td><input type='text' name='Kunde_email1'></td></tr>"
+"<tr><td>Password:</td><td><input type='password' name='Kunde_password1'></td></tr>"
+"<tr><td>Postnummer:</td><td><input type='text' name='Kunde_postnummer1'></td></tr>"
+"<input type='hidden' name='Forestilling_ID' value='"+Forestilling_ID+"'>"
+"<input type='hidden' name='Sal_ID' value='"+Sal_ID+"'>"
+"<input type='hidden' name='Medarbejder_email' value='"+Medarbejder_email+"'/> "
+"<input type='hidden' name='Admin' value='"+Admin+"'/> "
+"<input type='hidden' name='Bio_ID' value='"+Bio_ID+"'/> "
+"<input type='hidden' name='source' value='Med_Kunde_Bestil'></table><br/>"
+"<input type='submit' value='Send bestilling'/></form>");
} //Medarbejder bestiller billet - medarbejder får sine medarbejderparametre med
else if(source.equals("Salg")){
out.println("<form action='
http://localhost:8080/servlets/servlet/PlaceOrderServlet' method='post'>"+bio
+" <br/><br/><input type='hidden' name='Forestilling_ID' value='"+Forestilling_ID+"'>"
+"<input type='hidden' name='Medarbejder_ID' value='"+Medarbejder_ID+"'>"
+"<input type='hidden' name='Sal_ID' value='"+Sal_ID+"'>"
+"<input type='hidden' name='Medarbejder_email' value='"+Medarbejder_email+"'/> "
+"<input type='hidden' name='Admin' value='"+Admin+"'/> "
+"<input type='hidden' name='Bio_ID' value='"+Bio_ID+"'/> "
+"<input type='hidden' name='source' value='Salg'>"
+"<input type='submit' value='Sælg billet'/></form>");
} //Medarbejder bestiller sælger til kunde - bruger sit Medarbejder_ID som det Kunde_ID billetterne sælges i
else {
out.println("<form action='
http://localhost:8080/servlets/servlet/PlaceOrderServlet' method='post'>"+bio
+" <br/><br/><table><tr><td>Navn:</td><td><input type='text' name='Kunde_navn1'></td></tr>"
+"<tr><td>Email:</td><td><input type='text' name='Kunde_email1'></td></tr>"
+"<tr><td>Password:</td><td><input type='password' name='Kunde_password1'></td></tr>"
+"<tr><td>Postnummer:</td><td><input type='text' name='Kunde_postnummer1'></td></tr>"
+"<input type='hidden' name='Forestilling_ID' value='"+Forestilling_ID+"'>"
+"<input type='hidden' name='Sal_ID' value='"+Sal_ID+"'>"
+"<input type='hidden' name='source' value='Bestil'></table><br/>"
+"<input type='submit' value='Send bestilling'/></form>");
} //Kunde bestiller billet
out.println(present.makeFooter());
} // end try
catch (SQLException e) {
res.sendRedirect("
http://localhost:8080/servlets/servlet/MessageServlet?source=DBfejl");
return;
} // sender til indexsiden
} //end doGet
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doPost(req,res);
} // håndterer de tilfælde hvor der redicteres til OrderServlet og parametre gives med i URL
} // end OrderServlet
Her er DrawCinema:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class DrawCinemaServlet extends MainServlet {
/*
* DrawCinemaServlet indeholder metoden drawCinema() som returnerer en string i form af en html-tabel som
* forestiller en biografsal for en given forestilling. Den undersøger for hvert sæde om det er solgt, bestilt
* eller angivet som gangareal. De sæder som er frie bliver tegnet som checkboxe, de andre med forskellige
* farver og betegnelser.
*
* Man kommer til DrawCinemaServlet fra OrderServlet.
*
*/
StringBuffer bio = new StringBuffer(20500);
int Forestilling_ID;
int Sal_ID;
public DrawCinemaServlet (int Forestilling_ID1, int Sal_ID1) {
Forestilling_ID = Forestilling_ID1;
Sal_ID = Sal_ID1;
} // bruges i OrderServlet
public String drawCinema () throws SQLException {
String query1 = Queries.query11(Forestilling_ID, Sal_ID); // returnerer imnformationen om en given sal til en foretilling
String query2 = Queries.query12(Sal_ID); //tæller antal af sæder i hver række
st.execute(query1);
ResultSet rs1 = st.getResultSet();
st1.execute(query2);
ResultSet rs2 = st1.getResultSet();
int seat = 0;
int t = 0;
int seatID = 0;
int seatRow = 0;
int seatNo = 0;
int seatPassage = 0;
int seatSold = 0;
String seatOrdered = "";
while (rs2.next()) {
seat = rs2.getInt("COUNT(DISTINCT Sæde_nr)"); // seat svarer til antal sædder på en række +1
} //som bruges til at skrive rækkenummeret ud
bio.append("<table>");
bio.append("<tr><td class='laerred' colspan='"+seat+"'>Lærred</td></tr><tr/>"); // tegner lærred i biografen
while (rs1.next()) { // while kører så længe der er flere rækker i salen
if (t == 0) {
bio.append("<tr>"); // tilføjer <tr> hver gang en række er kørt igennem
}
t++;
seatID = rs1.getInt("Sæde.Sæde_ID");
seatRow = rs1.getInt("Sæde_række");
seatNo = rs1.getInt("Sæde_nr");
seatPassage = rs1.getInt("Gang");
seatOrdered = rs1.getString("Bestilling.Sæde_ID");
seatSold = rs1.getInt("Bestilling.Solgt");
if(seatPassage == 1) {
bio.append("<td class='gang'></td>"); // en plads i biografen er reserveret til gang
}
else if (seatSold == 1) {
bio.append("<td class='solgt'>S</td>"); // en plads i biografen er allerede solgt
}
else if (seatOrdered != null) {
bio.append("<td class='reser'>B</td>"); // en plads i biografen er reserveret
}
else {
bio.append("<td class='fri'><input name=\""+seatID+"\" type=\"checkbox\" /></td>\n");
} // pladsen er fri og checkboksen får sæde_ID som navn. Det bruges senere når der indsættes i bestilling
if (t == seat) {
bio.append("<td class='række'>"+seatRow+"</td></tr>"); // skriver rækkenummeret ud
t = 0;
}
} // end while
bio.append("<tr><td class='solgt'>S</td><td class='signatur' colspan='"+(seat+1)+"'>Solgt</td></tr>"); // signaturforklaring solgt
bio.append("<tr><td class='reser'>B</td><td class='signatur' colspan='"+(seat+1)+"'>Bestilt</td></tr>"); // signaturforklaring bestilt
bio.append("</table>"); // slutter biograftabellen ud
String bionavn = bio.toString();
return bionavn; // returnerer den tegnede biograf f.eks. til OrderServlet
} // end drawCinema
} // end DrawCinema