ไดอะแกรมโครงสร้าง MVC ที่ใช้งานโดยใช้ Java Web มีดังนี้ซึ่งส่วนของคอนโทรลเลอร์ถูกนำมาใช้โดยใช้ servlet ส่วนของโมเดลจะถูกนำมาใช้โดยใช้ Javabean และมุมมองส่วนใหญ่จะถูกนำไปใช้โดยใช้หน้า JSP
รากฐานอุดมการณ์
หลักการทำงานของโครงสร้างสองชั้นของ JSP+Javabean ควรคุ้นเคยและเข้าใจง่าย
อย่างไรก็ตามสิ่งหนึ่งที่ต้องชัดเจนคือผู้ใช้ส่งคำขอหน้าเว็บผ่านเบราว์เซอร์ หลังจากคำขอนี้มาถึงเซิร์ฟเวอร์หน้าเว็บที่เกี่ยวข้องจะพบได้ทางฝั่งเซิร์ฟเวอร์ หากเป็นคำขอแรก (ครั้งที่สองไม่ได้อธิบายและดำเนินการ) สำหรับ JSP จำเป็นต้องสร้าง servlet จากนั้นเรียกใช้ servlet ผ่านเอ็นจิ้น servlet ฝังผลลัพธ์ของการโทร Javabean ลงในหน้าและส่งกลับไปยังเบราว์เซอร์ของผู้ใช้
สาระสำคัญของโครงสร้างสามชั้นของ JSP+Javabean+Servlet คือมีคอนโทรลเลอร์เพิ่มเติม: Servlet เพื่อแจกจ่ายคำขอเบราว์เซอร์ไคลเอนต์ มันจะช่วยได้อย่างมากในการทำความเข้าใจบทบาทของเซิร์ฟเล็ตที่ทำหน้าที่เป็นผู้ควบคุมในการประมวลผลคำขอของลูกค้าล่วงหน้า ความสัมพันธ์ที่สอดคล้องกันระหว่างคำขอของผู้ใช้และ servlets เฉพาะสามารถพบได้ผ่านไฟล์การกำหนดค่า web.xml แต่ละ servlet มีวัตถุ servlet เฉพาะที่สอดคล้องกับมันดังนั้นวัตถุที่จัดการคำขอของผู้ใช้คือวัตถุ servlet ที่สืบทอดมาจาก httpservlet
!-JSPC Servlet Mappings Start-Servlet Servlet-Namems1/servlet-name servlet-classnews.firstaction/servlet-class/servlet servlet servlet-namems2/servlet-name servlet-classnews.detailating/servlet-class/servlet! URL-pattern/newsmain/url-pattern/servlet-mapping servlet-mapping servlet-namems2/servlet-name url-pattern/newsdetail/url-pattern/servlet-mapping
ดังที่แสดงไว้ด้านบนส่วนของการกำหนดค่า servlet ที่แยกจาก web.xml ส่วนแรกส่วนใหญ่จะใช้เพื่อกำหนดค่า servlet ที่จะเชื่อมโยงกับวัตถุ servlet เฉพาะ ส่วนที่สองส่วนใหญ่จะใช้เพื่อกำหนดค่า servlet ที่ประมวลผลโดยคำขอ ความสัมพันธ์ของชื่อ servlet เกี่ยวข้องกับวัตถุการประมวลผล servlet เฉพาะ ตัวอย่างเช่นคำขอที่ส่งโดยเบราว์เซอร์ไคลเอนต์จาก /Newsmain ดำเนินการโดย MS1 servlet ข่าว Serlet Object ที่สอดคล้องกันครั้งแรกนั่นคือ, /newsmain-ms1-news.firstaction ซึ่งเป็นความหมายของไฟล์การกำหนดค่า ตอนนี้ฉันเข้าใจแล้วว่าคำขอของผู้ใช้/ข่าวจะได้รับการประมวลผลโดยวัตถุของข่าวการเรียนการสอนครั้งที่หนึ่งดังนั้นเพื่อทำความเข้าใจโปรแกรมคุณต้องเข้าใจว่าฟังก์ชั่นของการแสดงครั้งแรกคืออะไร ตัวอย่างเช่นต่อไปนี้คือการใช้งาน FirstAction
FIRSTACTION ระดับสุดท้ายของคลาสสาธารณะขยาย HTTPSERVLET {บริการโมฆะที่ได้รับการป้องกัน (HTTPSERVLETREQUEST REQ, HTTPSERVLETRESSESSENSESS) โยน ServleTexception, iOException {dB dB = dB ใหม่ (); httpsession session = req.getSession (); ลอง {session.setAttribute (ค่าคงที่ NEWS_LIST_KEY, News .SearchNewStitle (dB)); } catch (exception e) {e.printstacktrace (); } db.close (); สตริงเป้าหมาย = "/p43_news/newsmain.jsp"; resp.sendredirect (เป้าหมาย); - ผ่านการใช้งานนี้เราจะเห็นได้ว่าเมื่อเซิร์ฟเวอร์ได้รับคำขอไคลเอนต์เพื่อดำเนินการข่าว SearchNewStitle (DB) จากนั้นนำค่าคืนกลับเข้าสู่เซสชันผ่านเซสชัน SetAttribute จากนั้นโอนไปยัง newsmain.jsp ผ่าน resp.sendretirect (เป้าหมาย) ด้วยวิธีนี้ค่าที่สอดคล้องกันที่เก็บไว้ในเซสชันสามารถรับได้ผ่านฟังก์ชัน session.getAttribute ใน newsmain.jsp
เมื่อมองย้อนกลับไปมันเป็นเรื่องง่ายที่จะเห็นว่าหลักการทำงานของ JSP+Javabean นั้นแตกต่างจากของ JSP+Javabean+Servlet โครงสร้างสองชั้นจะต้องทำการประมวลผลล่วงหน้าใน JSP ตัวอย่างเช่น News.SearchNewStitle (DB) และโครงสร้างสามชั้นแรกทำการประมวลผลล่วงหน้าในเซิร์ฟเล็ตและจากนั้นก็เทียบเท่ากับการส่งคืนผลการประมวลผลนี้ไปยัง JSP ผ่านเซสชัน
ข้อกำหนดของโมดูลการลงทะเบียนเข้าสู่ระบบ
1 ทะเบียน
1.1 แบบฟอร์มการลงทะเบียนผู้ใช้ (ชื่อผู้ใช้, รหัสผ่าน, อีเมล, ชื่อเล่น, รหัสการยืนยัน)
1.2 ส่งการลงทะเบียน: การตรวจสอบไปยัง (ชื่อผู้ใช้รหัสผ่านอีเมลชื่อเล่นรหัสการตรวจสอบ)
1.2.1 ชื่อผู้ใช้รหัสผ่านอีเมลและชื่อเล่นจะเสร็จสมบูรณ์ในเบราว์เซอร์ไคลเอนต์และนำไปใช้ผ่าน JS
1.2.2 รหัสการยืนยันจะต้องเสร็จสิ้นในโปรแกรมฝั่งเซิร์ฟเวอร์
2. หากผ่านการตรวจสอบของแบบฟอร์มลงทะเบียนแล้วตรรกะทางธุรกิจจะถูกตัดสิน
2.1 หากผู้ใช้มีอยู่แล้วให้บอกข้อความแสดงข้อผิดพลาดแก่ผู้ใช้
2.2 หากที่อยู่อีเมลมีอยู่แล้วให้บอกข้อความแสดงข้อผิดพลาดแก่ผู้ใช้
2.3 หากไม่มีอยู่ให้ดำเนินการต่อไปยังขั้นตอนที่ 3
3. บันทึกข้อมูลผู้ใช้ไปยังฐานข้อมูล
4. ลงทะเบียนสำเร็จข้ามไปที่หน้าเข้าสู่ระบบ
5. เข้าสู่ระบบ
5.1 ส่งข้อมูลการเข้าสู่ระบบของผู้ใช้ไปยังพื้นหลังเพื่อตรวจสอบ
5.2 หากการตรวจสอบสำเร็จให้ข้ามไปที่หน้าแรก
5.3 หากการกระโดดล้มเหลวให้ข้ามไปที่หน้าเข้าสู่ระบบและแจ้งเตือนสำหรับข้อความแสดงข้อผิดพลาด
โครงสร้างไดเรกทอรีโครงการ
ซอร์สโค้ดของโครงการแบ่งออกเป็นสี่ไฟล์แพ็คเกจซึ่งใช้ในการเข้าถึงโมเดลมุมมองคอนโทรลเลอร์และคลาสเครื่องมือ ไฟล์เฉพาะมีดังนี้:
สำหรับมุมมองเรากำหนดหน้า JSP สามหน้าดังนี้:
กำหนดมุมมอง
login.jsp หน้า
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> แบบฟอร์มการเข้าสู่ระบบ </title> </head> <body> <font color = "red"> $ {ข้อความ} </font> action = "$ {pageContext.Request.ContextPath}/เข้าสู่ระบบ" เมธอด = "โพสต์"> ชื่อผู้ใช้: <อินพุตประเภท = "ข้อความ" ชื่อ = "ชื่อผู้ใช้"> <br/> รหัสผ่าน: <อินพุตประเภท = "รหัสผ่าน" ชื่อ "รหัสผ่าน"> <br/>หน้า index.jsp
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> <! 4.01 Transitional // en "" http://www.w3.org/tr/html4/loose.dtd "> <html> <head> <meta http-equiv =" title-type "titlet>" heads> "utf-8" color = "red"> $ {message} </font> <% ถ้า (request.getSession (). getAttribute ("ชื่อผู้ใช้") == null) {response.sendrectirect ("login.jsp"); } else { %> <font color = "red"> "ยินดีต้อนรับ:" < %= request.getSession (). getAttribute ("ชื่อผู้ใช้"). toString () %> </font> < %} %> </body> </html>หน้า regist.jsp
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> แบบฟอร์มที่ลงทะเบียนของผู้ใช้ </title> <script type = "text/javascript"> ฟังก์ชั่นการเปลี่ยนแปลง () }/checkImage? " + วันที่ใหม่ (). getTime ()} function validateForm () {// ยืนยันชื่อผู้ใช้, รหัสผ่าน, อีเมล, ชื่อเล่น var username = document.getElementById ("ชื่อผู้ใช้") ค่า; ถ้า (ชื่อผู้ใช้ == "") {แจ้งเตือน ("ชื่อผู้ใช้ไม่สามารถว่างเปล่า"); กลับเท็จ; } var password = document.getElementById ("รหัสผ่าน") ค่า; ถ้า (รหัสผ่าน == "") {แจ้งเตือน ("รหัสผ่านไม่สามารถว่างเปล่า"); กลับเท็จ; } var repassword = document.getElementById ("repassword") ค่า; ถ้า (รหัสผ่าน! = repassword) {แจ้งเตือน ("รหัสผ่านต้องสอดคล้องกัน"); กลับเท็จ; } var nickname = document.getElementById ("ชื่อเล่น"). ค่า; ถ้า (ชื่อเล่น == "") {แจ้งเตือน ("ชื่อเล่นไม่ว่าง"); กลับเท็จ; } // ^// s*// w+(?: //. {0,1} [// w-]+)*@[a-za-z0-9]+(?: [-.] [a-za-z0-9]+)*//. if (email.match ("^// s*// w+(?: //. {0,1} [// w-]+)*@[a-za-z0-9]+(?: [-.] [a-za-z0-9]+)*//. [a-za-z]+// s*$") กลับเท็จ; }} </script> </head> <body> <h3> ตารางการลงทะเบียนผู้ใช้ </h3> <font color = "red"> $ {message} </font> <form action = "$ {pageContext.request.context.context} method = "post"> <table> <tr> <td> ชื่อผู้ใช้ </td> <td> <อินพุต type = "text" name = "ชื่อผู้ใช้" id = "username1" v> </td> </tr> <tr> <td> รหัสผ่าน </td> <td> รหัสผ่าน </td> <td> <อินพุต type = "รหัสผ่าน" name = "repassword" id = "repassword"> </td> </tr> <tr> <td> ชื่อเล่น </td> <td> <อินพุต type = "text" name = "nickname name = "email" id = "อีเมล"> </td> </tr> <tr> <td> รหัสการตรวจสอบ </td> <td> <อินพุตประเภท = "text" name = "checkCode"> <img src = "$ {pageContext.Request.ContextPath id = "image" onclick = "conjectImage ();"> </td> </tr> <tr> <td> </td> <td> <อินพุต type = "ส่ง" value = "การลงทะเบียน"> </td> </tr> กำหนดโมเดล
รุ่นผู้ใช้:
แพ็คเกจ com.vs2022.model; ผู้ใช้ระดับสาธารณะ {ชื่อผู้ใช้สตริงส่วนตัว; รหัสผ่านสตริงส่วนตัว ชื่อเล่นสตริงส่วนตัว; อีเมลสตริงส่วนตัว // alt+ shft+ s // กล่องโต้ตอบสำหรับวิธีการเขียนทับปรากฏขึ้น สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; } สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; } สตริงสาธารณะ getNickName () {return ชื่อเล่น; } โมฆะสาธารณะ setNickName (ชื่อเล่นสตริง) {this.nickName = ชื่อเล่น; } สตริงสาธารณะ getEmail () {ส่งคืนอีเมล; } โมฆะสาธารณะ setEmail (อีเมลสตริง) {this.email = อีเมล; -รุ่น UserOperation
แพ็คเกจ com.vs2022.model; นำเข้า com.vs2022.utils.dbutil; ผู้ใช้ระดับสาธารณะ {สาธารณะสุดท้ายคงที่ int usernameExist = 1; สาธารณะสุดท้ายคงที่ eMailExist = 2; ความสำเร็จ int คงสุดท้ายของสาธารณะ = 3; สาธารณะสุดท้ายคงที่ int fail = 4; การลงทะเบียน int สาธารณะ (ผู้ใช้ผู้ใช้) {dbutil db = new dbutil (); if (db.serchusername (user.getUserName ())) {// ระบุว่าชื่อผู้ใช้มีอยู่แล้วส่งคืน USERNAMEEXIST; } if (db.serchemail (user.getEmail ())) {// หมายความว่าที่อยู่อีเมลมีอยู่แล้ว ส่งคืน EmailExist; } // ถ้าคุณเดินที่นี่หมายความว่าชื่อผู้ใช้ที่อยู่อีเมลไม่ได้ถูกจัดเก็บดังนั้นให้ลงทะเบียน เพิ่มไปยังฐานข้อมูล db.updateUser (ผู้ใช้); กลับมาประสบความสำเร็จ } การเข้าสู่ระบบ INT สาธารณะ (ผู้ใช้ผู้ใช้) {dButil db = new dButil (); if (db.loginsuccess (user.getUserName (), user.getPassword ())) {// หมายความว่าพบชื่อผู้ใช้และรหัสผ่าน ความสำเร็จในการกลับมาถูกต้อง } return fail; - CheckCode Model
แพ็คเกจ com.vs2022.model; นำเข้า java.awt.color; นำเข้า Java.awt.Font; นำเข้า java.awt.graphics; นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.ioException; นำเข้า Java.io.OutputStream; นำเข้า java.util.hashtable; นำเข้า Javax.imageio.imageio; นำเข้า javax.servlet.servletexception; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า javax.servlet.http.httpsession; การตรวจสอบคลาสสาธารณะ {สตริงส่วนตัว getRandomString () {int rannum = (int) (math.random () * 9000) + 1000; ส่งคืน rannum + "";} โมฆะสาธารณะ getCode (ความกว้าง int, ความสูง int, httpservletrequest คำขอ, httpservletResponse การตอบสนอง) พ่น servletexception, ioexception {// สร้างภาพในหน่วยความจำ bufferedimage = bufferedimage ใหม่ กราฟิก g = image.getGraphics (); // สร้างวัตถุกราฟิกฟังก์ชั่นของมันเทียบเท่ากับแปรง g.setColor (color.getColor ("F8F8F8")); G.FillRect (0, 0, ความกว้าง, ความสูง); // วาดตัวอักษรพื้นหลัง mfont = ตัวอักษรใหม่ ("kaiti", font.bold, 16); // กำหนดรูปแบบตัวอักษร g.setfont (mfont); // ตั้งค่าตัวอักษร g.setColor (color.red); // สร้างสตริงหมายเลขสุ่ม rans = getRandomString (); // เขียนหมายเลขสุ่มไปยังเซสชัน httpsession เซสชัน = request.getSession (); session.setAttribute ("ตรวจสอบ", rans); // เขียนหมายเลขสุ่มไปยังรูปภาพ G.DrawString (rans, 5, 20); // ภาพที่มีประสิทธิภาพ g.dispose (); // เอาต์พุต Imageio.write (รูปภาพ, "jpeg", response.getOutputStream ());}} กำหนดคอนโทรลเลอร์
คลาส LoginServlet
แพ็คเกจ com.vs2022.controller; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า Javax.servlet.servletexception; นำเข้า javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.https com.vs2022.model.useroperation; LoginServlet ระดับสาธารณะขยาย httpservlet {โมฆะสาธารณะ doGet (httpservletrequest คำขอ, httpservletResponse การตอบสนอง) โยน servletexception, ioexception {// สตริงรหัสผ่าน = request.getParameter ("รหัสผ่าน"); ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setUserName (ชื่อผู้ใช้); user.setPassword (รหัสผ่าน); // เรียกฟังก์ชั่นธุรกิจ Javabean คลาสเพื่อใช้ตรรกะทางธุรกิจที่เฉพาะเจาะจงของการเข้าสู่ระบบ useroperation us = new UserOperation (); // ค่าส่งคืน? int i = us.login (ผู้ใช้); ถ้า (i == 4) {// มันระบุว่าการเข้าสู่ระบบล้มเหลวชื่อผู้ใช้หรือรหัสผ่านนั้นไม่ถูกต้องคำขอ SetAttribute ("ข้อความ", "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"); request.getRequestDispatcher ("login.jsp") ส่งต่อ (คำขอ, การตอบกลับ); } else {// เข้าสู่ระบบได้สำเร็จข้ามไปที่หน้าแรกของเว็บไซต์ใช้การเปลี่ยนเส้นทาง // บันทึกชื่อผู้ใช้ลงในคำขอโดเมนเซสชัน GetSession () SetAttribute ("ชื่อผู้ใช้" ชื่อผู้ใช้); Response.sendredirect ("index.jsp"); //request.getRequestDispatcher("Index.jsp"—).Forward(Request, Response); }} โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {doget (คำขอ, การตอบกลับ); -คลาส Registservlet
แพ็คเกจ com.vs2022.controller; นำเข้า java.io.ioexception; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า javax.servlet.http.htttservletResponse; นำเข้า com.sun.org.apache.commons.beanutils.beanutils; นำเข้า com.vs2022.model.user; นำเข้า com.vs2022.model.useroperation; httpservletResponse response) พ่น servletexception, ioexception {// แก้ไขคำขอรหัสที่อ่านไม่ออก Setcharacterencoding ("UTF-8"); // การตรวจสอบเสร็จสมบูรณ์ของรหัสการตรวจสอบสตริง checkCode = request.getParameter ("CheckCode"); String check_code_session = (string) request.getSession (). getAttribute ("ตรวจสอบ"); if (checkCode == null ||! checkCode.equals (check_code_session)) {// ระบุว่ารหัสการตรวจสอบเป็นอินพุตไม่ถูกต้อง request.setAttribute ("ข้อความ", "รหัสการตรวจสอบที่ไม่ถูกต้องเป็นอินพุตไม่ถูกต้อง"); request.getRequestDispatcher ("regist.jsp") ส่งต่อ (คำขอ, การตอบกลับ); กลับ; } // ถ้าคุณมาถึงที่นี่หมายความว่าการตรวจสอบทั้งหมดผ่านไปแล้วและการโทรเกี่ยวข้องกับการประมวลผลตรรกะทางธุรกิจ ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); // beanutils เสร็จสิ้นการห่อหุ้มข้อมูลลงในวัตถุ Java Bean, Apache การใช้งาน Jar โอเพนซอร์สของมูลนิธิ ลอง {// วิชาบังคับก่อน: ชื่อฟิลด์ของ Javabean จะต้องสอดคล้องกับคีย์ของค่าที่ส่งในแบบฟอร์มมิฉะนั้นการห่อหุ้มจะไม่เสร็จสิ้น beanutils.populate (ผู้ใช้, request.getParameterMap ()); } catch (exception e) {e.printstacktrace (); โยน runtimeException ใหม่ ("ขออภัยข้อมูลการห่อหุ้มล้มเหลว"); } // ดังนั้นคลาส Java Bean ใหม่จะได้รับการออกแบบมาเพื่อใช้งานตรรกะทางธุรกิจ USEROPERATION US = New UserOperation (); ลอง {int feedback = us.regist (ผู้ใช้); if (feedback == useroperation.emaixist) {// ระบุว่าที่อยู่อีเมลมีอยู่แล้ว request.setAttribute ("ข้อความ", "ที่อยู่อีเมลมีอยู่แล้ว"); request.getRequestDispatcher ("regist.jsp") ส่งต่อ (คำขอ, การตอบกลับ); } อื่นถ้า (feedback == useroperation.userNameExist) {// ระบุว่าชื่อผู้ใช้มีอยู่แล้ว request.setAttribute ("ข้อความ", "ชื่อผู้ใช้มีอยู่แล้ว"); request.getRequestDispatcher ("regist.jsp") ส่งต่อ (คำขอ, การตอบกลับ); } else {// ระบุว่าการลงทะเบียนสำเร็จและข้ามไปยังหน้าเข้าสู่ระบบ หากต้องการใช้การตอบสนองแบบเปลี่ยนเส้นทาง Sendredirect ("login.jsp"); }} catch (exception e) {e.printstacktrace (); โยน runtimeException ใหม่ ("เพิ่มล้มเหลว"); }} โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {doget (คำขอ, การตอบกลับ); -คลาส ChectImageservlet
แพ็คเกจ com.vs2022.controller; นำเข้า java.io.ioexception; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า javax.servlet.http.httpservletResponse; นำเข้า com.vs2022.model.checkcode; การตรวจสอบระดับสาธารณะในระดับสาธารณะ Response.Setheader ("Pragma", "No-cache"); Response.Setheader ("แคชควบคุม", "ไม่มีแคช"); Response.setDateHeader ("หมดอายุ", 0); Response.SetContentType ("Image/JPEG"); ความกว้าง int = 40; ความสูง int = 30; // สร้างวัตถุที่ไม่ระบุชื่อของรหัสการตรวจสอบและสร้างรหัสการตรวจสอบใหม่ CheckCode (). getCode (ความกว้าง, ความสูง, คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, httpservletResponse การตอบสนอง) พ่น servletexception, ioexception {doget (คำขอ, การตอบสนอง); - กำหนดคลาสเครื่องมือ
คลาส Dbutil
แพ็คเกจ com.vs2022.utils; นำเข้า java.sql.*; นำเข้า com.vs2022.model.user; คลาสสาธารณะ dbutil {boolean binited = false; // โหลดไดรเวอร์โมฆะสาธารณะ initjdbc () พ่น classnotfoundexception {// โหลด mysql jdbc driver class.forname ("com.mysql.jdbc.driver"); binited = true; System.out.println ("ประสบความสำเร็จในการโหลดไดรเวอร์ MySQL!"); } การเชื่อมต่อสาธารณะ getConnection () พ่น classnotFoundException, sqlexception {if (! binited) {initjdbc (); } // URL การเชื่อมต่อคือ jdbc: mysql // ที่อยู่เซิร์ฟเวอร์/ชื่อฐานข้อมูล // พารามิเตอร์สองตัวต่อไปนี้คือชื่อผู้ใช้และการเชื่อมต่อรหัสผ่านการเชื่อมต่อ conn = drivermanager.getConnection ("JDBC: mysql: // localhost: 3306/database", "username" กลับ Conn; } บูลีนสาธารณะ loginSuccess (ชื่อผู้ใช้สตริง, รหัสผ่านสตริง) {บูลีน returnValue = false; String sql = "เลือก * จากผู้ใช้ที่ชื่อผู้ใช้ =? และรหัสผ่าน =?"; การเชื่อมต่อ conn = null; PreparedStatement PS = NULL; int i = 0; ลอง {conn = getConnection (); ps = conn.prepareStatement (SQL); ps.setstring (1, ชื่อผู้ใช้); ps.setstring (2, รหัสผ่าน); resultset rs = ps.executeQuery (); if (rs.next ()) {returnValue = true; }} catch (classnotFoundException e) {e.printStackTrace (); } catch (sqlexception e) {e.printstacktrace (); } return returnValue; } Public Boolean UpdateUser (ผู้ใช้ผู้ใช้) {Boolean Flag = FALSE; int i = 0; การเชื่อมต่อ conn = null; PreparedStatement PS = NULL; string sql = "แทรกลงในผู้ใช้ (ชื่อผู้ใช้รหัสผ่านชื่อเล่น, อีเมล) ค่า (?,?,?,?)"; ลอง {conn = getConnection (); ps = conn.prepareStatement (SQL); ps.setstring (1, user.getUserName ()); // กำหนดค่าสำหรับตัวยึดตำแหน่ง คำสั่งซื้อของตัวยึดเริ่มต้นจาก 1 พารามิเตอร์แรกคือตำแหน่งของตัวยึดตำแหน่งและพารามิเตอร์ที่สองคือค่าของตัวยึดตำแหน่ง ps.setstring (2, user.getPassword ()); ps.setstring (3, user.getNickName ()); ps.setstring (4, user.getEmail ()); i = ps.executeUpdate (); if (i> 0) {flag = true; }} catch (classnotFoundException e) {e.printStackTrace (); } catch (sqlexception e) {e.printstacktrace (); } return flag; } บูลีนสาธารณะ serchusername (ชื่อผู้ใช้สตริง) {boolean returnValue = false; String sql = "เลือก * จากผู้ใช้ที่ชื่อผู้ใช้ =?"; การเชื่อมต่อ conn = null; PreparedStatement PS = NULL; ลอง {conn = getConnection (); ps = conn.prepareStatement (SQL); ps.setstring (1, ชื่อผู้ใช้); resultset rs = ps.executeQuery (); if (rs.next ()) {returnValue = true; }} catch (classnotFoundException e) {e.printStackTrace (); } catch (sqlexception e) {e.printstacktrace (); } return returnValue; } Serchemail บูลีนสาธารณะ (อีเมลสตริง) {บูลีน returnValue = false; String sql = "เลือก * จากผู้ใช้ที่ email =?"; การเชื่อมต่อ conn = null; PreparedStatement PS = NULL; int i = 0; ลอง {conn = getConnection (); ps = conn.prepareStatement (SQL); ps.setstring (1, อีเมล); resultset rs = ps.executeQuery (); if (rs.next ()) {returnValue = true; }} catch (classnotFoundException e) {e.printStackTrace (); } catch (sqlexception e) {e.printstacktrace (); } return returnValue; -