Cet article partage avec vous la mise en œuvre Javaweb du système de gestion de l'information des étudiants pour votre référence. Le contenu spécifique est le suivant
Édition initiale
Il n'y a pas de pages supplémentaires pour la version initiale. Parce que je n'ai pas beaucoup appris sur le frontal, l'interface est laide. Mais-toiles principales: JSP, Javabean, Servlet, JDBC Les pages principales sont les suivantes:
Page de connexion
Page d'accueil
Ajouter des étudiants
Voir tous les étudiants
Enquête des étudiants
Répertoire de projet
base de données
Deux tables, table utilisateur et table étudiante. Afin d'utiliser l'outil DBUTILS, assurez-vous de faire attention à la correspondance de la dénomination des attributs de la table de la base de données et des méthodes get () et set () de Javabean. Par exemple, l'UName dans la table T_User est: private String uname, getUname (), setuname () dans Javabean.
Créer la table T_User (UID CHAR (32) Clé primaire, uname varchar (40) pas null, uppassword varchar (40) pas null);
Créer un tableau T_Student (SID CHAR (32) Clé primaire, Sname Varchar (40) pas null, Gender Varchar (6) Not Null, Birthday Char (10), TellPhone Varchar (15) pas null, e-mail Varchar (40), Description Varchar (500));
Un petit point de connaissance
Se connecter
Lors de la connexion, si le nom d'utilisateur ou la boîte d'entrée de mot de passe est vide est jugé par le code JS de la page de connexion. Lorsque ni l'un ni l'autre n'est vide, interrogez la base de données via les informations du nom d'utilisateur. Si l'utilisateur est trouvé, la connexion sera connectée avec succès, sinon il est nécessaire de déterminer s'il s'agit d'un nom d'utilisateur ou d'une erreur de mot de passe. Cette transaction est traitée sur la couche de service, et la couche DAO n'est responsable que de la recherche des utilisateurs via des noms d'utilisateur.
Code de service d'utilisateur:
classe publique UserService {private userdao userdao = new UserDao (); La question de l'utilisateur public (formulaire utilisateur) lève une exception {utilisateur utilisateur = userdao.Query (formulaire); // utilisateur n'est pas trouvé si (user == null) {lancez une nouvelle exception ("le nom d'utilisateur n'existe pas"); } // L'utilisateur a été trouvé, mais le mot de passe ne correspondait pas si (! Form.GetUpassword (). } return utilisateur; }}Filtre
Afin d'empêcher les utilisateurs qui ne sont pas connectés à pouvoir accéder directement à d'autres pages, un filtre est nécessaire. Placez toutes les pages à l'extérieur de la page de connexion séparément dans un dossier d'utilisateurs. Lorsque l'utilisateur se connecte avec succès, enregistrez les informations de l'utilisateur dans la propriété "SessionUser" de la session. Le filtre détermine si cette propriété est vide. S'il est vide, cela signifie que la connexion de l'utilisateur échoue et ne la libérera pas. Accédez directement à la page de connexion. S'il n'est pas vide, relâchez-le. Le code principal du filtre:
Public Void Dofilter (ServLetRequest Request, ServletResponse Response, FilterChain Chain) lève IOException, ServletException {// 1. Obtenez la session // 2. Déterminez s'il y a un utilisateur dans la session. Si c'est le cas, libérez // 3. Sinon, accédez à la page de connexion httpservletRequest req = (httpServleRequest); User user = (user) req.getSession (). GetAttribute ("SessionUser"); if (user! = null) {chain.dofilter (request, réponse); } else {httpServletResponse resp = (httpservletResponse) réponse; resp.sendRedirect (req.getContextPath () + "/Index.jsp"); }}Requête de combinaison multi-conditions
Sur la page de recherche avancée, il existe quatre options à choisir: le nom de l'étudiant, le sexe, le numéro de téléphone mobile et l'adresse e-mail. Les quatre conditions peuvent être organisées et combinées arbitrairement. J'ai déjà rencontré ce problème lors de la rédaction de projets QT. J'ai utilisé des instructions SQL à l'époque à ce moment-là, mais je ne m'attendais pas à ce que l'utilisation de "où 1 = 1" soit très gênante. Le code suivant est classique et utilise des requêtes floues pour rendre la recherche plus humaine.
Liste publique <Student> Query (Student S) {try {StringBuilder sql = new StringBuilder ("SELECT * FROM T_STUDENT WHERE 1 = 1"); List <object> params = new ArrayList <Bject> (); if (s.getsName ()! = null &&! params.add ("%" + s.getsname () + "%"); } if (s.getgender ()! = null &&! params.add (s.getgender ()); } if (s.getTellPhone ()! = null &&! params.add ("%" + s.gettellphone () + "%"); } if (s.getEmail ()! = null &&! params.add ("%" + s.getEmail () + "%"); } return qr.query (sql.toString (), new Beanlisthandler <Student> (Student.class), params.toArray ()); } catch (exception e) {lancer une nouvelle RuntimeException (e); }}Evolution Edition: Pagination
Affichez les pages de requête pour les rendre plus belles. La page est comme: Page N / Page d'accueil Total M Page précédente 1 2 3 4 5 6 7 8 9 10 Page suivante Dernière page.
L'effet de pagination est le suivant:
Données requises pour la pagination:
Page actuelle: Pagecode
Pages totales: Page totale
Nombre de records totaux: TotalRecord
Nombre d'enregistrements par page: Pagesize
Données actuelles de la page: PEANLIST
PageBean
Étant donné que ces données paginées doivent toujours être transmises entre les couches! Nous encapsulons ces données paginées dans une Javabean, qui est appelée haricot paginée, comme PageBean. Lorsque vous utilisez une requête multi-conditions et en cliquant sur la page 2, l'hyperlien à la page 2 n'a pas de conditions de requête et les conditions de requête seront perdues, nous devons donc conserver les conditions de requête sur tous les liens de la page! Nous voulons enregistrer la condition en tant que chaîne sur l'URL du PageBean!
Le code est le suivant:
Classe publique PageBean <T> {private Integer Pagecode; // Numéro de page actuel PAGE PAGE PAGESISIZE; // Taille de données par page Private Integer TotalRecord; // Total Records Liste privée <T> Beanlist; // L'enregistrement de la page actuelle est défini comme un générique. Afin d'utiliser une URL de chaîne privée directement dans le futur; // les conditions après URL sont combinées dans plusieurs conditions // Renvoie le nombre total de pages entières publiques getTotalPage () {int tp = totalRecord / pagesize; Retour totalRecord% pagesize == 0? TP: TP + 1; } ... // la méthode get, définissez-vous de l'attribut ...}Traitement de la pagination dans chaque couche
Page JSP: Afficher les données d'affichage et "Page N / M pages M Pages précédentes Page 1 2 3 4 5 6 7 8 9 10 Page suivante Dernière page"; Passer le cocode à servlet
Servlet: Créez un objet PageBean, attribuez des valeurs à tous les attributs de PageBean, puis transmettez le code de page et la pages à la couche DAO; Acceptez l'objet PageBean renvoyé par DAO, enregistrez-le dans le champ de demande et revenez à la page
Service: agit comme un intermédiaire, aucune transaction ne doit être traitée
DAO: Obtenez des cocodes de page et pages, créez un objet PageBean, interrogez la base de données pour obtenir TotalRecord et Beanlist, et return PageBean.
Le code pour JSP Page Processing Number:
<centre> Page $ {pb.pagecode} page / total $ {pb.totalpage} Page <a href = "$ {pb.url} & pc = 1" rel = "externe nofollow"> home </a> <c: if test = "$ {pb.url } & pc = $ {pb.pagecode-1} "rel =" external nofollow "> page précédente </a> </c: if> <! - Page Numéro Calcul de la table Début fin -> <c: Choose> <C: quand test =" $ {pb.totalpage <= 10} "> <c: set var =" begin "value =" 1 "> </ C: Set> Value = "$ {pb.totalpage}"> </ c: set> </ c: quand> <c: sinon> <% - Formule de calcul -%> <c: set var = "begin" value = "$ {pb.pagecode-5}"> </ c: set> <c: set var = "end" value> "$ {pb.pagcode + 4}" " En-tête déborde -%> <c: if test = "$ {begin <1}"> <c: set var = "begin" value = "1"> </ c: set> <c: set var = "end" value = "10"> </ c: set> </ c: if> <% - tail overflow -%> <c: if test = "$ {end> pb.totalpage}"> <c Value = "$ {pb.totalpage-9}"> </ c: set> <c: set var = "end" value = "$ {pb.totalpage}"> </ c: set> </ c: if> </ c: sinon> </ c: choisissez> <% - Ligne de page Looping Liste -%> <c: forach var = "i" begin = "$ {début}" } "> <c: choisissez> <c: quand test =" $ {i eq pb.pagecode} "> [$ {i}] </ c: when> <c: sinon> <a href =" $ {pb.url} & pc = $ {i} "> [$ {i}] </a> </c: sinon> </c: choisir> </ c: pour la recherche test = "$ {pb.pagecode <pb.totalpage}"> <a href = "$ {pb.url} & pc = $ {pb.pagecode + 1}"> page suivante </a> </ c: if> <a href = "$ {pb.url} & pc = $ {pb.totalpage}"> dernier Page </a> </ Center>Code de requête de combinaison multi-conditions après l'ajout de pagination
Public PageBean <Student> Query (Student S, int pc, int ps) {try {pageBean <Student> pb = new PageBean <Student> (); pb.setpagecode (PC); pb.setPageSize (ps); / * * Recherchez l'enregistrement total * / stringBuilder numsql = new StringBuilder ("SELECT COUNT (*) FROM T_STUDENT"); StringBuilder whitesql = new StringBuilder ("où 1 = 1"); List <object> params = new ArrayList <Bject> (); if (s.getsName ()! = null &&! params.add ("%" + s.getsname () + "%"); } if (s.getgender ()! = null &&! params.add (s.getgender ()); } if (s.getTellPhone ()! = null &&! params.add ("%" + s.gettellphone () + "%"); } if (s.getEmail ()! = null &&! params.add ("%" + s.getEmail () + "%"); } Numéro de nombre = (nombre) qr.query (numsql.append (wheresql) .toString (), new ScalarHandler (), params.toArray ()); int totalRecord = Number.IntValue (); pb.setTotalRecord (totalRecord); / * * Obtenez le jeu de résultats beanlist * / stringBuilder sql = new StringBuilder ("SELECT * FROM T_STUDENT"); StringBuilder limitesql = new StringBuilder ("limite? ,?"); params.add ((pc-1) * ps); params.add (ps); List <Student> Students = QR.Query (SQL.APPEND (WHERESQL) .APPEND (LimitsQL) .ToString (), New Beanlisthandler <Student> (Student.class), params.toArray ()); pb.setBeanList (étudiants); retour pb; } catch (exception e) {lancer une nouvelle RuntimeException (e); }}Pour plus de matériel d'apprentissage, veuillez faire attention au sujet spécial «développement du système de gestion».
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.