Artikel ini berbagi dengan Anda implementasi Javaweb dari sistem manajemen informasi siswa untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Edisi Awal
Tidak ada halaman tambahan untuk versi awal. Karena saya belum belajar banyak tentang front-end, antarmuka jelek. Teknologi Utama: JSP, Javabean, Servlet, JDBC Halaman Utama adalah sebagai berikut:
Halaman login
Halaman Beranda
Tambahkan siswa
Lihat semua siswa
Penyelidikan siswa
Direktori Proyek
database
Dua tabel, tabel pengguna dan tabel siswa. Untuk menggunakan alat dbutils, pastikan untuk memperhatikan pencocokan penamaan atribut tabel database dan metode get () dan set () dari JavaBean. Misalnya, uname dalam tabel T_USER adalah: string pribadi uname, getUname (), setuname () di Javabean.
Buat tabel t_user (UID char (32) kunci utama, uname varchar (40) not null, Uppassword varchar (40) not null);
Buat tabel t_student (SID char (32) kunci utama, sname varchar (40) bukan null, gender varchar (6) bukan nol, arang ulang tahun (10), Tellphone varchar (15) bukan nol, email varchar (40), deskripsi varchar (500));
Sedikit Titik Pengetahuan
Masuk
Saat masuk, apakah kotak input nama pengguna atau kata sandi kosong dinilai oleh kode JS dari halaman login. Ketika tidak ada yang kosong, query database melalui informasi nama pengguna. Jika pengguna ditemukan, login akan berhasil masuk, jika tidak perlu untuk menentukan apakah itu nama pengguna atau kesalahan kata sandi. Transaksi ini diproses di lapisan layanan, dan lapisan DAO hanya bertanggung jawab untuk menemukan pengguna melalui nama pengguna.
Kode Layanan Pengguna:
Public Class UserService {private userdao userdao = new userdao (); kueri pengguna publik (formulir pengguna) melempar Exception {user user = userdao.query (form); // pengguna tidak ditemukan jika (user == null) {lempar pengecualian baru ("Nama pengguna tidak ada"); } // Pengguna ditemukan, tetapi kata sandi tidak cocok dengan (! Form.getupassword (). Equals (user.getupassword ()))) {lempar pengecualian baru ("kesalahan kata sandi"); } mengembalikan pengguna; }}Filter filter
Untuk mencegah pengguna yang tidak masuk dari dapat secara langsung mengakses halaman lain, diperlukan filter. Tempatkan semua halaman di luar halaman login secara terpisah di folder pengguna. Ketika pengguna masuk dengan sukses, simpan informasi pengguna di properti "SesionUser" sesi. Filter menentukan apakah properti ini kosong. Jika kosong, itu berarti login pengguna tidak berhasil dan tidak akan melepaskannya. Langsung ke halaman login. Jika tidak kosong, lepaskan. Kode utama filter:
public void dofilter (permintaan servletRequest, respons servletResponse, rantai filterchain) melempar ioException, servletException {// 1. Dapatkan sesi // 2. Tentukan apakah ada pengguna di sesi. Jika demikian, rilis // 3. Jika tidak, buka permintaan halaman login httpservletRequest req = (httpservletRequest); Pengguna pengguna = (pengguna) req.getSession (). GetAttribute ("sessionUser"); if (user! = null) {chain.dofilter (permintaan, respons); } else {httpservletResponse resp = (httpservletResponse) respons; resp.sendredirect (req.getContextPath () + "/index.jsp"); }}Kueri Kombinasi Multi-Kondisi
Di halaman pencarian lanjutan, ada empat opsi untuk dipilih: Nama siswa, jenis kelamin, nomor ponsel, dan alamat email. Keempat kondisi dapat diatur dan digabungkan secara sewenang -wenang. Saya mengalami masalah ini sebelumnya ketika menulis proyek QT. Saya menggunakan pernyataan SQL splicing pada waktu itu, tetapi saya tidak berharap bahwa menggunakan "di mana 1 = 1" akan sangat merepotkan. Kode berikut klasik dan menggunakan permintaan fuzzy untuk membuat pencarian lebih manusiawi.
Daftar Publik <Sahasiswa> query (Student S) {coba {StringBuilder sql = new StringBuilder ("Select * From T_student di mana 1 = 1"); Daftar <Papen> Params = ArrayList baru <PAPIT> (); if (s.getSname ()! = null &&! s.getSname (). trim (). isEmpty ()) {sql.append ("dan sname like?"); params.add ("%" + s.getSname () + "%"); } if (s.getgender ()! = null &&! s.getgender (). trim (). isEmpty ()) {sql.append ("dan gender =?"); params.add (s.getgender ()); } if (s.gettellphone ()! = null &&! s.gettellphone (). trim (). isEmpty ()) {sql.append ("dan Tellphone like?"); params.add ("%" + s.gettellphone () + "%"); } if (s.geteMail ()! = null &&! s.geteMail (). trim (). isEmpty ()) {sql.append ("dan email seperti?"); params.add ("%" + s.geteMail () + "%"); } return qr.query (sql.toString (), new beanlisthandler <schuid> (student.class), params.toArray ()); } catch (Exception e) {lempar runtimeException baru (e); }}Edisi Evolusi: Pagination
Tampilkan halaman kueri untuk membuatnya lebih indah. Halamannya seperti: halaman n/total m halaman beranda sebelumnya halaman 1 2 3 4 5 6 7 8 9 10 halaman terakhir halaman terakhir.
Efek pagination adalah sebagai berikut:
Data yang diperlukan untuk pagination:
Halaman saat ini: PageCode
Total halaman: Totalpage
Total Rekor Hitungan: Total Record
Jumlah catatan per halaman: Halaman
Data Halaman Saat Ini: Beanlist
PageBean
Karena data paged ini harus selalu diteruskan antara lapisan! Kami merangkum data paged ini ke dalam Javabean, yang disebut kacang paged, seperti pagebean. Saat menggunakan kueri multi-kondisi dan mengklik pada halaman 2, hyperlink pada halaman 2 tidak memiliki kondisi kueri, dan kondisi kueri akan hilang, jadi kita perlu menjaga kondisi kueri pada semua tautan pada halaman! Kami ingin menyimpan kondisi sebagai string ke URL PageBean!
Kodenya adalah sebagai berikut:
Public Class PageBean <T> {Private Integer Pagecode; // Nomor Halaman Saat Ini Private Integer PageSize; // Ukuran Data per halaman Private Integer TotalRecord; // Total Records Private List <T> Beanlist; // Catatan halaman saat ini didefinisikan sebagai generik. Untuk menggunakan URL string pribadi secara langsung di masa mendatang; // kondisi setelah URL digabungkan dalam beberapa kondisi // mengembalikan jumlah total halaman integer publik getTotalPage () {int tp = TotalRecord/halaman; pengembalian TotalRecord%halaman == 0? TP: TP+1; } ... // metode get, atur atribut ...}Pemrosesan paging di setiap lapisan
JSP Halaman: Tampilkan Data Data dan "Halaman N/Total M Halaman Sebelumnya Halaman 1 2 3 4 5 6 7 8 9 10 Halaman Berikutnya Halaman Terakhir"; Lewati Kode Page ke Servlet
Servlet: Buat objek PageBean, tetapkan nilai ke semua atribut PageBean, dan kemudian lulus pagecode dan halaman ke lapisan DAO; Terima objek PageBean yang dikembalikan oleh DAO, simpan ke bidang permintaan, dan kembali ke halaman
Layanan: Bertindak sebagai perantara, tidak ada transaksi yang perlu diproses
DAO: Dapatkan pagecode dan halaman, buat objek PageBean, query database untuk mendapatkan TotalRecord dan Beanlist, dan Return PageBean.
Kode untuk nomor halaman pemrosesan halaman JSP:
<tenter> Halaman $ {pb.pagecode} halaman/total $ {pb.totalpage} halaman <a href = "$ {pb.url} & pc = 1" rel = "nofollow eksternal"> Halaman beranda </a> <c: test = "$ {pb.pageCode> 1} </a> <c:" $ {pb.pagecode> 1} "> </a> <c:" $ {pb.pagecode> 1} "> </a> <c:" $ {pb.pagecode> 1} "> </a> <c:" $ "$ {pb.pagecode> 1}"> </a> <c: "$" $ {pb.pagecode> 1} "> </a> <c:" $ " } & pc = $ {pb.pagecode-1} "rel =" eksternal nofollow "> halaman sebelumnya </a> </c: if> <!-Halaman Nomor Tabel Perhitungan Mulai-> <c: pilih> <c: when test =" $ {pb.totalpage <= 10} "> <c: set var =" $ "vari =" 1 "var: 1" var: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c: c. value = "$ {pb.totalpage}"> </c: set> </c: when> <c: akit Header overflow-%> <c: if test = "$ {begin <1}"> <c: atur var = "begin" value = "1"> </c: set> <c: atur var = "end" value = "10"> </c: set: end = {if> <%-tail overflow-%> <c: if test = "$ {end" {ever {pangkal "<%> <%-tail overflow-%> <c: if test =" $ end: end "end" end "end" end "end" end "end" end "end" end "end" end " value = "$ {pb.totalpage-9}"> </c: set> <c: set var = "end" value = "$ {pb.totalpage}"> </c: set> </c: if> </c: oafer = "saya {" {"{" end: "{" {"oVEOL" end: "IF:" CETOUR "AKHIRE =" }"> <c:choose> <c:when test="${i eq pb.pageCode }"> [${i }] </c:when> <c:otherwise> <a href="${pb.url }&pc=${i }">[${i }]</a> </c:otherwise> </c:choose> </c:forEach><c:if test = "$ {pb.pagecode <pb.totalpage}"> <a href = "$ {pb.url} & pc = $ {pb.pagecode+1}"> Halaman berikutnya </a> </c: if> <a href = "$ {pb.url} & pc = $ = $ {a href =" $ {pb.url} & pc = $ {a href = "$ {pb.url} & $ {a href =" $ {pb.url} & $ {a href = "$ {pb.url {PB.URL {PB.URL {Pb. Halaman </a> </denter>Kode kueri kombinasi multi-kondisi setelah menambahkan pagination
Public PageBean <Sidu- Student> query (Student S, int pc, int ps) {coba {PageBean <Sahasiswa> pb = PageBean baru <Sidu- student> (); pb.setPageCode (PC); pb.setPagesize (PS); /** Query Total Record*/ StringBuilder numsql = New StringBuilder ("Pilih Count (*) dari t_student"); StringBuilder wheresql = stringBuilder baru ("di mana 1 = 1"); Daftar <Papen> Params = ArrayList baru <PAPIT> (); if (s.getSname ()! = null &&! s.getSname (). trim (). isEmpty ()) {wheresql.append ("dan sname like?"); params.add ("%" + s.getSname () + "%"); } if (s.getgender ()! = null &&! s.getgender (). trim (). isEmpty ()) {wheresql.append ("dan gender =?"); params.add (s.getgender ()); } if (s.gettellphone ()! = null &&! s.gettellphone (). trim (). isEmpty ()) {wheresql.append ("dan Tellphone like?"); params.add ("%" + s.gettellphone () + "%"); } if (s.geteMail ()! = null &&! s.geteMail (). trim (). isEmpty ()) {wheresql.append ("dan email seperti?"); params.add ("%" + s.geteMail () + "%"); } Angka nomor = (angka) qr.query (numsql.append (whereSQL) .toString (), skalarhandler baru (), params.toArray ()); int totalRecord = number.intValue (); PB.SetTotalRecord (TotalRecord); / * * Dapatkan set hasil beanlist */ stringBuilder sql = stringBuilder baru ("Pilih * dari t_student"); StringBuilder limitsql = new StringBuilder ("Limit?,?"); params.add ((pc-1)*ps); params.add (ps); Daftar <spinition> Siswa = QR.Query (SQL.Append (WhereSQL). Lappend (LimitSQL) .ToString (), New Beanlisthandler <Saheni> (student.class), params.toArray ()); PB.SetBeanList (Siswa); mengembalikan PB; } catch (Exception e) {lempar runtimeException baru (e); }}Untuk materi pembelajaran lebih lanjut, harap perhatikan topik khusus "pengembangan sistem manajemen".
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.