import java.io.*; import mixer.*; import java.util.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import com.oreilly.servlet.MultipartRequest; public class guestBookImage extends HttpServlet{ Connection con = null; String htmlDynamic = null; PreparedStatement pstmt1 = null; PreparedStatement pstmt2 = null; PreparedStatement pstmt3 = null; Mixer mix = null; /*Kopplar till databasen geustbookimage, skapar 3 st prepared statements och sätter autocommit till false för att möljiggöra transaktionshantering */ public void init() throws ServletException{ try{ String url = "jdbc:mysql://localhost/guestbookimage"; Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(url, "josef", "cotaidis"); con.setAutoCommit(false); pstmt1 = con.prepareStatement("INSERT INTO message (datim, name, email, homepage, comment) values (now(), ?, ?, ?, ?)"); pstmt2 = con.prepareStatement("SELECT * FROM message;"); pstmt3 = con.prepareStatement("INSERT INTO image (id, pic, mime) values (LAST_INSERT_ID(), ?, ?)"); }catch(ClassNotFoundException cnfe){ log("Couldn't load database driver: " + cnfe.getMessage()); }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } } //Kopplar från databasen public void destroy(){ try{ con.close(); }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } } //Skriver ut hela innehållet i databasen public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{ res.setContentType("text/html"); PrintWriter out = res.getWriter(); if (htmlDynamic == null) { htmlDynamic = Mixer.getContent(new File(getServletContext().getRealPath("guestbookimage.html"))); } mix = new Mixer(htmlDynamic); try{ Boolean flag = true; ResultSet rs = pstmt2.executeQuery(); if(rs.first()){ while(flag){ mix.add("", "===id===", rs.getString("id")); mix.add("", "===datim===", rs.getString("datim")); mix.add("", "===email===", rs.getString("email")); mix.add("", "===homepage===", rs.getString("homepage")); mix.add("", "===name===", rs.getString("name")); mix.add("", "===comment===", rs.getString("comment")); mix.add("", "===imagesrc===", "http://localhost:8080/ip/servlet/getImage?id=" +rs.getString("id")); flag = rs.next(); } rs.close(); }else{ mix.removeHTML(""); } }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } out.println(mix.getMix()); } /*Skapar en multipartRequest tar fram sökvägen för serverns temporära katalog där bilden sparas innan den lagras i databasen läser in bilden till bytearrayen data utför en transaktion där data sparas i två olika tabeller i rätt ordning utför commit för att släppa låset till databasen om fel inträffar utförs en rollback slutligen anropas doGet för att visa det uppdaterade innehållet */ public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{ try{ File dir = (File)getServletContext().getAttribute("javax.servlet.context.tempdir"); MultipartRequest multi = new MultipartRequest(req, dir.getAbsolutePath(), 5 * 1024 * 1024); File f = multi.getFile("image"); byte[] data = null; if (f != null){ FileInputStream fis = new FileInputStream(f); data=new byte[(int) f.length()]; fis.read(data); fis.close(); } if(multi.getParameter("name") != null){ pstmt1.setString(1, multi.getParameter("name").replaceAll("<", "<").replaceAll(">", ">")); pstmt1.setString(2, multi.getParameter("email").replaceAll("<", "<").replaceAll(">", ">")); pstmt1.setString(3, multi.getParameter("homepage").replaceAll("<", "<").replaceAll(">", ">")); pstmt1.setString(4, multi.getParameter("comment").replaceAll("<", "<").replaceAll(">", ">")); pstmt1.executeUpdate(); if (data != null){ pstmt3.setBytes(1, data); pstmt3.setString(2, multi.getContentType("image")); pstmt3.executeUpdate(); } } con.commit(); }catch(SQLException sqle){ log(sqle.getMessage()); try{ con.rollback(); }catch(SQLException sqlex){} }catch(Exception e){ log(e.getMessage()); } doGet(req, res); } }