1。サイト全体でエンコードする統一文字
構成パラメーターcharsetは、HTMLフォームリクエストパラメーターの中国の問題を処理するために使用される文字エンコードを示します
ge.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; Import javax.servlet.filterconfig; Import javax.servlet.servletexcection; Import javax.servlet.servlete.servlete.servletested.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest. javax.servlet.http.httpservletrequest; Import javax.servlet.httpservletrequestwrapper; Import javax.servlet.http.httpservletresponse; charitilecodingfilterはフィルターを実装します{private filterconfig filterconfig = null; //プライベート文字列をエンコードするデフォルトの文字を設定DefaultCharset = "UTF-8"; public void dofilter(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); Response.setcharacterencoding(charset); Response.setContentType( "text/html; charset ="+charset); myCharacterencodingRequest requestwrapper = new MyCharActerEncodingRequest(request); Chain.dofilter(requestwrapper、response); } public void init(filterconfig filterconfig)servletexceptionをスロー{//フィルターの初期化構成情報を取得します。 } public void Destroy(){}}/*1。拡張されたオブジェクトと同じインターフェイスを実装します。変数を定義します。変数を定義します拡張オブジェクトを覚えておいてください。3。拡張オブジェクトを受信するコンストラクターを定義します。 public MyCharacterencodingRequest(httpservletrequest request){super(request); this.request = request; } /* getParameterメソッドを書き直す@see javax.servlet.servletrequestwrapper#getParameter(java.lang.string)* /@Override public string getParameter(try {// parameterの値文字列値= this.reqparameter(name); if(value == null){return null; } //データがgetで送信されない場合、取得した値を直接返しますif(!this.request.getMethod()。equalsignOreCase( "get")){return値; } else {//データがgetで送信された場合、取得された値はtranscoded value = new string(value.getBytes( "iso8859-1")、this.request.getCharActerencoding());返品値。 }} catch(Exception e){throw new runtimeException(e); }}} web.xmlファイルの構成は次のとおりです。
<filter> <filter-name> charatelecodingfilter </filter-name> <filter-class> me.gacl.wilter.characterencodingfilter </filter-class> <init-param> <param-name> charset </param-name> <paramvalue> utf-8 </param-> </init-param> <フィルター> <フィルター> <filter-name> charatelecodingfilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2。ブラウザは、すべてのダイナミックページをキャッシュすることを禁止されています
ブラウザが現在のページのキャッシュを禁止できる3つのHTTP応答ヘッダーフィールドがあります。サーブレットの例のコードは次のとおりです。
すべてのブラウザが上記の3つの応答ヘッダーを完全にサポートできるわけではないため、上記の3つの応答ヘッダーを同時に使用することをお勧めします。
ge.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; Import javax.servlet.filterconfig; Import javax.servlet.servletexcection; Import javax.servlet.servlete.servlete.servletested.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest. javax.servlet.http.httpservletrequest; Import javax.servlet.http.httpservletresponse;/ *** @classname:nocachefilter* @description:ブラウザはCached All Dynamicページから禁止されています* @author:@date* @dateクラスNocachefilterを実装している{public void dofilter(servletrequest req、servletresponse resp、filterchainチェーン)IoException、servletexception {// httpservletrequest httpservletrequest request =(httpservletrequest)req; // servletResponseをhttpservletResponseに強制するhttpservletResponse応答=(httpservletResponse)resp; // servletResponseをhttpservletResponse応答に強制する=(httpservletResponse)resp; //すべての動的ページResponse.setDateHeader( "Expires"、-1)をキャッシュすることを禁止します。 Response.setheader( "Cache-Control"、 "no-cache"); Response.setheader( "Pragma"、 "no-cache"); Chain.dofilter(リクエスト、応答); } public void init(filterconfig filterconfig)servletexception {} public void destroy(){}} web.xmlファイルの構成は次のとおりです。
<filter> <filter-name> nocachefilter </filter-name> <filter-class> me.gacl.wilter.nocachefilter </filter-class> </filter> <filter-mapping> <filter-name> nocachefilter </filter-name> <
3。ブラウザキャッシュページで静的リソースを制御します
いくつかの動的なページには、いくつかの写真またはCSSファイルを参照して、ページ効果を変更します。これらの写真とCSSファイルは多くの場合変更されていないため、サーバーの圧力を軽減するために、フィルターを使用してブラウザを制御してこれらのファイルをキャッシュしてサーバーのパフォーマンスを向上させることができます。
ge.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; Import javax.servlet.filterconfig; Import javax.servlet.servletexcection; Import javax.servlet.servlete.servlete.servletested.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest. javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse;/ *** @classname:cachefilter*@description:フィルター*/パブリッククラスのCachefilterはフィルター{private filterconfig filterconfig; public void dofilter(servletrequest req、servletresponse resp、filterchainチェーン)ioexception、servletexception {httpservletrequest request =(httpservletrequest)req; httpservletResponse応答=(httpservletResponse)resp; // 1。ユーザーが文字列uri = request.getRequesturi()にアクセスしたいリソースを取得します。 // 2。ユーザーが文字列ext = uri.substring(uri.lastindexof( "。")+1)にアクセスしたいリソースのサフィックス名を取得します。 //リソースがcached string time = filterconfig.getInitParameter(ext); if(time!= null){long t = long.parselong(time)*3600*1000; // cache response.setdateheader( "expires"、system.currenttimemillis() + t)を設定します。 } Chain.dofilter(request、response); } public void init(filterconfig filterconfig)servletexception {this.filterconfig = filterconfig; } public void Destroy(){}} web.xmlファイルの構成は次のとおりです。
<! - キャッシュフィルターを構成 - > <filter> <filter-name> cachefilter </filter-name> <filter-class> me.gacl.web.filter.cachefilter </filter-class> <! - キャッシュ時間とキャッシュ時間を設定し、時間のキャッシュ時間を構成 - </init-param> <init-param> <param-name> jpg </param-name> <param-value> 1 </param-value> </init-param> <init-param> <param-name> js </param-name> <param-value> 4 </param-value> </init-param> <init-param> param> <param-nam <Param-Value> 4 </param-value> </init-param> </filter> <! - キャッシュされるようにWebリソースの接尾辞を構成 - > <フィルターマッピング> <フィルター名> </filter-name> <url-pattern>*。 <url-pattern>*。css </url-pattern> </filter-mapping> <filter-mapping> <filter-name> cachefilter </filter-name> <url-pattern>*。js </url-pattern> </フィルターマッピング>
4.ユーザー向けの自動ログインを実現します
アイデアは次のとおりです。
1。ユーザーが正常にログインしたら、名前ユーザーを含むCookieをクライアントに送信します。 Cookieの値は、MD5のユーザー名と暗号化されたパスワードです。
2。AutoginFilterを書きます。このフィルターは、ユーザーがユーザーという名前のCookieを持っているかどうかをチェックします。その場合は、DAOに電話して、Cookieのユーザー名とパスワードがデータベースと一致するかどうかを確認してください。一致が完了した場合、ユーザーオブジェクト(つまり、ユーザーログインマーク)がセッションに保存され、自動ログインを実現します。
コアコードは次のとおりです。
コントローラー処理ユーザーログイン:LoginServlet
packed me.gacl.web.controller; import java.io.ioexception; Import javax.servlet.servletexception; Import javax.servlet.servlet.http.cookie; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletrequest; javax.servlet.http.httpservletresponse; Import me.gacl.dao.userdao; import me.gacl.domain.user; import me.gacl.util.webutils; public class loginervletはhttpservletを拡張します{httpservletreletrefrefretervlete( servletexception、ioexception {string username = request.getParameter( "username");文字列パスワード= request.getParameter( "password"); userdao dao = new userdao();ユーザーユーザー= dao.find(username、password); if(user == null){request.setattribute( "message"、 "ユーザー名またはパスワードが間違っている!!"); request.getRequestDispatcher( "/message.jsp")。戻る; } request.getSession()。setAttribute( "user"、user); //クライアントブラウザに自動ログインCookieを送信して、sendautologincookie(request、response、user)を保存します。 request.getRequestDispatcher( "/index.jsp")。 } / ** * @method:sendautologincookie * @description:クライアントブラウザーに自動ログインクッキーを送信 * @param request * @param respons * / prive user * / private sendautologincookie(httpservletrequest request、httpservletresponse rexpants、user user user userime ")if(nulmeter")if(nulmeter ") logintime = integer.parseint(request.getParameter( "logintime")); // Cookieの作成、Cookieの名前はAutologin、値はユーザーログインのユーザー名とパスワードであり、ユーザー名とパスワードの間で使用されます。それは分割されています。パスワードはMD5によって暗号化されます。 Cookie = new Cookie( "autologin"、user.getUsername() + "。" + webutils.md5(user.getPassword())); // cookie cookie.setmaxage(logintime)の有効期間を設定します。 // cookie cookie.setpathの有効なパスを設定します(request.getContextPath()); // CookieをクライアントブラウザResponse.AddCookie(Cookie)に書き込みます。 }} public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {doget(request、response); }}ユーザー自動ログインを処理するフィルター:autologinfilter
ge.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.servlete.servlete.servletest.servrelet.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest.servletest. javax.servlet.http.cookie; Import javax.servlet.http.httpservletrequest; Import javax.servlet.http.httpservletResponse; import me.gacl.dao.userdao; import me.gacl.domain.user; inme.gacl.user; AutoginFilterはフィルターを実装しています{public void dofilter(servletrequest req、servletresponse resp、filterchainチェーン)ioexception、servletexception {httpservletrequest =(httpservletrequest)req; httpservletResponse応答=(httpservletResponse)resp; //ログインした場合、直接Chain.dofilter(request、response)release if(request.getSession()。getAttribute( "user")!= null){chain.dofilter(request、response);戻る; } // 1。ユーザー文字列値= nullによってもたらされるauthloginのクッキーを取得します。 Cookie Cookie [] = request.getCookies(); for(int i = 0; cookies!= null && i <cookies.length; i ++){if(cookies [i] .getname()。equals( "autologin")){value = cookies [i] .getvalue(); }} // 2。 Cookieでユーザー名とパスワードを取得するif(value!= null){string username = value.split( "//。")[0];文字列password = value.split( "//。")[1]; // 3。 DAOに電話して、ユーザーユーザーの対応するパスワードを取得します。ユーザーユーザー= dao.find(username);文字列dbpassword = user.getPassWord(); // 4。ユーザーが持ち込んだMD5のパスワードがデータベースのパスワードと一致するかどうかを確認します。一致する場合、if(password.equals(webutils.md5(dbpassword)))){request.getSession()。setAttribute( "user"、user); }} Chain.dofilter(request、response); } public void destroy(){} public void init(filterconfig filterconfig)servletexception {}}自動ログインをキャンセルする場合は、ユーザーがログアウトするときに自動ログインCookieを削除できます。コアコードは次のとおりです。
packed me.gacl.web.controller; import java.io.ioexception; Import javax.servlet.servletexception; Import javax.servlet.servlet.http.cookie; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletrequest; javax.servlet.http.httpservletrequest;インポートjavax.servlet.http.httpservletresponse;パブリッククラスcancelautologinervletはhttpservlet {public void doget(httpservletrequest request、httpservletressopsections exception(httpservletrequest request)を拡張します。 request.getSession()。removeattribute( "user"); // removeautologincookie(リクエスト、応答)で自動的にログインされているCookieを削除します。 // request.getRequestDispatcher( "/login.jsp")をログアウトした後、ログインページに削除します( "/login.jsp")。 } /** * @method:removeautologincookie * @description:自動ログインCookieを削除する * JavawebでCookieを削除する方法は、新しいCookieを作成することです。リクエスト * @param Response */private void removeautologincookie(httpservletrequest request、httpservletresponse応答){// autologin cookie = new cookie( "autologin"、 ")という名前のクッキーを作成します; cookie.setpath(request.getContextPath());上記は、フィルターのいくつかの一般的なアプリケーションシナリオであり、すべての人の学習に役立つことを願っています。