Dieser Artikel teilt Ihnen die Javaweb -Implementierung des Student Information Management Systems für Ihre Referenz mit. Der spezifische Inhalt ist wie folgt
Erste Ausgabe
Es gibt keine zusätzlichen Seiten für die erste Version. Da ich nicht viel über das Front-End gelernt habe, ist die Schnittstelle hässlich. Haupttechnologien: JSP, JavaBean, Servlet, JDBC -Hauptseiten sind wie folgt:
Anmeldeseite
Startseite
Fügen Sie Schüler hinzu
Alle Schüler anzeigen
Untersuchung der Studenten
Projektverzeichnis
Datenbank
Zwei Tabellen, Benutzertabelle und Schülertabelle. Um das DBUTILS -Tool zu verwenden, achten Sie darauf, dass Sie die Anpassung der Attribut -Benennung der Datenbanktabelle und der Get () und der Set () -Methoden der Javabäe beachten. Beispielsweise lautet der Uname in der T_USER -Tabelle: private String -Uname, Getuname (), setuname () in Javabean.
Tabelle T_USER erstellen (UID -Zeichen (32) Primärschlüssel, Uname varchar (40) NICHT NULL, UPPASSWORD VARCHAR (40) NICHT NULL);
TABELLE T_STUDENT CREATE (SID char (32) Primärschlüssel, Sname Varchar (40) NICHT NULL, GENDER VARCHAR (6) NICHT NULL, BUTSTAGE CHAR (10), TellPon Varchar (15) NICHT NULL, E -Mail Varchar (40), Beschreibung Varchar (500));
Ein kleiner Wissenspunkt
Einloggen
Beim Anmelden wird der Eingabefeld des Benutzers oder des Kennworts leer nach dem JS -Code der Anmeldeseite beurteilt. Wenn weder leer ist, fragen Sie die Datenbank über die Benutzernameninformationen. Wenn der Benutzer gefunden wird, wird die Anmeldung erfolgreich angemeldet. Andernfalls ist es erforderlich, festzustellen, ob es sich um einen Benutzernamen oder ein Kennwortfehler handelt. Diese Transaktion wird in der Serviceschicht verarbeitet und die DAO -Ebene ist nur dafür verantwortlich, Benutzer über Benutzernamen zu finden.
UserService -Code:
public class userService {private userDao userDao = new userDao (); öffentliche Benutzerabfrage (Benutzerform) löst Ausnahme aus {user user = userDao.Query (Formular); // Benutzer nicht gefunden, wenn (user == null) {neue Ausnahme werfen ("Benutzername nicht existiert"); } // Der Benutzer wurde gefunden, aber das Kennwort stimmte nicht mit if (! Form.getupassword (). Equals (user.getupassword ())))) {Neue Ausnahme ("Kennwortfehler"); } Rückgabe des Benutzers; }}Filterfilter
Um zu verhindern, dass Benutzer, die nicht angemeldet sind, nicht in der Lage sind, direkt auf andere Seiten zuzugreifen, ist ein Filter erforderlich. Platzieren Sie alle Seiten außerhalb der Anmeldeseite separat in einem Benutzerordner. Wenn sich der Benutzer erfolgreich anmeldet, speichern Sie die Informationen des Benutzers in der Sessionuser -Eigenschaft der Sitzung. Der Filter bestimmt, ob diese Eigenschaft leer ist. Wenn es leer ist, bedeutet dies, dass die Benutzeranmeldung nicht erfolgreich ist und ihn nicht freigibt. Gehen Sie direkt zur Anmeldeseite. Wenn es nicht leer ist, lassen Sie es los. Der Hauptcode des Filters:
Public Void Dofilter (ServletRequest Request, ServletResponse -Antwort, Filterchain -Kette) löst IOException aus, ServletException {// 1. Holen Sie sich eine Sitzung // 2. Stellen Sie fest, ob sich in der Sitzung ein Benutzer befindet. Wenn ja, veröffentlichen Sie // 3. Andernfalls wechseln Sie zur Anmeldeseite httpServletRequest req = (httpServletRequest) Anforderung; User user = (user) req.getSession (). GetAtTribute ("SessionUser"); if (user! = null) {chain.dofilter (Anfrage, Antwort); } else {httpServletResponse resp = (httpServletResponse) Antwort; resp.sendredirect (req.getContextPath () + "/index.jsp"); }}Multi-Kondition-Kombination von Abfrage
Auf der erweiterten Suchseite stehen vier Optionen zur Auswahl: Schülername, Geschlecht, Handynummer und E -Mail -Adresse. Die vier Bedingungen können willkürlich angeordnet und kombiniert werden. Ich habe dieses Problem schon einmal beim Schreiben von QT -Projekten begegnet. Ich habe zu diesem Zeitpunkt SQL -Anweisungen verwendet, aber ich habe nicht erwartet, dass "wobei 1 = 1" sehr problematisch wäre. Der folgende Code ist klassisch und verwendet Fuzzy -Abfragen, um die Suche humaner zu gestalten.
public list <Student> query (student s) {try {stringBuilder sql = new StringBuilder ("SELECT * von t_student Where 1 = 1"); List <Object> params = new ArrayList <Object> (); if (S.GetsName ()! = null &&! params.Add ("%" + s.getsname () + "%"); } if (s.getGender ()! = null &&! Params.Add (S.GGENTER ()); } if (s.gettellphone ()! = null &&! params.Add ("%" + S.GettElphone () + "%"); } if (S.Getemail ()! = null &&! params.Add ("%" + S.Getemail () + "%"); } return qr.query (sql.toString (), New BeanlistHandler <Student> (student.class), params.toarray ()); } catch (Ausnahme e) {neue runTimeException (e) werfen; }}Evolution Edition: Pagination
Zeigen Sie die Abfrageseiten an, um sie schöner zu machen. Die Seite ist wie: Seite N/Gesamt -M -Homepage Vorherige Seite 1 2 3 4 5 6 7 8 9 10 Nächste Seite Letzte Seite.
Der Paginationseffekt ist wie folgt:
Daten, die für die Paginierung erforderlich sind:
Aktuelle Seite: PageCode
Gesamtseiten: Gesamtpage
Gesamtrekordzahl: TotalRecord
Anzahl der Datensätze pro Seite: PageSize
Aktuelle Seitendaten: Beanlist
Seitenbekette
Da diese ausgelasteten Daten immer zwischen den Schichten weitergegeben werden müssen! Wir verkapulieren diese ausgelasteten Daten in eine Javabäe, die als PAGED Bean wie PageBohnen bezeichnet wird. Bei Verwendung von Multi-Kondition-Abfragen und Klicken auf Seite 2 enthält der Hyperlink auf Seite 2 keine Abfragebedingungen, und die Abfragebedingungen gehen verloren. Daher müssen wir die Abfragebedingungen auf allen Links auf der Seite aufbewahren! Wir möchten den Zustand als Zeichenfolge für die URL der Seitenbekleidung speichern!
Der Code ist wie folgt:
öffentliche Klasse PageBean <T> {private Integer pagecode; // Aktuelle Seitenzahl private Integer pageSize; // Datengröße pro Seite private Integer TotalRecord; // Total Records Private List <T> BeanList; // Der Datensatz der aktuellen Seite ist als Generikum definiert. Um die private String -URL in Zukunft direkt zu verwenden, werden die Bedingungen nach der URL unter mehreren Bedingungen kombiniert // Die Gesamtzahl der Seiten öffentliche Ganzzahl getTotalPage () {int tp = TotalRecord/PageSize; Return TotalRecord%PageSize == 0? TP: TP+1; } ... // die Get, setzen Sie die Methode des Attributs ...}Verarbeitung von Paging in jeder Schicht
JSP -Seite: Zeigen Sie die Daten und "Seite N/Gesamt -M -Seiten vor. Vorheriger Seite 1 2 3 4 5 6 7 8 9 10 Nächste Seite Letzte Seite"; Pagecode an Servlet übergeben
Servlet: Erstellen Sie ein Seitenbean -Objekt, weisen Sie allen Attributen der Seitenbekleidung Werte zu und übergeben Sie dann PageCode und pagieren Sie sie an die DAO -Ebene. Akzeptieren Sie das von DAO zurückgegebene Seitenbean -Objekt, speichern Sie es im Feld Anforderungsfeld und kehren Sie zur Seite zurück
Service: Handelt als Mittelsmann, müssen keine Transaktionen verarbeitet werden
DAO: Holen Sie sich PageCode und pageSize, erstellen Sie das Seitenbean -Objekt, fragen Sie die Datenbank, um TotalRecord und BeanList zu erhalten, und senden Sie die Seitenbekleidung zurück.
Der Code für JSP -Seitenverarbeitungsseitennummer:
<Center> Seite $ {pb.PageCode} Seite/Gesamt $ {pb.totalpage} Seite <a href = "$ {pb.url} & pc = 1" rel = "external nofollow"> Homepage </a> <c: if test = "$ {{pb.pageCode> 1}"> ">"> ">"> ">"> <A. } & pc = $ {pb.PageCode-1} "rel =" externe nofollow "> vorherige Seite </a> </c: if> <!-Seitenzahlenberechnung beginne End-> <c: Wählen Sie> <c: Wenn test =" $ {pb.totalpage <= 10} "> <c: set var =" value "1" 1 "1" 1 "1" 1 "1"> </C. value="${pb.totalPage }"></c:set> </c:when> <c:otherwise> <%-- Calculation formula--%> <c:set var="begin" value="${pb.pageCode-5 }"></c:set> <c:set var="end" value="${pb.pageCode+4 }"></c:set> <%--- Header overflow--%> <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:set var="begin" value="${pb.totalPage-9 }"></c:set> <c:set var="end" value="${pb.totalPage }"></c:set> </c:if> </c:otherwise></c:choose><%-- Looping page number list--%><c:forEach var="i" begin="${begin }" end="${end } "> <c: Wählen Sie> <c: wenn test =" $ {i eq pb.pagecode} "> [$ {i}] </c: Wenn> <c: ansonsten> <a href =" $ {pb.url}} & pc = {i} "> [$ {i}] </a> </c: ansonsten: ansonsten> </c:: Ansonsten: test="${pb.pageCode < pb.totalPage }"><a href="${pb.url }&pc=${pb.pageCode+1 }">Next page</a></c:if><a href="${pb.url }&pc=${pb.totalPage }">Last Seite </a> </center>Multi-Kondition-Komy-Query-Code nach Hinzufügen von Pagination
public pageBean <Student> Abfrage (Student S, int pc, int ps) {try {PageBean <Student> pb = new PageBean <Stud Student> (); PB.SetPageCode (PC); pb.setPageSize (PS); /** Abfragen Sie den Gesamtsatz*/ StringBuilder numsql = new StringBuilder ("" count (*) aus T_student "); StringBuilder whersql = new StringBuilder ("wobei 1 = 1"); List <Object> params = new ArrayList <Object> (); if (S.GetsName ()! = null &&! params.Add ("%" + s.getsname () + "%"); } if (s.getGender ()! = null &&! Params.Add (S.GGENTER ()); } if (s.gettellphone ()! = null &&! params.Add ("%" + S.GettElphone () + "%"); } if (S.Getemail ()! = null &&! params.Add ("%" + S.Getemail () + "%"); } Number number = (number) qr.Query (numsql.append (woersql) .toString (), new scalarHandler (), params.toarray ()); int TotalRecord = number.IntValue (); pb.settotalrecord (Totalrecord); / * * Die Bean -List -Ergebnis -Set */ StringBuilder sql = new StringBuilder ("Select * von t_student"); StringBuilder limitsql = new StringBuilder ("Limit?,?"); params.add ((PC-1)*ps); params.add (ps); LIST <Student> students = qr.Query (SQL.Append (woersql) .Append (limitsql) .toString (), New Beanlisthandler <Student> (student.class), params.toarray ()); PB.SetBeanList (Studenten); PB zurückgeben; } catch (Ausnahme e) {neue runTimeException (e) werfen; }}Weitere Lernmaterialien finden Sie auf das spezielle Thema "Managementsystementwicklung".
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.