通常、Cookie、セッション、フィルターはWebアプリケーションで使用されます。 Cookieとセッションは、特定のデータを保存するために使用されます。ブラウザがリクエストを行うと、背景が特定のリクエストを実行する前に、フィルターフィルターが有効になります。これら3つがまとめられる理由は、一部のログインプログラムなど、しばしば組み合わされるためです。
Cookieはブラウザメカニズムであり、セッションはサーバーメカニズムですが、実際には、Cookieもサーバーによって生成され、ブラウザ自体によって生成されないブラウザーに返されます。ブラウザがリクエストを送信すると、有効なCookieがある場合はCookieがまとめられます。
HTTPプロトコルはもともとステートレスプロトコルであるため、すべてのCookieが使用されます。つまり、HTTPプロトコル自体を介して、サーバーはブラウザが以前にアクセスしたかどうかを判断できません。
フィルターとサーブレットの書き込み方法は似ています。関連コードを作成するときは、フィルターインターフェイスを実装し、関連する方法を書き直す必要があります。通常、DoFilterメソッドはより頻繁に変更されます。執筆後にフィルターコードを効果的にする必要がある場合は、サーブレットの構成など、web.xmlで特定の構成を構成する必要があります。
Cookie、セッション、サーブレット、フィルターを組み合わせた単純なログインサンプルコードは次のとおりです。
データベースデータとして機能するユーザーエンティティクラスを定義します。ここでは、シングルトンパターンが1つのインスタンスオブジェクトのみが存在するように使用して使用されます。
パッケージモデル。 / ** *ユーザー情報エンティティクラス * * @author tuzongxun123 * */ public class usermodel {private string username;プライベート文字列パスワード。 //シングルトンモード、ユーザーオブジェクトインスタンスが1つだけあることを確認しますpublic static usermodel getInstance(){usermodel user = new usermodel( "zhangsan"、 "123456");ユーザーを返します。 } private usermodel(string username、string password){this.username = username; this.password = password; } public string getUsername(){return username; } public string getPassWord(){パスワードを返します。 }}ユーザーはindex.jspインターフェイスにログインし、フォームアクションでJSP機能を使用してプロジェクトパスを取得します。
<%@ page Language = "Java" Import = "Java.util。*" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <!doctype html public " - // w3c // dtd html 4.01遷移// en en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> cookieandfiltestest action = "<%= request.getContextPath()%>/loginServlet" method = "post"> username:<input type = "text" name = "username"/> </br>パスワード:<入力タイプ= "パスワード" name = "パスワード"/> </br> <入力タイプ= "valugin"/>> </body> </body> </body>
対応する背景サーブレット:
パッケージサーブレットテスト; 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 Protected void doget(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {this.dopost(req、rep); } @Override Protected void dopost(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {string username = req.getparameter( "username");文字列パスワード= req.getParameter( "password"); //データベースデータのシミュレーションusermodelユーザー= usermodel.getInstance();文字列dbusername = user.getusername();文字列dbpassword = user.getPassWord(); if(dbusername.equals(username)&& dbpassword.equals(password)){//ユーザー名とパスワードの両方の一致、ログインが成功し、セットセッションとCookie httpsessionセッション= req.getsession(); session.setattribute( "username"、username); session.setattribute( "password"、password); Cookie Cookie = new Cookie( "username"、username); Cookie Cookie2 = new Cookie( "Password"、Password); // cookie.setmaxage(60)のストレージ時間を設定します。 cookie2.setmaxage(60); // cookieをブラウザに送信しますresp.addcookie(cookie); resp.addcookie(cookie2); //ユーザーリストへの転送リクエストreq.getRequestDispatcher( "/userlist")。 } else {//ログインへのフォワードリクエストpage req.getRequestDispatcher( "index.jsp")。 }; }}ログイン後にジャンプするようにリクエストします。
パッケージサーブレットテスト; java.io.ioexceptionをインポートします。 javax.servlet.servletexceptionをインポートします。 javax.servlet.http.httpservletをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。モデルをインポートします。USERMODEL;パブリッククラスのユーザーリストサーブレットは、httpservletを拡張します{@Override Protected void doget(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {this.dopost(req、rep); } @Override Protected void dopost(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {usermodel user = usermodel.getinstance(); // browser resp.getwriter()にユーザーリストの帳簿データを印刷( "username:" + user.getusername() + "、" + "password:" + user.getPassword()); }} Project web.xml構成:
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/nns/javaee xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "id =" webapp_id "version =" 2.5 "> <! - アクセス時のプロジェクト名 - > <display-name> cookieandfiltertest </display-name> < <Servlet-Class> servlettest.loginservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> login </servlet-name> <url-pattern>/loginservlet </url-pattern> </servlet-mapping> <servlet-name>ユーザーリスト</servlet-name> <Servlet-Class> servlettest.userlistervlet </servlet-class> </servlet> <servlet-name> userlist </servlet-name> <url-pattern>/userlist </url-pattern> </servet-mapping> <! - フィルター設定<filter-class> filtertest.filtertest </filter-class> </filter> <filter-mapping> <filter-name> loginfilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <! - プロジェクト名を入力することでアクセスするデフォルトページ - > <womblew-file> <welcome-file> <welcomefile>
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;パブリッククラスフィルターテスト実装filter {@override public void destroy(){} @Override public void dofilter(servletResponse request、servletResponse応答、フィルターチェーンチェーン)IoException、servletexception {//直接リリースhttpservletRequest for login request and httpserquretrequest request request request; httpservletResponse resp =(httpservletResponse)応答;文字列uri = req.getRequesturi(); if( "/cookieandfiltertest/loginservlet".equals(uri)||" /cookieandfiltertest/".equals(uri)){// release chain.dofilter(request、response);戻る; } //ログイン要求でない場合は、Cookies cookie [] cookie = req.getCookies()があるかどうかを判断します。 if(cookies!= null && cookies.length> 0){string username = null;文字列パスワード= null; // Cookieのユーザー名とパスワードがデータベースと一致しているかどうかを判断します。一貫性がある場合は、リリースします。それ以外の場合は、リクエストをログインページ(cookie cookie:cookie){if( "username" .equals(cookie.getName())){username = cookie.getValue(); } if( "password" .equals(cookie.getname())){password = cookie.getValue(); }} usermodel user = usermodel.getInstance(); if(user.getusername()。equals(username)&& user.getpassword()。equals(password)){chech.dofilter(request、response);戻る; } else {//ログインインターフェイスにリダイレクトreq.getRequestDispatcher( "/index.jsp")。戻る; }} else {req.getRequestDispatcher( "/index.jsp")。戻る; }} @Override public void init(filterconfig arg0)throws servletexception {}}上記はこの記事に関するものです。誰もがJavaプログラミングを学ぶことが役立つことを願っています。