import java.io.*; import java.util.*; import mixer.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import java.util.regex.*; // OBS, använder Apache Jakarta Commons FileUpload package // http://jakarta.apache.org/commons/fileupload/ // http://jakarta.apache.org/commons/io/ import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /* * 7.2.2 * Karl-Adam Karlsson * 06-11-07 * Guestbook * * */ public class GuestBook extends HttpServlet { //Doget public void doGet( HttpServletRequest req, HttpServletResponse res ) throws IOException { Enumeration names = req.getParameterNames(); Statement stmt = null; PreparedStatement picData = null; PreparedStatement pData = null; String picName=null; Connection dbConnection =null; long fileSize=0; res.setContentType( "text/html" ); PrintWriter targetClient =null; String[] tv = req.getParameterValues("get"); //targetClient = res.getWriter(); if( tv==null ){ targetClient = res.getWriter(); // Skriver ut formuläret man kan använda för attt skriva inlägg printForm(targetClient); } try{ // laddar SQL sakerna // OBS, Man kan vilja ändra url här, om man ine har databasen på samma plats. // vilket man troligen inte har... new com.mysql.jdbc.Driver(); String url = "jdbc:mysql://localhost" + "/" + "guestbook"; dbConnection = DriverManager.getConnection(url, "adam", "adam"); stmt = dbConnection.createStatement(); picData = dbConnection.prepareStatement( "INSERT INTO mypics (captiom, image) VALUES( ?, ? )" ); }catch(SQLException sqEx){ sqEx.printStackTrace(); } String from, email, mess, homepage; from = email = mess = homepage = null; // Om args -> GästboksInlägg // om det e null i message eller from så tolkar vi detta som att ett inlägg ej skrivits. // då laddar vi endast databasen och visar. // Skapa spara inlägget, skriv ut formuläret och alla inlägg if(FileUpload.isMultipartContent(req) && req!=null ){ FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); //////////////////////////////////////////////////////////////////// try{ List items = upload.parseRequest(req); // Process the uploaded items Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); if(name.equals("from")){ from = value; }else if(name.equals("email")){ email = value; }else if(name.equals("message")){ mess = value; }else if(name.equals("homepage")){ homepage = value; } pData = dbConnection.prepareStatement("INSERT INTO person(name,email,homepage,comment) VALUES(?,?,?,?)"); pData.setString(1,from); pData.setString(2,email); pData.setString(3,mess); pData.setString(4,homepage); } else {//BILD String fieldName = item.getFieldName(); picName = item.getName(); String contentType = item.getContentType(); //boolean isInMemory = item.isInMemory(); //long sizeInBytes = item.getSize(); //InputStream uploadedStream = item.getInputStream(); byte[] data = item.get(); picData.setObject(2, data); picData.setString(1, picName); //Nu behöver vi bara executa update } } //////////////////////////////////////////////////////////////////// }catch(FileUploadException foo){ targetClient.print(foo.toString()); }catch(SQLException sqEx){ sqEx.printStackTrace(); } //////////////////////////////////////////////////////////////////// //Kolla att saker och ting inte är null. if(from!=null && mess !=null){ //START TRANSACTION try{ stmt.executeUpdate("START TRANSACTION;"); }catch(SQLException sqx){ targetClient.print(sqx.toString()); } try{ //lägg till data pData.executeUpdate(); if(picName!=null) picData.executeUpdate(); //COMMIT! stmt.executeUpdate("COMMIT;"); }catch(SQLException sqx){ targetClient.print(sqx.toString()); } }//end of if //////////////////////////////////////////////////////////////////// printDatabase(stmt, targetClient, res, dbConnection); }else{ //Inga args -> Skriv bara ut gästboken if(!names.hasMoreElements()){ printDatabase(stmt, targetClient, res, dbConnection); }else{ ServletOutputStream out = null; //BufferedOutputStream out = null; try{ Enumeration nam = req.getParameterNames(); ResultSet picResult = null; Statement s2=null; s2 = dbConnection.createStatement(); while (nam.hasMoreElements() ){ String tmpString = (String)nam.nextElement(); String[] tmpValues = req.getParameterValues(tmpString); LinkedList aList = new LinkedList( Arrays.asList(tmpValues) ); //targetClient.print( tmpString+ " =" ); //Loopa igenom alla värden för parametern. if( tmpString.equals("get") && aList.size()>0 ){ String valString = (String)aList.getFirst(); //int a = Integer.getInteger( valString ); //targetClient.print( " "+ valString ); //aList.removeFirst(); picResult = s2.executeQuery("SELECT image FROM mypics WHERE picID="+valString+";"); if(picResult.next()){ res.setContentType( "image/jpeg" ); out = res.getOutputStream(); byte by[] = new byte[ 32768 ]; by = picResult.getBytes("image"); out.write(by); out.flush(); } } }//end of while }catch(SQLException sqx){ out.print( "
Exception: "+ sqx.toString() +"
" ); out.flush(); } } } }//end of doGet /* * Dopost för POST-funktionalitet hos formuläret */ protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet( req, res ); }//end of doPost /* * Laddar göästboksformuläret från en .hmtl fil, * mha mixer och skriver ut det. * */ private void printForm(PrintWriter targetClient){ //Observera att guestform.html måste ligga så den hittas. String html = Mixer.getContent( getHtmlFile( "guestform.html" ) ); targetClient.print(html); } /* * Skriver ut databasen.. * @param Statement stmt, Statement att använda för utskriften. * */ private void printDatabase(Statement stmt, PrintWriter targetClient,HttpServletResponse res, Connection dbConnection){ ResultSet result = null; targetClient.print("