1. الحرف الموحدة ترميز على الموقع بأكمله
يشير charset معلمة التكوين إلى تشفير الأحرف المستخدمة للتعامل مع المشكلة الصينية لمعلمات طلب نموذج HTML
package me.gacl.web.filter ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.filter ؛ استيراد javax.servlet.filterchain javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpletrequestwrapper DAREFRINCODINGFILTER تنفذ FILTER {private filterConfig filterConfig = null ؛ // قم بتعيين الحرف الافتراضي الذي يشفر السلسلة الخاصة defaultCharset = "UTF-8" ؛ dofilter public void (servletrequest req ، servletResponse resp ، سلسلة filterchain) يلقي ioexception ، servletexception {httpservletrequest request = (httpservletrequest) req ؛ httpservletresponse استجابة = (httpservletResponse) resp ؛ String charset = filterConfig.getInitParameter ("charset") ؛ if (charset == null) {charset = defaultCharset ؛ } request.setcharacterencoding (charset) ؛ استجابة. setcharacterencoding (charset) ؛ استجابة. myCharacterEncodingRequest requestWrapper = جديد myCharacterEncodingRequest (request) ؛ Chain.dofilter (requestWrapper ، response) ؛ } public void init (filterConfig filterConfig) يلقي servleTexception {// الحصول على معلومات تكوين التهيئة من مرشح this.filterConfig = filterConfig ؛ } تدمير الفراغ العام () {}}/*1. قم بتنفيذ نفس الواجهة مثل الكائن المحسن 2. تحديد متغير تذكر الكائن المحسن 3. حدد مُنشئًا لتلقي الكائن المحسن 4. الكتابة فوق الأساليب التي تحتاج إلى تعزيز 5. للطرق التي لا تريد تعزيزها ، يدعو إلى طريق الكائن المحسّن (الكائن المستهدف) */ class my class my my there studge. Public MyCharacterEncodingRequest (طلب httpservletrequest) {super (request) ؛ this.request = طلب ؛ } /* إعادة كتابة طريقة getParameter* see javax.servlet.servletrequestwrapper#getParameter (java.lang.string)* /Override public string getParameter (اسم السلسلة) if (value == null) {return null ؛ } // إذا لم يتم إرسال البيانات في GET ، فأرجع القيمة التي تم الحصول عليها بشكل مباشر إذا (! this.request.getMethod (). equalsIngInoreCase ("get")) {قيمة الإرجاع ؛ } آخر {// إذا تم إرسال البيانات في GET ، فإن القيمة التي تم الحصول عليها يتم نقلها القيمة = new String (value.getBytes ("ISO8859-1") ، this.request.getCharCterEncoding ()) ؛ قيمة الإرجاع }} catch (استثناء e) {رمي new runTimeException (e) ؛ }}} التكوين في ملف web.xml هو كما يلي:
<Ivilter> <iliter-name> nAffleenCodingFilter </filter-name> <filter-class> me.gacl.web.filter.characterencodingfilter </filter-class> <Ing-param> <barm-name> charset </param-name> <filter-name> nareferencodingfilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2. يحظر المتصفح من جميع الصفحات الديناميكية المخزنة مؤقتًا
هناك 3 حقول لرأس استجابة HTTP يمكن أن تمنع المتصفح من تخصيب الصفحة الحالية. رمز المثال في servlet هو كما يلي:
لا يمكن لجميع المتصفحات دعم رؤوس الاستجابة الثلاثة المذكورة أعلاه ، لذلك من الأفضل استخدام رؤوس الاستجابة الثلاثة أعلاه في نفس الوقت.
package me.gacl.web.filter ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.filter ؛ استيراد javax.servlet.filterchain javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛/*** classname: nocachefilter* @description: المتصفح محظور من جميع الصفحات الديناميكية* @author: وحيدة canglang: PM **/public class nocachefilter تنفس مرشح {public void dofilter (servletrequest req ، servletResponse RESP ، سلسلة filterchain) يلقي ioException ، servletexception {// فرض servletRequest to httpservletrequest httpserdrequest = (httpletrequest) req ؛ // إجبار servletResponse على httpservletresponse httpservletresponse استجابة = (httpservletresponse) resp ؛ // فرض ServleTResponse على استجابة httpservletresponse = (httpservletresponse) resp ؛ // لا سمح المتصفحات لتخزين جميع الصفحات الديناميكية استجابة. استجابة. استجابة. Chain.dofilter (طلب ، استجابة) ؛ } public void init (filterConfig filterConfig) يلقي servletexception {} public void Destroy () {}} التكوين في ملف web.xml هو كما يلي:
<Ivilter> <ilter-name> nocachefilter </filter-name> <filter-class> me.gacl.web.filter.nocachefilter </filter-class> </filter> <filter mapping> <filter-name> nocachefilter </filter-name> </filter mapping>
3. التحكم في الموارد الثابتة في صفحات ذاكرة التخزين المؤقت للمتصفح
تشير بعض الصفحات الديناميكية إلى بعض الصور أو ملفات CSS لتعديل تأثير الصفحة. غالبًا ما يتم تغيير ملفات الصور وملفات CSS ، لذلك لتخفيف الضغط على الخادم ، يمكنك استخدام Filter للتحكم في المتصفح لتخزين هذه الملفات لتحسين أداء الخادم.
package me.gacl.web.filter ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.filter ؛ استيراد javax.servlet.filterchain javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛/ *** cclassname: cachefilter*description: filter*/ class public cachefilter تنفس filter {filter filterconfig الخاص ؛ dofilter public void (servletrequest req ، servletResponse resp ، سلسلة filterchain) يلقي ioexception ، servletexception {httpservletrequest request = (httpservletrequest) req ؛ httpservletresponse استجابة = (httpservletResponse) resp ؛ // 1. احصل على المورد الذي يريد المستخدم الوصول إليه uri = request.getRequesturi () ؛ // 2. احصل على اسم لاحقة المورد الذي يريد المستخدم الوصول إليه String ext = uri.substring (uri.lastindexof (".")+1) ؛ // احصل على الوقت الذي يحتاج فيه المورد إلى أن يتم تخزينه مؤقتًا بوقت السلسلة = FilterConfig.getInitParameter (ext) ؛ if (time! = null) {long t = long.parselong (time)*3600*1000 ؛ // قم بتعيين cache response.setDateDheader ("Expires" ، System.CurrentTimeMillis () + t) ؛ } chain.dofilter (طلب ، استجابة) ؛ } public void init (filterConfig filterConfig) يلقي servleTexception {this.filterConfig = filterConfig ؛ } تدمير الفراغ العام () {}} التكوين في ملف web.xml هو كما يلي:
<!-تكوين مرشح ذاكرة التخزين المؤقت-> <filter> <filter-name> cachefilter </filter-name> <ilter-class> me.gacl.web.filter.cachefilter </filter-class> <!-تكوين موارد الويب ليكون مخزنة ووقت Cache في الساعات-> <Param-value> 4 </param-value> </IPAR-PARAM> <INIT-PARAM> <PARAM-NAME> JPG </PARAM-NAME> <PARAM-VALUE> 1 </ <Param-Name> png </param-name> <param-value> 4 </param-value> </ith-param> </filter> <!-تكوين لاحقة مورد الويب ليتم تخزينها-> <مرشح mapping> <filter-name> cachefilter </filter-name> <Url-pattern>. <Filter-Name> cachefilter </filter-name> <url-pattern>*. <filter-name> cachefilter </filter-name> <url-pattern>*
4. إدراك تسجيل الدخول التلقائي للمستخدمين
الفكرة هي كما يلي:
1. بعد تسجيل الدخول إلى المستخدم بنجاح ، أرسل ملف تعريف ارتباط مع مستخدم الاسم إلى العميل. قيمة ملف تعريف الارتباط هي اسم المستخدم وكلمة المرور المشفرة لـ MD5.
2. اكتب Autologinfilter. يتحقق هذا التصفية ما إذا كان المستخدم لديه ملف تعريف ارتباط اسمه مستخدم. إذا كان الأمر كذلك ، فاتصل بـ DAO للتحقق مما إذا كان اسم المستخدم وكلمة المرور الخاصة بملف تعريف الارتباط يتطابقان مع قاعدة البيانات. إذا تم الانتهاء من المطابقة ، يتم تخزين كائن المستخدم (أي علامة تسجيل الدخول إلى المستخدم) في الجلسة لتحقيق تسجيل الدخول التلقائي.
الرمز الأساسي هو كما يلي:
وحدة التحكم في التعامل مع تسجيل الدخول إلى المستخدم: Loginservlet
package me.gacl.web.controller ؛ import java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.cookie ؛ استيراد javax.servlet.http.httpservlet ؛ import javax.serv.http.htttplet ؛ javax.servlet.http.httpservletresponse ؛ import me.gacl.dao.userdao ؛ import me.gacl.domain ServleTexception ، ioException {String username = request.getParameter ("username") ؛ سلسلة كلمة مرور = request.getParameter ("كلمة المرور") ؛ userDao dao = جديد userDao () ؛ مستخدم المستخدم = dao.find (اسم المستخدم ، كلمة المرور) ؛ if (user == null) {request.setAttribute ("message" ، "اسم المستخدم أو كلمة المرور غير صحيح !!") ؛ request.getRequestDispatcher ("/message.jsp"). يعود؛ } request.getSession (). setAttribute ("user" ، user) ؛ // إرسال ملف تعريف ارتباط لتسجيل الدخول التلقائي إلى متصفح العميل لتخزين sendautologincooke (طلب ، استجابة ، مستخدم) ؛ request.getRequestDispatcher ("/index.jsp"). } / ** * @method: sendautologincookie * description: أرسل ملف تعريف ارتباط لتسجيل الدخول التلقائي إلى متصفح العميل * @param request * param user * @param user * / private void sendautolicie logintime = integer.parseint (request.getParameter ("logintime")) ؛ // إنشاء ملف تعريف ارتباط ، اسم ملف تعريف الارتباط هو autologin ، والقيمة هي اسم المستخدم وكلمة المرور لتسجيل الدخول المستخدم ، ويتم استخدامه بين اسم المستخدم وكلمة المرور. وهي مقسمة. تم تشفير كلمة المرور بواسطة MD5. ملف تعريف الارتباط = ملف تعريف الارتباط الجديد ("autologin" ، user.getUserName () + ". // قم بتعيين فترة صحة ملف تعريف الارتباط cookie.setMaxage (logintime) ؛ // قم بتعيين المسار الصحيح لـ cookie cookie.setPath (request.getContextPath ()) ؛ // اكتب ملف تعريف الارتباط إلى استجابة متصفح العميل. addcookie (ملف تعريف الارتباط) ؛ }} public void dopost (httpservletrequest request ، httpservletresponse) يلقي servleTexception ، ioException {doget (request ، response) ؛ }} المرشحات التي تتعامل مع تسجيل الدخول التلقائي للمستخدم: AutologInfilter
package me.gacl.web.filter ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.filter ؛ استيراد javax.servlet.filterchain javax.servlet.http.cookie ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ تنفس AutologInfilter Filter {public void dofilter (servletrequest req ، servletResponse RESP ، سلسلة filterchain) يلقي iOexception ، servletexception {httpservletrequest request = (httpservletrequest) req ؛ httpservletresponse استجابة = (httpservletResponse) resp ؛ // إذا كنت قد قمت بتسجيل الدخول ، فأخطأ مباشرة. يعود؛ } // 1. احصل على ملف تعريف الارتباط الخاص بـ authlogin التي يتم تقديمها بواسطة قيمة سلسلة المستخدم = NULL ؛ ملفات تعريف الارتباط ملفات تعريف الارتباط [] = request.getCoOkies () ؛ لـ (int i = 0 ؛ ملفات تعريف الارتباط! = null && i <cookies.length ؛ i ++) {if (cookies [i] .getName (). equals ("autologin")) {value = cookies [i] .getValue () ؛ }} // 2. احصل على اسم المستخدم وكلمة المرور في ملف تعريف الارتباط if (value! = null) {String username = value.split ("//.") [0] ؛ سلسلة كلمة مرور = value.split ("//.") [1] ؛ // 3. اتصل بـ DAO للحصول على كلمة المرور المقابلة للمستخدم userdao dao = جديد userDao () ؛ مستخدم المستخدم = dao.find (اسم المستخدم) ؛ String dbPassword = user.getPassword () ؛ // 4. تحقق مما إذا كانت كلمة مرور MD5 التي يتم تقديمها بواسطة المستخدم تتطابق مع كلمة المرور في قاعدة البيانات. في حالة تطابقها ، سيتم تسجيل الدخول تلقائيًا إذا (password.equals (webUtils.md5 (dbpassword)))) {request.getSession (). }} chain.dofilter (طلب ، استجابة) ؛ } public void Destroy () {} public void init (filterConfig filterConfig) يلقي ServleTexception {}} إذا كنت ترغب في إلغاء تسجيل الدخول التلقائي ، فيمكنك حذف ملف تعريف الارتباط لتسجيل الدخول التلقائي عند تسجيل خروج المستخدم. الرمز الأساسي هو كما يلي:
package me.gacl.web.controller ؛ import java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.cookie ؛ استيراد javax.servlet.http.httpservlet ؛ import javax.serv.http.htttplet ؛ javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletrespons request.getSession (). removeAttribute ("user") ؛ // قم بإزالة ملف تعريف الارتباط الذي يتم تسجيله تلقائيًا في الإزالة المائية (طلب ، استجابة) ؛ // إزالة إلى صفحة تسجيل الدخول بعد تسجيل الخروج من request.getRequestDispatcher ("/login.jsp"). } /** * @method: الإزالة @ @description: حذف ملف تعريف الارتباط لتسجيل الدخول التلقائي ، * الطريق لحذف ملف تعريف الارتباط في Javaweb هو إنشاء ملف تعريف الارتباط الجديد ، والملف تعريف الارتباط الذي تم إنشاؤه حديثًا هو أن يتم تحريرها من نفس المسار المتمثل في أن يتم تحرير ملف تعريف الارتباط. طلب * @param استجابة */private void delectologincookie (httpservletrequest request ، httpservletponse response) {// قم بإنشاء ملف تعريف ارتباط مع اسم ملف تعريف الارتباط autologin = cookie cookie new ( cookie.setpath (request.getContextPath () ؛ما سبق هو العديد من سيناريوهات التطبيق الشائعة للمرشحات ، وآمل أن تكون مفيدة لتعلم الجميع.