Java tutorial
/** * Vosao CMS. Simple CMS for Google App Engine. * * Copyright (C) 2009-2010 Vosao development team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * email: vosao.dev@gmail.com */ package org.vosao.servlet; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.tanesha.recaptcha.ReCaptchaResponse; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.util.Streams; import org.vosao.common.UploadException; import org.vosao.common.VosaoContext; import org.vosao.entity.ConfigEntity; import org.vosao.entity.FormEntity; import org.vosao.i18n.Messages; import org.vosao.utils.FileItem; import org.vosao.utils.RecaptchaUtil; import org.vosao.utils.StreamUtil; /** * Servlet for form submition in forms plugin. * * @author Aleksandr Oleynik */ public class FormSendServlet extends AbstractServlet { private static final long serialVersionUID = 1L; private static final long MAX_SIZE = 10000000; private static final String TEXT_MESSAGE = "{\"result\":\"%s\", \"message\":\"%s\"}"; private static final String FORM_NAME_PARAM = "form-name"; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String message = null; Map<String, String> parameters = new HashMap<String, String>(); List<FileItem> files = new ArrayList<FileItem>(); try { if (request.getContentType().startsWith("multipart/form-data")) { ServletFileUpload upload = new ServletFileUpload(); upload.setFileSizeMax(MAX_SIZE); upload.setHeaderEncoding("UTF-8"); FileItemIterator iter; try { iter = upload.getItemIterator(request); InputStream stream = null; while (iter.hasNext()) { FileItemStream item = iter.next(); stream = item.openStream(); if (item.isFormField()) { parameters.put(item.getFieldName(), Streams.asString(stream, "UTF-8")); } else { files.add(new FileItem(item, StreamUtil.readFileStream(stream))); } } } catch (FileUploadException e) { logger.error(e.getMessage()); throw new UploadException(Messages.get("request_parsing_error")); } } else { for (Object key : request.getParameterMap().keySet()) { String paramName = (String) key; parameters.put(paramName, request.getParameter(paramName)); } } message = processForm(parameters, files, request); } catch (UploadException e) { message = createMessage("error", e.getMessage()); logger.error(message); } catch (Exception e) { message = createMessage("error", e.getMessage()); logger.error(message); e.printStackTrace(); } response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); response.setStatus(200); response.getWriter().write(message); } private String createMessage(final String result, final String message) { return String.format(TEXT_MESSAGE, result, message); } private String processForm(Map<String, String> parameters, List<FileItem> files, HttpServletRequest request) throws UploadException { String formName = parameters.get(FORM_NAME_PARAM); if (formName == null) { throw new UploadException(Messages.get("form.name_parameter_not_found")); } FormEntity form = getDao().getFormDao().getByName(formName); if (form == null) { throw new UploadException(Messages.get("form.not_found", formName)); } ConfigEntity config = VosaoContext.getInstance().getConfig(); String challenge = parameters.get("recaptcha_challenge_field"); String response = parameters.get("recaptcha_response_field"); if (form.isEnableCaptcha() && config.isEnableRecaptcha()) { ReCaptchaResponse recaptchaResponse = RecaptchaUtil.check(config.getRecaptchaPublicKey(), config.getRecaptchaPrivateKey(), challenge, response, request); if (!recaptchaResponse.isValid()) { return createMessage("error", Messages.get("incorrect_captcha")); } } getBusiness().getFormBusiness().submit(form, parameters, files, request.getRemoteAddr()); return createMessage("success", Messages.get("form.success_submit")); } }