/* * UploadServlet.java * * Created on July 12, 2006, 12:30 PM */ import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.jms.BytesMessage; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadException; /** * * @author jungi * @version */ public class UploadServlet extends HttpServlet { private static final long MAX_SIZE = 300000; /** Processes requests for both HTTP GET and POST methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Servlet UploadServlet"); out.println(""); out.println(""); out.println("

Servlet UploadServlet at " + request.getContextPath() + "

"); if (FileUpload.isMultipartContent(request)) { try { processFiles(request); out.println("File is OK."); } catch (Exception ex) { print2Log("FileUpload error: " + ex.getMessage()); errorOut(request,response,ex.getMessage()); } } else { out.println("Your request doesn't include MultipartConent"); } out.println(""); out.println(""); out.close(); } // /** Handles the HTTP GET method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** Handles the HTTP POST method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** Returns a short description of the servlet. */ public String getServletInfo() { return "Short description"; } // private void processFiles(HttpServletRequest request) throws FileUploadException, IOException, NamingException, JMSException { String eMail = null; byte[] data = null; print2Log("Get request with MultiPartContents, size: " + request.getContentLength()); DiskFileUpload upload = new DiskFileUpload(); List /* FileItem */ fileItems = upload.parseRequest(request, 10000, MAX_SIZE, System.getProperty("java.io.tmpdir")); Iterator it = fileItems.iterator(); while (it.hasNext()) { FileItem item = (FileItem)it.next(); if (item.isFormField()) { // read e-mail if (item.getFieldName().equals("e-mail")) { eMail = item.getString(); } } else { // check file size if (item.getSize() == 0) { throw new FileUploadException("File " + item.getName() + " has is 0 B size"); } // only png images support if (!item.getContentType().equals("image/png")) { throw new FileUploadException("Only image/png support."); } data = new byte[new Long(item.getSize()).intValue()]; data = item.get(); } } // send JMS message sendJMSMessageToPhotoArchiveDestination(data, eMail); print2Log("Sending message with e-mail: " + eMail + " and size " + data.length); } private Message createJMSMessageForPhotoArchiveDestination(Session session, byte[] messageData, String eMail) throws JMSException { // TODO create and populate message to send // javax.jms.TextMessage tm = session.createTextMessage(); // tm.setText(messageData.toString()); // return tm; BytesMessage tm = session.createBytesMessage(); tm.setStringProperty("email", eMail); tm.writeBytes(messageData); return tm; } private void sendJMSMessageToPhotoArchiveDestination(byte[] messageData, String eMail) throws NamingException, JMSException { javax.naming.Context c = new javax.naming.InitialContext(); javax.jms.ConnectionFactory cf = (javax.jms.ConnectionFactory) c.lookup("java:comp/env/jms/PhotoArchiveDestinationFactory"); javax.jms.Connection conn = null; javax.jms.Session s = null; try { conn = cf.createConnection(); s = conn.createSession(false,s.AUTO_ACKNOWLEDGE); javax.jms.Destination destination = (javax.jms.Destination) c.lookup("java:comp/env/jms/PhotoArchiveDestination"); javax.jms.MessageProducer mp = s.createProducer(destination); mp.send(createJMSMessageForPhotoArchiveDestination(s,messageData, eMail)); } finally { if (s != null) { s.close(); } if (conn != null) { conn.close(); } } } private static final void print2Log(String msg){ Logger.getLogger("UploadServlet").log(Level.INFO,msg); } private void errorOut(HttpServletRequest request, HttpServletResponse response, String message) throws ServletException, IOException { request.getRequestDispatcher("error.jsp?message=" + message).forward(request,response); } }