Jsp 我怎样才能注册

Jsp 我怎样才能注册,jsp,servlets,model-view-controller,jstl,Jsp,Servlets,Model View Controller,Jstl,我尝试创建我的注册表单页面,并附带它的servlet。但当我尝试注册时,它不起作用。这里的问题是:当铭文表单开始从该JSP恢复fiels时,它引用null值。请问如何使用此mvc注册?xD JSP 铭文 铭文 地址电子邮件* ${form.erreurs['email']} 通行证* ${form.erreurs['motdepasse']}确认通过日期*伪*${form.erreurs['nom']} 站点web${form.erreurs['siteweb']} 化身 ${form.err

我尝试创建我的注册表单页面,并附带它的servlet。但当我尝试注册时,它不起作用。这里的问题是:当
铭文表单
开始从该JSP恢复fiels时,它引用
null
值。请问如何使用此mvc注册?xD

JSP


铭文
铭文
地址电子邮件*
${form.erreurs['email']}

通行证* ${form.erreurs['motdepasse']}
确认通过日期*
伪*${form.erreurs['nom']}
站点web${form.erreurs['siteweb']}
化身 ${form.erreurs['avatar']}
本地化${form.erreurs['localization']}
描述 ${form.erreurs['description']}

${form.resultat}

Servlet

package com.forum.form;
导入java.io.BufferedInputStream;
导入java.io.BufferedOutputStream;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.text.simpleDataFormat;
导入java.util.Collection;
导入java.util.Date;
导入java.util.HashMap;
导入java.util.Map;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.Part;
导入org.hibernate.Query;
导入org.hibernate.Session;
导入org.hibernate.Transaction;
导入com.forum.beans.usilisateur;
导入com.forum.dao.usilizateUrdao;
导入com.forum.utils.HibernateUtils;
导入eu.medsea.mimeutil.mimeutil;
公开期末班报名表{
私有静态最终字符串CHAMP_EMAIL=“EMAIL”;
私有静态最终字符串CHAMP_PASS=“motdepasse”;
私有静态最终字符串CHAMP_CONF=“确认”;
私有静态最终字符串CHAMP_NOM=“NOM”;
私有静态最终字符串CHAMP_DESC=“description”;
私有静态最终字符串CHAMP_LOC=“本地化”;
私有静态最终字符串CHAMP_SW=“siteweb”;
公共静态最终字符串CHAMP_IMAGE=“avatar”;
公共静态最终int TAILLE_卫生棉条=10240;//10千欧
公共静态最终字符串CHEMIN=“E:\\Bibliothèque logicielle\\workspace\\projetForum\\WebContent\\images\\bd\\”;
私有字符串结果;
私有静态映射erreurs=newhashmap();
公共字符串getResultat(){
返回结果;
}
公共地图getErreurs(){
返回错误;
}
公共利用者调查机构(HttpServletRequest){
字符串email=getValeurChamp(请求,CHAMP_email);
字符串motDePasse=getValeurChamp(请求,CHAMP_PASS);
字符串确认=getValeurChamp(请求,CHAMP_CONF);
字符串nom=getValeurChamp(请求,CHAMP_nom);
字符串描述=getValeurChamp(请求,CHAMP_DESC);
字符串本地化=getValeurChamp(请求,CHAMP_LOC);
字符串siteweb=getValeurChamp(请求,CHAMP_SW);
字符串image=getValeurChamp(请求,CHAMP_image);
System.out.println(“*************************”+电子邮件+motDePasse+确认+名称
+描述+本地化+网站+图片);
试一试{
验证邮件(电子邮件);
}捕获(例外e){
setErreur(CHAMP_EMAIL,e.getMessage());
}
试一试{
验证通过(motDePasse,确认);
}捕获(例外e){
setErreur(CHAMP_PASS,e.getMessage());
}
试一试{
验证名称(nom);
}捕获(例外e){
setErreur(CHAMP_NOM,e.getMessage());
}
如果(图像!=null)
试一试{
image=validationImage(请求,化学试剂);
}捕获(例外e){
setErreur(CHAMP_IMAGE,e.getMessage());
}
提款机提款机提款机=新提款机(电子邮件、motDePasse、nom、,
本地化、网站、说明);
利用你的头像(图像);
if(erreurs.isEmpty()){
result tat=“铭文成功。”;
创建或更新(利用者,请求);
}否则{
result tat=“Échec de l'铭文。”;
}
归还提款人;
}
私有字符串验证映像(HttpServletRequest请求,字符串chemin)
抛出异常{
/*
*这是一个公式化的冠军形象
*使用la méthode getPart()。
*/
SimpleDataFormat格式化程序=新的SimpleDataFormat(“dd-MM-yyy-HH:MM:ss”);
日期aujourdhui=新日期();
字符串nomFichier=formatter.format(aujourdhui).replace(“,”)
.replace(“/”,“”)。replace(“:”,“”)。replace(“-”,“”);
InputStream contenuficheer=null;
试一试{
Part=request.getPart(CHAMP_图像);
nomFichier=nomFichier+getNomFichier(部分);
/*
*这是一个人人都会选择的方法
*donc d'un champ de type fichier(输入类型=“文件”)。
*/
if(nomFichier!=null&&!nomFichier.isEmpty()){
/*
*互联网浏览器的防虫软件
*费希尔当地机器的神秘性。。。
* 
*例如:C:/docsier/sous-docsier/fichier.ext
* 
*关于如何选择一个名字等问题
*这是菲舍尔的延伸,也是超高速铁路的延伸。
*/
nomFichier=nomFichier.substring(
nomFichier.lastIndexOf('/')+1.substring(
nomFichier.lastIndexOf('\\')+1);
/*费希尔伯爵杯*/
contenuficheer=part.getInputStream();
/*提取类型MIME du fichier depuis l'InputStream*/
MimeUtil.r
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Inscription</title>
<link type="text/css" rel="stylesheet"
  href="<c:url value="/inc/form.css"/>" />
</head>
<body>
  <c:import url="/inc/barre.jsp" />
  <form method="post" action="<c:url value="/inscription" />" enctype="multipart/form-data">
      <fieldset>
          <legend>Inscription</legend>

          <label for="email">Adresse email <span class="requis">*</span></label>
          <input type="text" class="btn" id="email" name="email"
              value="<c:out value="${utilisateur.email}"/>" size="20"
              maxlength="60" /> <span class="erreur">${form.erreurs['email']}</span>
          <br /> <label for="motdepasse">Mot de passe <span
              class="requis">*</span></label> <input type="password" class="btn"
              id="motdepasse" name="motdepasse" value="" size="20" maxlength="20" />
          <span class="erreur">${form.erreurs['motdepasse']}</span> <br /> <label
              for="confirmation">Confirmation du mot de passe <span
              class="requis">*</span></label> <input type="password" class="btn"
              id="confirmation" name="confirmation" value="" size="20"
              maxlength="20" /> <br /> <label for="nom">Pseudo <span
              class="requis">*</span></label> <input type="text" id="nom" class="btn"
              name="nom" value="<c:out value="${utilisateur.nom}"/>" size="20"
              maxlength="20" /> <span class="erreur">${form.erreurs['nom']}</span>
          <br /> <label for="siteweb">Site-web </label> <input type="text"
              class="btn" id="siteweb" name="siteweb" value="" size="20"
              maxlength="20" /> <span class="erreur">${form.erreurs['siteweb']}</span>
          <br /> <label for="avatar">Avatar </label> <input type="file"
              id="avatar" name="avatar" value="<c:out value="${nomFichier}"/>" />
          <span class="erreur">${form.erreurs['avatar']}</span><br /> <label
              for="localisation">Localisation </label> <input type="text"
              class="btn" id="localisation" name="localisation" value="" size="20"
              maxlength="20" /> <span class="erreur">${form.erreurs['localisation']}</span><br />
          <label for="description">Description </label>
          <textarea id="description" name="description" rows="4" cols="50"></textarea>
          <span class="erreur">${form.erreurs['description']}</span> <br /> <input
              type="submit" value="Inscription" class="sansLabel" /> <input
              type="reset" value="Remettre à zéro" /> <br />


          <p class="${empty form.erreurs ? 'succes' : 'erreur'}">${form.resultat}</p>
      </fieldset>
  </form>
</body>
</html>
package com.forum.form;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.forum.beans.Utilisateur;
import com.forum.dao.UtilisateurDAO;
import com.forum.utils.HibernateUtils;

import eu.medsea.mimeutil.MimeUtil;

public final class InscriptionForm {
  private static final String CHAMP_EMAIL = "email";
  private static final String CHAMP_PASS = "motdepasse";
  private static final String CHAMP_CONF = "confirmation";
  private static final String CHAMP_NOM = "nom";
  private static final String CHAMP_DESC = "description";
  private static final String CHAMP_LOC = "localisation";
  private static final String CHAMP_SW = "siteweb";
  public static final String CHAMP_IMAGE = "avatar";
  public static final int TAILLE_TAMPON = 10240; // 10 ko
  public static final String CHEMIN = "E:\\Bibliothèque logicielle\\workspace\\projetForum\\WebContent\\images\\bd\\";

  private String resultat;
  private static Map<String, String> erreurs = new HashMap<String, String>();

  public String getResultat() {
      return resultat;
  }

  public Map<String, String> getErreurs() {
      return erreurs;
  }

  public Utilisateur inscrireUtilisateur(HttpServletRequest request) {
      String email = getValeurChamp(request, CHAMP_EMAIL);
      String motDePasse = getValeurChamp(request, CHAMP_PASS);
      String confirmation = getValeurChamp(request, CHAMP_CONF);
      String nom = getValeurChamp(request, CHAMP_NOM);
      String description = getValeurChamp(request, CHAMP_DESC);
      String localisation = getValeurChamp(request, CHAMP_LOC);
      String siteweb = getValeurChamp(request, CHAMP_SW);
      String image = getValeurChamp(request, CHAMP_IMAGE);
      System.out.println("*********************"+email + motDePasse + confirmation + nom
              + description + localisation + siteweb + image);
      try {
          validationEmail(email);
      } catch (Exception e) {
          setErreur(CHAMP_EMAIL, e.getMessage());
      }

      try {
          validationMotsDePasse(motDePasse, confirmation);
      } catch (Exception e) {
          setErreur(CHAMP_PASS, e.getMessage());
      }

      try {
          validationNom(nom);
      } catch (Exception e) {
          setErreur(CHAMP_NOM, e.getMessage());
      }
      if (image != null)
          try {
              image = validationImage(request, CHEMIN);
          } catch (Exception e) {
              setErreur(CHAMP_IMAGE, e.getMessage());
          }

      Utilisateur utilisateur = new Utilisateur(email, motDePasse, nom,
              localisation, siteweb, description);
      utilisateur.setAvatar(image);

      if (erreurs.isEmpty()) {
          resultat = "Succès de l'inscription.";
          createORupdate(utilisateur, request);
      } else {
          resultat = "Échec de l'inscription.";
      }

      return utilisateur;
  }

  private String validationImage(HttpServletRequest request, String chemin)
          throws Exception {
      /*
       * Récupération du contenu du champ image du formulaire. Il faut ici
       * utiliser la méthode getPart().
       */
      SimpleDateFormat formater = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
      Date aujourdhui = new Date();
      String nomFichier = formater.format(aujourdhui).replace(" ", "")
              .replace("/", "").replace(":", "").replace("-", "");
      InputStream contenuFichier = null;
      try {
          Part part = request.getPart(CHAMP_IMAGE);
          nomFichier = nomFichier + getNomFichier(part);

          /*
           * Si la méthode getNomFichier() a renvoyé quelque chose, il s'agit
           * donc d'un champ de type fichier (input type="file").
           */
          if (nomFichier != null && !nomFichier.isEmpty()) {
              /*
               * Antibug pour Internet Explorer, qui transmet pour une raison
               * mystique le chemin du fichier local à la machine du client...
               * 
               * Ex : C:/dossier/sous-dossier/fichier.ext
               * 
               * On doit donc faire en sorte de ne sélectionner que le nom et
               * l'extension du fichier, et de se débarrasser du superflu.
               */
              nomFichier = nomFichier.substring(
                      nomFichier.lastIndexOf('/') + 1).substring(
                      nomFichier.lastIndexOf('\\') + 1);

              /* Récupération du contenu du fichier */
              contenuFichier = part.getInputStream();

              /* Extraction du type MIME du fichier depuis l'InputStream */
              MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
              Collection<?> mimeTypes = MimeUtil.getMimeTypes(contenuFichier);

              /*
               * Si le fichier est bien une image, alors son en-tête MIME
               * commence par la chaîne "image"
               */
              if (mimeTypes.toString().startsWith("image")) {
                  /* Ecriture du fichier sur le disque */
                  ecrireFichier(contenuFichier, nomFichier, chemin);
              } else {
                  throw new Exception(
                          "Le fichier envoyé doit être une image.");
              }
          }
      } catch (IllegalStateException e) {
          /*
           * Exception retournée si la taille des données dépasse les limites
           * définies dans la section <multipart-config> de la déclaration de
           * notre servlet d'upload dans le fichier web.xml
           */
          e.printStackTrace();
          throw new Exception("Le fichier envoyé ne doit pas dépasser 1Mo.");
      } catch (IOException e) {
          /*
           * Exception retournée si une erreur au niveau des répertoires de
           * stockage survient (répertoire inexistant, droits d'accès
           * insuffisants, etc.)
           */
          e.printStackTrace();
          throw new Exception("Erreur de configuration du serveur.");
      } catch (ServletException e) {
          /*
           * Exception retournée si la requête n'est pas de type
           * multipart/form-data.
           */
          e.printStackTrace();
          throw new Exception(
                  "Ce type de requête n'est pas supporté, merci d'utiliser le formulaire prévu pour envoyer votre fichier.");
      }

      return nomFichier;
  }

  private void setErreur(String champ, String message) {
      erreurs.put(champ, message);
  }

  private static String getValeurChamp(HttpServletRequest request,
          String nomChamp) {
      String valeur = request.getParameter(nomChamp);
      if (valeur == null || valeur.trim().length() == 0) {
          return null;
      } else {
          return valeur;
      }
  }

  /*
   * Méthode utilitaire qui a pour unique but d'analyser l'en-tête
   * "content-disposition", et de vérifier si le paramètre "filename" y est
   * présent. Si oui, alors le champ traité est de type File et la méthode
   * retourne son nom, sinon il s'agit d'un champ de formulaire classique et
   * la méthode retourne null.
   */
  private static String getNomFichier(Part part) {
      /* Boucle sur chacun des paramètres de l'en-tête "content-disposition". */
      for (String contentDisposition : part.getHeader("content-disposition")
              .split(";")) {
          /* Recherche de l'éventuelle présence du paramètre "filename". */
          if (contentDisposition.trim().startsWith("filename")) {
              /*
               * Si "filename" est présent, alors renvoi de sa valeur,
               * c'est-à-dire du nom de fichier sans guillemets.
               */
              return contentDisposition
                      .substring(contentDisposition.indexOf('=') + 1).trim()
                      .replace("\"", "");
          }
      }
      /* Et pour terminer, si rien n'a été trouvé... */
      return null;
  }

  /*
   * Méthode utilitaire qui a pour but d'écrire le fichier passé en paramètre
   * sur le disque, dans le répertoire donné et avec le nom donné.
   */
  private void ecrireFichier(InputStream contenuFichier, String nomFichier,
          String chemin) throws Exception {
      /* Prépare les flux. */
      BufferedInputStream entree = null;
      BufferedOutputStream sortie = null;
      try {
          /* Ouvre les flux. */
          entree = new BufferedInputStream(contenuFichier, TAILLE_TAMPON);
          sortie = new BufferedOutputStream(new FileOutputStream(new File(
                  chemin + nomFichier)), TAILLE_TAMPON);

          /*
           * Lit le fichier reçu et écrit son contenu dans un fichier sur le
           * disque.
           */
          byte[] tampon = new byte[TAILLE_TAMPON];
          int longueur = 0;
          while ((longueur = entree.read(tampon)) > 0) {
              sortie.write(tampon, 0, longueur);
          }
      } catch (Exception e) {
          throw new Exception(
                  "Erreur lors de l'écriture du fichier sur le disque.");
      } finally {
          try {
              sortie.close();
          } catch (IOException ignore) {
          }
          try {
              entree.close();
          } catch (IOException ignore) {
          }
      }
  }

  private static void createORupdate(Utilisateur u, HttpServletRequest request) {
      Session s = HibernateUtils.getSession();
      Transaction tx = s.beginTransaction();
      Query q = s
              .createQuery("from Utilisateur where Utilisateur_email = :email");
      q.setString("email", u.getEmail());
      Utilisateur userUpdt = (Utilisateur) q.uniqueResult();

      if (userUpdt != null) {
          userUpdt.setNom(u.getNom());
          userUpdt.setEmail(u.getEmail());
          userUpdt.setSiteweb(u.getSiteweb());
          userUpdt.setLocalisation(u.getLocalisation());
          userUpdt.setDescription(u.getDescription());
          s.update(userUpdt);
      } else {
          SimpleDateFormat formater = new SimpleDateFormat(
                  "dd-MM-yyyy hh:mm:ss");
          Date aujourdhui = new Date();
          u.setDateInscrit(formater.format(aujourdhui));
          s.persist(u);
      }

      tx.commit();
  }

  private void validationEmail(String email) throws Exception {
      UtilisateurDAO<Utilisateur, String> ud = new UtilisateurDAO<Utilisateur, String>();
      if (ud.findByID(email) != null)
          throw new Exception("Adresse mail déjà utilisée.");
      else if (email == null || ud.findByID(email) != null
              || !email.matches("([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)")) {
          throw new Exception("Merci de saisir une adresse mail valide.");
      }
  }

  private void validationMotsDePasse(String motDePasse, String confirmation)
          throws Exception {
      if (motDePasse != null && confirmation != null) {
          if (!motDePasse.equals(confirmation)) {
              throw new Exception(
                      "Les mots de passe entrés sont différents, merci de les saisir à nouveau.");
          } else if (motDePasse.length() < 6) {
              throw new Exception(
                      "Les mots de passe doivent contenir au moins 6 caractères.");
          }
      } else {
          throw new Exception(
                  "Merci de saisir et confirmer votre mot de passe.");
      }
  }

  private static void validationNom(String nom) throws Exception {
      UtilisateurDAO<Utilisateur, String> ud = new UtilisateurDAO<Utilisateur, String>();
      if (ud.findByNom(nom) != null)
          throw new Exception("Nom d'utilisateur déjà utilisée.");
      else if (nom == null || nom.length() < 3) {
          throw new Exception(
                  "Le nom d'utilisateur doit contenir au moins 3 caractères.");
      }
  }
}
package com.forum.servlets;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.forum.beans.Connecte;
import com.forum.beans.Nombres;
import com.forum.beans.Utilisateur;
import com.forum.dao.ConnecteDAO;
import com.forum.dao.NombresDAO;
import com.forum.dao.UtilisateurDAO;
import com.forum.form.InscriptionForm;


public class Inscription extends HttpServlet {
  public static final String ATT_USER = "utilisateur";
  public static final String ATT_FORM = "form";
  public static final String VUE = "/WEB-INF/inscription.jsp";

  public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      NombresDAO<Nombres, Integer> nd = new NombresDAO<Nombres, Integer>();
      SimpleDateFormat formater = new SimpleDateFormat("dd-MM-yyyy");
      Date aujourdhui = new Date();
      Nombres n = nd.findByDay(formater.format(aujourdhui).replace("-", ""));
      if (n == null) {
          n = new Nombres(1);
          nd.create(n);
      } else {
          n.setNbvisiteurs(n.getNbvisiteurs() + 1);
          nd.update(n);
      }

      this.getServletContext().getRequestDispatcher(VUE)
              .forward(request, response);
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      HttpSession session = request.getSession();

      InscriptionForm form = new InscriptionForm();

      Utilisateur utilisateur = form.inscrireUtilisateur(request);

      Connecte c = new Connecte(utilisateur.getNom());
      ConnecteDAO<Connecte, String> cd = new ConnecteDAO<Connecte, String>();
      if (cd.findByID(utilisateur.getNom()) != null)
          cd.update(c);
      else
          cd.create(c);
      cd.findAll5();

      request.setAttribute(ATT_FORM, form);

      if (!form.getErreurs().isEmpty()) {
          request.setAttribute(ATT_USER, utilisateur);
          this.getServletContext().getRequestDispatcher(VUE)
                  .forward(request, response);
      } else {
          UtilisateurDAO<Utilisateur, String> ud = new UtilisateurDAO<Utilisateur, String>();
          ud.create(utilisateur);
          session.setAttribute(ATT_USER, utilisateur);
          response.sendRedirect("/projetForum/listforums");
      }

  }
}