คุกกี้เซสชันและตัวกรองมักจะใช้ในเว็บแอปพลิเคชัน คุกกี้และเซสชันใช้เพื่อบันทึกข้อมูลบางอย่าง ตัวกรองตัวกรองมีผลหลังจากเบราว์เซอร์ทำการร้องขอและก่อนที่พื้นหลังจะดำเนินการตามคำขอเฉพาะ เหตุผลที่ทั้งสามนี้รวมกันเป็นเพราะพวกเขามักจะรวมกันเช่น โปรแกรมเข้าสู่ระบบ
คุกกี้เป็นกลไกเบราว์เซอร์และเซสชันเป็นกลไกเซิร์ฟเวอร์ แต่ในความเป็นจริงแล้วคุกกี้ก็ถูกสร้างขึ้นโดยเซิร์ฟเวอร์และจะถูกส่งกลับไปยังเบราว์เซอร์ซึ่งไม่ได้สร้างโดยเบราว์เซอร์เอง เมื่อเบราว์เซอร์ส่งคำขอมันจะนำคุกกี้มารวมกันหากมีคุกกี้ที่ถูกต้อง
คุกกี้ทั้งหมดใช้เนื่องจากโปรโตคอล HTTP นั้นเป็นโปรโตคอลไร้สัญชาติซึ่งหมายความว่าผ่านโปรโตคอล HTTP เองเซิร์ฟเวอร์ไม่สามารถระบุได้ว่าเบราว์เซอร์เข้าถึงได้ก่อนหน้านี้หรือไม่
วิธีการเขียนของตัวกรองและ servlet คล้ายกัน เมื่อเขียนรหัสที่เกี่ยวข้องคุณจะต้องใช้อินเตอร์เฟสตัวกรองและเขียนวิธีที่เกี่ยวข้องใหม่ โดยปกติแล้ววิธี Dofilter จะเปลี่ยนบ่อยขึ้น หากรหัสตัวกรองจำเป็นต้องมีประสิทธิภาพหลังจากเขียนจำเป็นต้องกำหนดค่าการกำหนดค่าบางอย่างใน web.xml เช่นการกำหนดค่า Servlets
นี่คือรหัสตัวอย่างเข้าสู่ระบบอย่างง่ายรวมคุกกี้เซสชันเซสชันและตัวกรอง:
กำหนดคลาสเอนทิตีของผู้ใช้เพื่อทำหน้าที่เป็นข้อมูลฐานข้อมูล รูปแบบซิงเกิลถูกใช้ที่นี่เพื่อให้แน่ใจว่ามีเพียงวัตถุอินสแตนซ์เดียวเท่านั้นที่มีอยู่:
โมเดลแพ็คเกจ; / ** * คลาสเอนทิตีข้อมูลผู้ใช้ * * @author tuzongxun123 * */ คลาสสาธารณะ USERMODEL {ชื่อผู้ใช้สตริงส่วนตัว; รหัสผ่านสตริงส่วนตัว // โหมดซิงเกิลตันตรวจสอบให้แน่ใจว่ามีอินสแตนซ์วัตถุผู้ใช้เพียงรายเดียว USERMODEL GETINSTANCE () {USERMODEL USER = ใหม่ USERMODEL ("Zhangsan", "123456"); ผู้ใช้ส่งคืน; } ส่วนตัว USERMODEL (ชื่อผู้ใช้สตริง, รหัสผ่านสตริง) {this.userName = ชื่อผู้ใช้; this.password = รหัสผ่าน; } สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน; - เข้าสู่ระบบของผู้ใช้ไปยังอินเตอร์เฟส index.jsp และใช้คุณสมบัติ JSP ในการดำเนินการฟอร์มเพื่อรับพา ธ โครงการ:
<%@ page language = "java" import = "java.util.*" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8" action = "< %= request.getContextPath () %>/loginServlet" method = "post"> ชื่อผู้ใช้: <อินพุต type = "text" name = "username"/> </br> รหัสผ่าน: <อินพุตประเภท = "รหัสผ่าน" ชื่อ "รหัสผ่าน"/> </br>
Servlet พื้นหลังที่สอดคล้องกัน:
แพ็คเกจ Servlettest; นำเข้า java.io.ioException; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.cookie; นำเข้า Javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletRequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า Javax.servlet.http.httpsession; โมเดลนำเข้า USERMODEL; LoginServlet ระดับสาธารณะขยาย HTTPSERVLET {@Override Void DoGet (httpservletRequest REQ, httpservletResponse resp) โยน servletexception, ioexception {this.dopost (req, resp); } @Override void dopost (httpservletrequest req, httpservletResponse resp) พ่น ServleTexception, ioexception {string username = req.getParameter ("ชื่อผู้ใช้"); สตริงรหัสผ่าน = req.getParameter ("รหัสผ่าน"); // จำลองข้อมูลฐานข้อมูล USERMODEL ผู้ใช้ = USERMODEL.GETINSTANCE (); สตริง dbusername = user.getUserName (); สตริง dbpassword = user.getPassword (); if (dbusername.equals (ชื่อผู้ใช้) && dbpassword.equals (รหัสผ่าน)) {// ทั้งชื่อผู้ใช้และการจับคู่รหัสผ่านพิสูจน์ว่าการเข้าสู่ระบบสำเร็จตั้งค่าเซสชันและคุกกี้ httpsession เซสชัน = req.getSession () session.setAttribute ("ชื่อผู้ใช้", ชื่อผู้ใช้); session.setAttribute ("รหัสผ่าน", รหัสผ่าน); คุกกี้คุกกี้ = คุกกี้ใหม่ ("ชื่อผู้ใช้" ชื่อผู้ใช้); คุกกี้คุกกี้ 2 = คุกกี้ใหม่ ("รหัสผ่าน", รหัสผ่าน); // ตั้งค่าเวลาจัดเก็บของคุกกี้คุกกี้ SetMaxage (60); COOKIE2.SetMaxage (60); // ส่งคุกกี้ไปที่เบราว์เซอร์ resp.addcookie (คุกกี้); resp.addcookie (Cookie2); // คำขอส่งต่อไปยังรายการผู้ใช้ req.getRequestDispatcher ("/userlist"). forward (req, resp); } else {// คำขอส่งต่อไปยังหน้าเข้าสู่ระบบ req.getRequestDispatcher ("index.jsp"). forward (req, resp); - - ขอกระโดดหลังจากเข้าสู่ระบบ:
แพ็คเกจ Servlettest; นำเข้า java.io.ioException; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; โมเดลนำเข้า USERMODEL; ระดับสาธารณะ UserListServlet ขยาย HTTPSERVLET {@Override Void DoGet (HttpServletRequest REQ, httpservletResponse resp) โยน servletexception, ioexception {this.dopost (req, resp); } @Override void dopost (httpservletrequest req, httpservletResponse resp) พ่น ServleTexception, ioexception {usermodel user = usermodel.getInstance (); // พิมพ์ข้อมูลรายชื่อผู้ใช้ในเบราว์เซอร์ resp.getWriter () เขียน ("ชื่อผู้ใช้:" + user.getUserName () + "," + "รหัสผ่าน:" + user.getPassword ()); - การกำหนดค่า Project Web.xml:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi: schemalocation = "http://java.sun.com/xml/ns/javaeee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "id =" webapp_id "เวอร์ชัน =" 2.5 "> <! <servlet-class> servlettest.loginservlet </servlet-lass> </servlet> <servlet-mapping> <servlet-mapping> <servlet-name> เข้าสู่ระบบ </servlet-name> <url-pattern>/loginservlet </url-pattern> <servlet-class> servlettest.userlistservlet </servlet-lass> </servlet> <servlet-mapping> <servlet-name> userlist </servlet-name> <url-pattern>/userlist </url-pattern> </servlet-mapping> <! <silter-name> loginFilter </filter-name> <silter-class> filtertest.filtertest </filter-class> </ตัวกรอง> <filter-mapping> <filter-name> loginfilter </filter-name> <url-pattern>/*</url-pattern> <welcome-file> index.jsp </welcome-file> </welcome-file-list> </eb-app>
รหัสกรอง Java:
ตัวกรองแพ็คเกจ; นำเข้า java.io.ioException; นำเข้า Javax.servlet.filter; นำเข้า Javax.servlet.filterchain; นำเข้า Javax.servlet.filterConfig; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.ServletRequest; นำเข้า Javax.servlet.ServletResponse; นำเข้า Javax.servlet.http.cookie; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; โมเดลนำเข้า USERMODEL; ตัวกรองตัวกรองคลาสสาธารณะใช้ตัวกรอง {@Override โมฆะสาธารณะทำลาย () {} @Override โมฆะสาธารณะ dofilter (คำขอ servletrequest, การตอบสนอง servletResponse, ห่วงโซ่ตัวกรอง) โยน ioexception, servletexception httpservletResponse resp = (httpservletResponse) การตอบสนอง; String uri = req.getRequesturi (); if ("/CookieAndFilterTest/loginservlet".equals(uri) ||" /CookieAndFilterTest/".equals(uri)) {// release chain.dofilter (คำขอ, การตอบกลับ); กลับ; } // หากไม่ใช่คำขอเข้าสู่ระบบให้พิจารณาว่ามีคุกกี้คุกกี้หรือไม่ [] คุกกี้ = req.getCookies (); if (คุกกี้! = null && cookies.length> 0) {string username = null; สตริงรหัสผ่าน = null; // ตรวจสอบว่าชื่อผู้ใช้และรหัสผ่านในคุกกี้สอดคล้องกับฐานข้อมูลหรือไม่ หากมีความสอดคล้องให้ปล่อยมันมิฉะนั้นส่งต่อคำขอไปยังหน้าเข้าสู่ระบบสำหรับ (คุกกี้คุกกี้: คุกกี้) {ถ้า ("ชื่อผู้ใช้" .Equals (cookie.getName ())) {ชื่อผู้ใช้ = cookie.getValue (); } if ("รหัสผ่าน" .equals (cookie.getName ())) {รหัสผ่าน = cookie.getValue (); }} usermodel user = usermodel.getInstance (); if (user.getUserName (). เท่ากับ (ชื่อผู้ใช้) && user.getPassword (). เท่ากับ (รหัสผ่าน)) {chain.dofilter (คำขอ, การตอบกลับ); กลับ; } else {// เปลี่ยนเส้นทางไปยังอินเตอร์เฟสเข้าสู่ระบบ req.getRequestDispatcher ("/index.jsp"). forward (req, resp); กลับ; }} else {req.getRequestDispatcher ("/index.jsp"). forward (req, resp); กลับ; }} @Override โมฆะสาธารณะ init (FilterConfig arg0) พ่น servletexception {}}ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้การเขียนโปรแกรม Java