1. Einheitlicher Zeichenkodierung auf der gesamten Website
Das CONFORD -Parameter -Zeichensatz gibt an
package me.gacl.web.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpServletRequestWrapper; import Javax.servlet CharakterEnCodingFilter implementiert Filter {private filterconfig filterconfig = null; // Setzen Sie die Standardzeichencodierung privat String defaultCharset = "utf-8"; public void dofilter (servletRequest req, servletresponse resp, filterchain kette) löst ioException, servletException {httpServletRequest Request = (httpServletRequest) req; HttpServletResponse response = (httpServletResponse) resp; String charSet = filterconfig.getInitParameter ("charSet"); if (charSet == null) {charSet = defaultCharSet; } request.setcharactercoding (charSet); response.setcharacterencoding (charset); Antwort.SetContentType ("text/html; charSet ="+charSet); MyCharacacterencodingRequest requestWrapper = new MyCharaccoderCodingRequest (Anfrage); chain.dofilter (RequestWrapper, Antwort); } public void init (filterconfig filterconfig) löst ServletException aus {// Die Initialisierungskonfigurationsinformationen des Filters this.filterconfig = filterconfig; } public void destroy () {}}/*1. Implementieren Sie dieselbe Schnittstelle wie das erweiterte Objekt 2. Definieren Sie eine Variable Das erweiterte Objekt 3. Definieren Sie einen Konstruktor, um das erweiterte Objekt zu empfangen. 4. Überschreiben Sie die Methoden, die erweitert werden müssen. public myCharacacterencodingRequest (httpServletRequest -Anfrage) {Super (Anfrage); this.request = Anfrage; } /* GetParameter -Methode neu schreiben* @see javax.servlet.servletRequestWrapper#getParameter (java.lang.String)* /@Override public String getParameter (String -Name) {try {// das Parameter abrufen; if (value == null) {return null; } // Wenn die Daten nicht in GET übermittelt werden, geben Sie den erhaltenen Wert direkt zurück, wenn (! This.request.getMethod (). EqualSignoreCase ("get")) {Rückgabewert; } else {// Wenn die Daten in GET übermittelt werden, ist der erhaltene Wert transcodierter Wert = new String (value.getBytes ("ISO8859-1"), this.request.getaractercoding ()); Rückgabewert; }} catch (Ausnahme E) {neue runTimeException (e) werfen; }}} Die Konfiguration in der Datei web.xml lautet wie folgt:
<Filter> <Filter-name> charakterischodingfilter </filter-name> <filterklasse> me.gacl.web.filter.Charactercodingfilter </filterklasse> <init-param> <param-name> charset </param-param> </filter-mapping> </param-valing <Filter-name> charakteritätsfilter </filter-name> <URL-Muster>/*</url-pattern> </filtermapping>
2. Der Browser ist von allen dynamischen Seiten zwischengespeichert
Es gibt 3 HTTP -Antwort -Header -Felder, die den Browser das Cache der aktuellen Seite untersagen können. Der Beispielcode im Servlet lautet wie folgt:
Nicht alle Browser können die oben genannten drei Antwortschicht vollständig unterstützen. Daher ist es am besten, gleichzeitig die oben genannten drei Antwortschicht zu verwenden.
package me.gacl.web.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.httpServletRequest; import javax.servlet.http.httpServletResponse;/*** @classname: nocacheFilter* @Description: Browser ist aus dem Cached alle dynamischen Pages: 2: 2: Lony: Lony: LONEYLANG CANGEER: pm**/ public class NoCacheFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { //Forcing ServletRequest to HttpServletRequest HttpServletRequest request = (HttpServletRequest) req; // Forcing servletResponse in httpServletResponse httpServletResponse Antwort = (httpServletResponse) resp; // Forcing servletResponse auf httpServletResponse response = (httpServletResponse) resp; // Browser verbieten, alle dynamischen Seiten zu speichern. response.setheader ("cache-control", "no-cache"); response.setheader ("pragma", "no-cache"); chain.dofilter (Anfrage, Antwort); } public void init (filterconfig filterconfig) löst servletException aus {} public void destroy () {}} Die Konfiguration in der Datei web.xml lautet wie folgt:
<Filter> <filter-name> nocacheFilter </filter-name> <filterklasse> me.gacl.web.filter.nocacheFilter </filterklasse> </filter> <Filter-Mapping> <filter-name> </filter-name> <!-Intercept-JSP-NAME-NAME> <WERN-NAME> <!-Intercept-JSP-NAME-NAME> <! </filtermapping>
3.. Steuern Sie statische Ressourcen auf Browser -Cache -Seiten
Einige dynamische Seiten beziehen sich auf einige Bilder oder CSS -Dateien, um den Seiteneffekt zu ändern. Diese Bilder und CSS -Dateien sind häufig unverändert. Um den Druck auf den Server zu lindern, können Sie den Browser mit Filter steuern, um diese Dateien zu unterragen, um die Leistung des Servers zu verbessern.
package me.gacl.web.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpservletResponse;/ *** @className: CacheFilter*@Description: Filter*/ Public Class CacheFilter Implements Filter {private Filterconfig Filterconfig; public void dofilter (servletRequest req, servletresponse resp, filterchain kette) löst ioException, servletException {httpServletRequest Request = (httpServletRequest) req; HttpServletResponse response = (httpServletResponse) resp; // 1. Holen Sie sich die Ressource, die der Benutzer auf String uri = request.getRequesturi () zugreifen möchte. // 2. Holen Sie sich den Suffixnamen der Ressource, den der Benutzer auf String ext = uri.substring (Uri.lastindexof (")+1) zugreifen möchte. // Erhalten Sie die Zeit, in der die Ressource zwischengespeichert werden muss. if (Zeit! = null) {long t = long.parselong (Zeit)*3600*1000; // Setzen Sie die cache response. } chain.dofilter (Anfrage, Antwort); } public void init (filterconfig filterconfig) löst servletException aus {this.filterconfig = filterConfig; } public void destroy () {}} Die Konfiguration in der Datei web.xml lautet wie folgt:
<!-Cache-Filter konfigurieren-> <filter> <Filter-Name> CacheFilter </Filter-Name> <Filter-Class> me.gacl.web.filter.cacheFilter </filter-class> <!-Konfigurieren Sie die Webressourcen, um die Cache-Zeit zu erhalten--> <init-param> <paramName> c. Param-NAME> </Param-NAME> </Param-NAME> <- <param-value> 4 </param-value> </init-param> <init-param> <param-name> jpg </param-name> <param-value> 1 </param-value> </init-param> <init-param <Param-name> png </param-name> <param-value> 4 </param-value> </init-param> </filter> <!-Das Suffix der von der Webressource zwischengespeicherten Webressource-> <Filter-Mapping> <Filter-Name> CacheFilter </filter-name> <url-puftern>*. <Filtermapping> <filter-name> cachefilter </filter-name> <url-puftern>*. <Filter-name> cachefilter </filter-name> <url-pattern>*
4. Die automatische Anmeldung für Benutzer realisieren
Die Idee ist wie folgt:
1. Nachdem sich der Benutzer erfolgreich angemeldet hat, senden Sie ein Cookie mit dem Namen des Namens an den Client. Der Wert des Cookies ist der Benutzername und das verschlüsselte Passwort von MD5.
2. Schreiben Sie einen Autologinfilter. Dieser Filter überprüft, ob der Benutzer einen Cookie namens Benutzer hat. Wenn ja, rufen Sie DAO an, um zu überprüfen, ob der Benutzername und das Passwort des Cookies mit der Datenbank übereinstimmen. Wenn die Übereinstimmung abgeschlossen ist, wird das Benutzerobjekt (d. H. Die Benutzeranmeldung) in der Sitzung gespeichert, um eine automatische Anmeldung zu erreichen.
Der Kerncode lautet wie folgt:
Login: LoginServlet des Controller -Handlings.
Paket me.gacl.web.controller; import java.io.ioxception; import Javax.servlet.servletException; import javax.servlet.http.cookie; import javax.servlet.http.httplet; import Javax.servlet.httpl.http.http.httpllet.http.httplet.http. javax.servlet.http.httpServletResponse; import me.gacl.dao.userdao; import me.gacl.domain.user; ServleTexception, ioException {String username = request.getParameter ("userername"); String password = request.getParameter ("Passwort"); Userdao dao = new userDao (); User user = dao.find (Benutzername, Passwort); if (user == null) {request.setAttribute ("meldung", "Der Benutzername oder Kennwort ist falsch !!"); Request.GetRequestDispatcher ("/message.jsp"). Weiterleiten (Anfrage, Antwort); zurückkehren; } request.getSession (). setAttribute ("user", user); // Senden Sie ein automatisches Anmeldekeks an den Client -Browser, um SendAutologicookie (Anfrage, Antwort, Benutzer) zu speichern. Request.GetRequestDispatcher ("/index.jsp"). Forward (Request, Antwort); } / ** * @Method: sendAutologincookie * @Description: Senden Sie ein automatisches Login -Cookie an den Client -Browser * @param request * @param reaktion * @param user * / privat void sendAutologincookie (httpServletRetReTReTRecy, httpServletRetRet -Antwort, Benutzer Benutzer) {{falls). logintime = integer.parseInt (request.getParameter ("logintime")); // Erstellen Sie ein Cookie, der Name des Cookies ist autologin, der Wert ist der Benutzername und das Kennwort der Benutzeranmeldung und wird zwischen dem Benutzernamen und dem Kennwort verwendet. Es ist geteilt. Das Passwort wird von MD5 verschlüsselt. Cookie = new Cookie ("autologin", user.getUnername () + "." + Webutils.md5 (user.getPassword ())); // Setzen Sie die Gültigkeitsdauer des Cookie Cookie.setMaxage (Logintime); // Setzen Sie den gültigen Pfad des Cookie cookie.setPaths (Request.getContextPath ()); // Schreiben Sie das Cookie an die Kundenbrowser -Antwort. }} public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, IOException {dodget (request, response); }} Filter, die die automatische Login der Benutzer verarbeiten: AutologinFilter
package me.gacl.web.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.cookie; import javax.servlet.http.httpserquest; import javax.servlet.http.httpserServletRespect; import me.gacl.dao.userdao; AutologinFilter implementiert Filter (public void dofilter (servletRequest req, servletresponse resp, Filterchain -Kette) IOException, ServletException {httpServletRequest Request = (httpServletRequest) Req; HttpServletResponse response = (httpServletResponse) resp; // Wenn Sie sich direkt ketten angemeldet haben. zurückkehren; } // 1. Holen Sie sich das Cookie des Authlogins, der vom Benutzer String -Wert = null mitgebracht wurde. Cookie Cookies [] = Request.GetCookies (); für (int i = 0; cookies! }} // 2. Holen Sie sich den Benutzernamen und das Passwort im Cookie if (value! = Null) {String username = value.split ("//.") [0]; String password = value.split ("//.") [1]; // 3. Rufen Sie DAO an, um das entsprechende Kennwort des User Userdao DAO = New UserDao () zu erhalten. User user = dao.find (Benutzername); String dbpassword = user.getPassword (); // 4. Überprüfen Sie, ob das vom Benutzer eingeführte Kennwort von MD5 mit dem Kennwort in der Datenbank übereinstimmt. Wenn es übereinstimmt, melden Sie sich automatisch an, wenn (password.equals (webutils.md5 (dbpassword))) {request.getSession (). SetAttribute ("Benutzer", Benutzer); }} chain.dofilter (Anfrage, Antwort); } public void destroy () {} public void init (filterconfig filterconfig) löst servletException {}} aus Wenn Sie die automatische Anmeldung abbrechen möchten, können Sie das automatische Anmeldekekse löschen, wenn sich der Benutzer anmeldet. Der Kerncode lautet wie folgt:
Paket me.gacl.web.controller; import java.io.ioxception; import Javax.servlet.servletException; import javax.servlet.http.cookie; import javax.servlet.http.httplet; import Javax.servlet.httpl.http.http.httpllet.http.httplet.http. javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CancelAutoLoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Remove user Request.GetSession (). removeTtribute ("Benutzer"); // Entfernen Sie das Cookie, das automatisch in RemoveAutologcookie (Anfrage, Antwort) angemeldet ist. // Entfernen Sie die Anmeldeseite, nachdem Sie request.getRequestDispatcher ("/login.jsp"). Weiterleiten (Anfrage, Antwort); } /** * @Method: removeAutologincookie * @Description: Löschen des automatischen Login -Cookies * Der Weg zum Löschen des Cookie in Javaweb besteht darin, einen neuen Cookie zu erstellen. Der neu erstellte Cookie hat den gleichen Namen wie der Cookie, der gelöscht wird. Anfrage * @param Antwort */private void removeAutologincookie (httpServletRequest -Anforderung, HttpServletResponse -Antwort) {// Erstellen Sie ein Cookie mit dem Namen Autologin Cookie Cookie = New Cookie ("Autologin", "). cookie.setPath (request.getContextPath ());Die oben genannten sind mehrere gemeinsame Anwendungsszenarien von Filtern, und ich hoffe, dass sie für das Lernen aller hilfreich sind.