以下に、javawebのサンプルコードを紹介して、写真とテキストを介してユーザーログインと登録機能を実装します。見てみましょう。
1.サーブレットの紹介+JSP+Javabean開発モデル(MVC)
サーブレット+JSP+Javabeanモード(MVC)は、複雑なWebアプリケーションの開発に適しています。このモードでは、サーブレットはユーザー要求の処理を担当し、JSPはデータ表示を担当し、Javabeanはデータのカプセル化を担当します。サーブレット+JSP+Javabeanモードプログラムは、モジュール間の明確なレベルを持ち、このモードを使用するにはWeb開発が推奨されます。
ここでは、最も一般的に使用されるユーザーログイン登録プログラムを使用して、サーブレット+JSP+Javabean開発モデルを説明します。このユーザーログイン登録プログラム包括的なケースを通じて、以前に学んだXML、XPath、サーブレット、およびJSPの知識ポイントを接続します。
2。MVCアーキテクチャを使用してWebプロジェクトを作成します
MyeClipseで新しいWebMVCFrameworkプロジェクトを作成し、プロジェクトに必要な開発パッケージ(JARパッケージ)をインポートし、プロジェクトに必要なパッケージを作成します。 Java開発では、アーキテクチャレベルはパッケージの形に反映されています
| プロジェクトに必要な開発パッケージ(JARパッケージ) | ||
| シリアルナンバー | 開発パッケージ名 | 説明する |
| 1 | DOM4J-1.6.1.jar | DOM4Jは、XMLファイルの操作に使用されます |
| 2 | Jaxen-1.1-beta-6.jar | XPath式を解析するために使用されます |
| 3 | Commons-Beanutils-1.8.0.jar | Beanオブジェクトを処理するためのツールクラス |
| 4 | commons-logging.jar | Commons-Beanutils-1.8.0.Jar依存関係JARパッケージ |
| 5 | jstl.jar | JSTLタグライブラリとEL Expression依存関係パッケージ |
| 6 | Standard.jar | JSTLタグライブラリとEL Expression依存関係パッケージ |
優れたJavawebプロジェクトアーキテクチャには、上記の11パッケージが必要である必要があります。これにより、明確になり、各レイヤー間の責任がクリアされます。 Javawebプロジェクトアーキテクチャを構築するときは、上記の1〜11順にパッケージを作成します。ドメイン→DAO→DAO→DAO.IMPL→SERVICE.IMPL→Web.Controller→Web.UI→Web.Filter→Web.Listener→UTIL→Junit.test.test。パッケージレベルが作成されると、プロジェクトアーキテクチャが決定されます。もちろん、実際のプロジェクト開発では、完全に基づいていない場合があります
| プロジェクトに必要なパッケージ | |||
| シリアルナンバー | パッケージ名 | 説明する | レベル |
| 1 | me.gacl.domain | システムを保存するJavabeanクラス(単純な属性のみが含まれ、属性に対応するメソッドを取得および設定し、特定のビジネス処理方法は含まれません)。 | ドメイン(ドメインモデル)レイヤー |
| 2 | me.gacl。ダオ | データベースへのアクセスを保存する操作インターフェイスクラス | データアクセスレイヤー |
| 3 | me.gacl。 dao.impl | データベースにアクセスする操作インターフェイスを保存する実装クラス | |
| 4 | me.gacl。サービス | ストア処理システムビジネスインターフェイスクラス | ビジネス処理層 |
| 5 | me.gacl。 service.impl | 処理システムのビジネスインターフェイスを保存するための実装クラス | |
| 6 | me.gacl。 web.controller | システムコントローラーとして保存されたサーブレット | Webレイヤー(プレゼンテーションレイヤー) |
| 7 | me.gacl.web.ui | ユーザーにユーザーインターフェイスを提供するサーブレット(UIはユーザーインターフェイスを指します) | |
| 8 | me.gacl.web.filter | ストレージシステムに使用されるフィルター | |
| 9 | me.gacl.web.listener | リスナーはシステムの保存に使用されていました | |
| 10 | me.gacl.util | [データアクセスレイヤー]、[ビジネス処理層]、および[Webレイヤー]に使用されるシステムを保存するための一般的なツール | |
| 11 | junit.test | システムを保存するためのテストクラス | |
上記のように、パッケージ階層を作成しますが、プロジェクトの実際の状況に基づいて、作成する必要がある場合があります。
彼のバッグ、これはプロジェクトのニーズに依存します。
SRCディレクトリ(カテゴリディレクトリ)で、ユーザーデータを保存するためのXMLファイル(db.xml)を作成します(db.xml)
Web-INFディレクトリにページディレクトリを作成します。ページディレクトリは、システムの一部の保護されたJSPページを保存します(ユーザーがURLアドレスを介して直接アクセスできるようにします)。ユーザーがこれらの保護されたJSPページにアクセスしたい場合は、 me.gacl.web.uiパッケージのサーブレットのみを使用できます。
作成されたプロジェクトを次の図(図1)に示します。
図1
3.階層アーキテクチャのコードライティング
階層アーキテクチャのコードは、[ドメインモデルレイヤー(ドメイン)]→[データアクセスレイヤー(DAO、DAO.IMPL)]→[ビジネス処理層(サービス、サービス、IMPL)]→[式レイヤー(Web.Controller、Web.UI、Web.Filter、Web.Filter、[The Tool Class)] (junit.test)]。
3.1。ドメインレイヤーを開発します
me.gacl.domainパッケージの下にユーザークラスを作成します
ユーザークラスの特定のコードは次のとおりです。
packed me.gacl.domain; Import java.io.serializable; Import Java.util.date;/*** @Author Gacl*ユーザーエンティティクラス*/パブリッククラスユーザー実装{private static final serialversionuid = -l; // user idprivate文字列ID;ユーザーバースデープライベートデートの誕生日; public string getId(){return id;} public void setid(string id){this.id = id;} public string getusername(){return username;} public void setusername(string username){this.username = username;} public string getuserpwd(){return vuid; {this.userpwd = userpwd;} public string getemail(){return email;} public void setemail(this.email = email;} public date getBirthday(){return Birthday;} public void setbirthday(date Birthday){this.birthday;}3.2。データアクセスレイヤー(DAO、DAO.IMPL)を開発する
me.gacl.daoパッケージの下にiuserdaoインターフェイスクラスを作成します。開発インターフェイスクラスの場合、文字Iをクラスの接頭辞として使用することに慣れているため、現在のクラスがインターフェイスであることがわかります。クラス名を見ると、インターフェイスであるか、特定の実装クラスであるかを簡単に区別できます。
iuserdaoインターフェイスの特定のコードは次のとおりです。
packed me.gacl.dao; me.gacl.domain.user; public interface iuserdao {/***ユーザー名とパスワードに基づいてユーザーを見つけます* @param username* @param userpwd* @return name* @param username* @return fund*/user find(string username);}インターフェイスのメソッド定義では、特定のビジネスに基づいて定義する必要がある方法のみを分析できます。ただし、ビジネスがどれほど複雑であっても、基本的なCRUD(追加、削除、修正、クエリ)操作から分離することはできません。 DAOレイヤーはデータベースと直接相互作用するため、DAOレイヤーインターフェイスには一般に、追加、削除、変更、クエリの4つの関連する方法があります。
me.gacl.dao.implパッケージの下にuserdaoimplクラスを作成します
userDaoImplクラスは、iUSERDAOインターフェイスの特定の実装クラスです。インターフェイスの実装クラスの命名方法については、「インターフェイス名(プレフィックスIを削除) +」 +「インターフェイス名 + empl」:iuserdao(interface)→userdaoimpl(class)またはiuserdao(interface)→iuserdaoimpl(classを実装)→iuserdao(interface)→iuserdao(interface):iuserdao(interface):iuserdao(interface):iuserdao(interface)の形式で名前を付けることに慣れています。これは個人的なプログラミングの習慣でもあります。私が表示するコードのほとんどは、通常、これら2つのフォームのいずれかでインターフェイスの特定の実装クラスに名前を付けます。とにかく、インターフェイスに対応するどの実装クラスが一目であるかを確認できる必要があります。
userdaoimplクラスの特定のコードは次のとおりです。
packy me.gacl.dao.impl; Import java.text.simpledateformat; Import org.domj.document; import org.domj.element; import me.gacl.dao.iuserdao; import me.gacl.domain.user; Import me.gacl.util.xmlutils; gacl*/public class userdaoimplはiuserdao {@overridepublic user find(string username、string userpwd){try {document document = xmlutils.getDocument(); @userpwd = '"+userpwd+"'] "); if(e == null){return null;} user user = new user(); user.setid(e.attributevalue( "id")); user.setemail(e.attributevalue( "email")); user.setuserpwd(e.attributevalue( "userpwd")); user.setusername(e.attributevalue( "username")); simpledateFormat( "yyyy-mm-dd"); user.setbirthday(sdf.parse(birth)); return user;} catch(exception e){throw new runtimeexception(e);}}@suppresswarnings( "deprecation")@ridepublic add(user user add(ementd) document.getRootelement(); element user_node = root.addelement( "user"); //ユーザーノードを作成して、rootuser_node.setattributevalue( "id"、user.getid(); user_node.setattributevalue( "username"、user.getusername()); user_node.setattributevalue( "userpwd"、user.getusertotttribevalue(); user.getEmail()); SimpleDateFormat sdf = new SimpledateFormat( "yyyy-mm-dd"); user_node.setattributevalue( "Bathined"、sdf.format(user.getBirthday())); xmlutils.writexml(document);} catch(excement e){emplated(document); runtimeexception(e);}}@overridepublic user find(string username){try {document document = xmlutils.getDocument();要素e =(要素)document.selectsinglenode( "// user [@username = '"+username+"']"); if(e = = null){return null) user(); user.setid(e.attributevalue( "id")); user.setemail(e.attributevalue( "email")); user.setuserpwd(e.attributevalue( "userpwd")); user.setusername(e.attributevalue( "username")); simpledateFormat( "yyyy-mm-dd"); user.setbirthday(sdf.parse(birts)); return user;} catch(exception e){throw new runtimeexception(e);}}}}}3.3。開発サービスレイヤー(サービスレイヤーはすべてのビジネスサービスをWebレイヤーに提供します)
me.gacl.serviceパッケージにiuserserviceインターフェイスクラスを作成します
iUSERServiceインターフェイスの特定のコードは次のとおりです。
packed me.gacl.service; import me.gacl.domain.user; import me.gacl.exception.userexistexception; public interface iuserservice {/***登録サービスを提供* @paramユーザー* @throws userexistexception*/void Registeruser(user users(user user)throws userexistexception; @return*/user loginuser(string username、string userpwd);}me.gacl.service.implパッケージでuserserviceimplクラスを作成します
userserviceImplクラスは、iuserserviceインターフェイスの特定の実装クラスです。特定のコードは次のとおりです。
packed me.gacl.service.impl; import me.gacl.dao.iuserdao; import me.gacl.dao.impl.userdaoimpl; import me.gacl.exception.userexistexception; import me.gacl.service.iusererervice iuserservice iuserervice iuserservice iuserservice iserservice iserservice iserservice iserservice class extexception; iuserdao userdao = new userdaoimpl();@overridepublic void registeruser(user user)throws userexistexception {if(userdao.find(user.getUsername()!= null){// checked exceptioned // unchecked expect for emptile emptile time for emply expectipeはuserexistexception( "登録済みユーザー名は既に存在します!!!");} userdao.add(user);}@overridepublic user loginuser(string username、string userpwd){return userdao.find(username、userpwd);}}}}3.4。 Webレイヤーを開発します
3.4.1。登録機能を開発します
1. me.gacl.web.uiパッケージの下にRegisterUiservletを書いて、ユーザーに登録インターフェイスを提供する
ユーザーリクエストを受信した後、RegisterUiserVletはJSPにジャンプします
RegisterUiservletのコードは次のとおりです。
packed me.gacl.web.ui; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; Import javax.http.http.httpresponse;ユーザーに登録ユーザーインターフェイスを提供するGACL*サーブレット* RegisterUiserVletは、ユーザーの登録インターフェイスの出力を担当します*ユーザーがRegisterUiservletにアクセスすると、Web-inf/Pages Directory*/public class registeruiservletがhttpservletを拡張します{public void doget(httpretreletrefretrefretlest、httpreletletrefletrefretrefretest extens servletexception、ioexception {request.getRequestDispatcher( "/web-inf/pages/register.jsp")。2。ユーザー登録JSPページ登録簿を書く/web-inf/pages/directoryでjsp
Web-INFディレクトリにあるJSPページは、URLアドレスから直接アクセスできません。
開発中、プロジェクトに外部の世界から直接アクセスしたくない機密のWebリソースがある場合は、これらの機密のWebリソースをWeb-INFディレクトリに入力して、外の世界がURLを介して直接アクセスすることを禁止できるようにすることを検討できます。
Register.jspページのコードは次のとおりです。
<%@ page Language = "Java" PageEncoding = "utf-"%> <!Doctype HTML> <HTML> <HEAD> <HEAD> <TITLE>ユーザー登録</title> </head> <body-align: "center;"> <form action = "$ {pagecontext.request.request.contextpath}方法= "post"> <table> <tr> <td> username </td> <td> <入力タイプ= "テキスト" name = "username"> </td> </tr> <tr> <td>パスワード</td> <td> name = "cundilepwd"> </td> </tr> <tr> <td> email </td> <td> <td> <td> <input type = "text" name = "email"> </td> </tr> <tr> <td>誕生日</td> <td> <td> <入力タイプ= "テキスト" name = "誕生日" value = "clear"> </td> <td> <input type = "submit" value = "Register"> </td> </tr </table> </form> </body> </html> <form action = "$ {pagecontext.request.contextpath}/servlet/registerservlet" method = "post"> in register.jspは、フォームが送信され、処理のためにレジスターサーブレットに引き渡されたことを示します。
3. me.gacl.web.controllerパッケージの下でユーザー登録を処理するためのRegisterServletを作成する
RegisterServletは、次の責任を果たします。
1.クライアントがサーバーに送信したフォームデータを受信します。
2。フォームデータの合法性を確認します。検証が失敗した場合は、JSPに戻ってジャンプしてエラーメッセージをエコーします。
3.検証が渡された場合は、サービスレイヤーに電話してデータベースにユーザーを登録します。
レジスタサーブレットがフォームデータを受信し、フォームデータを検証するために登録フォームデータを検証するためにRegisterFormBeanを設計し、Webutilsツールクラスを作成して、クライアントが送信したフォームデータをFormbeanにカプセル化しました。
me.gacl.web.formbeanパッケージの下に登録フォームデータを確認するためのRegisterformbeanを作成する
RegisterFormBeanコードは次のとおりです。
packeme.gacl.web.formbean; import java.util.hashmap; import java.util.map; import org.apache.commons.beanutils.locale.converters.datelocaleconverter; input item in register.jsp* The responsibilities of the RegisterFormBean are not only responsible for receiving the value of the form input item in register.jsp, but also serve as the legality of the value of the form input item* @author gacl**/public class RegisterFormBean {//The properties in the RegisterFormBean correspond to the name of the form input item in register.jsp one by one //<input type="text" name="userName"/>プライベート文字列ユーザー名; // <入力タイプ= "パスワード" name = "userpwd"/> private string userpwd; // <入力タイプ= "パスワード" name = "confiendpwd"/> private string cundilepwd; // <入力タイプ= "text" name "/> private string email; // <入力タイプ=" name = " Map <String、String> Errors = new Hashmap <String、String>(); public Map <String、String> getErrors(){return errors;} public void seterrors(Map <String、String>エラー){this.errors = errors;}/**検証メソッドは、フォーム入力項目の検証を担当します。ユーザー名を空にすることはできません。パスワードを空にすることはできません。パスワードは、2回のプライベート文字列メールと同じでなければなりません。それは空になる可能性があり、それが法的メールボックス*プライベート文字列の誕生日である場合は空ではありません。法的日付*/public boolean validate(){boolean isok = true; if(this.username == null || this.username.trim()。 (!this.username.matches( "[a-za-z] {、}")){isok = false; errors.put( "username"、 "usernameは-bit !!");} false; errors.put( "userpwd"、 "パスワードは空にすることはできません!!");} else {if(!this.userpwd.matches( "// d {、}")){isok = false; errors.put( "userpwd"、 "パスワードはvits !!パスワードは、2回が(this.confirmpwd!= null){if(!this.confirmpwd.equals(this.userpwd)){isok = false; errors.put( "cundilepwd"、 "2回はnull !! nullではなく、空になる可能性があります。それが法的な電子メールの場合(this.email!= null &&!this.email.trim()。equals( "")){if(!this.email.matches( "// w+@// w+(// w+)+"){isok = fals; errors.put( "email"、 "mail boctions not o n't o n't o no"); ");空ではなく、空ではなく、それが法的日付である場合、それが法的日付である場合(this.birthday!= null &&!this.birthday.trim()。equals( "")){try {datelocaleconverter convert = new Datelocaleconverter(); conver.Convert(this.birthday);} catch(excement efut = false of "false fals"日付!! getConfirmpwd(){return cundilepwd;} public void setconfirmpwd(string cundilepwd){this.confirmpwd = cusmentpwd;} public string getemail(){return email;} public void setemail(} public void setemail(} public void setemail(} public void setemail(string email){this.email = email;} public string getbirthday;} {this.birthday = Birthday;}}me.gacl.utilパッケージの下にWebutilsツールクラスを作成します。このツールクラスの機能は、クライアントから提出されたフォームデータをフォームビーンにカプセル化することです
packed me.gacl.util; import java.util.enumeration; import java.util.uuid; import javax.servlet.http.httpservletrequest; import org.apache.commons.beanutils.beanutils; {/***リクエストオブジェクトをTオブジェクトに変換します* @param clazz* @return*/public static <t> t requestbean(httpservletrequest request、class <t> clazz){try {t bean = clazz.newinstance(); enumeration <string> e = requesparameternames; while(e.hasmoreElements()){string name =(string)e.nextelement(); string value = request.getParameter(name); beanutils.setProperty(bean、name、value);} return bean;} catch(例外e){新しいruntimeexcection(e);} uuid.randomuuid()。toString();}}最後に、ユーザー登録の処理を担当するレジスターサーブレットの完全なコードを見てみましょう。
packy me.gacl.web.controller; Import java.io.ioexception; Import java.util.date; import javax.servlet.servletexception; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletrequest; import; javax.servlet.http.httpservletresponse; import org.apache.commons.commons.beanutils.beanutils; Import org.apache.commons.commons.compl.convertils; Import org.apache.commons.beanutils.locale.converter.dateloconverter; ge.dateloconverter; me.gacl.exception.userexistexception; import me.gacl.service.iuserservice; import me.gacl.service.impl.userserviceimpl; import me.gacl.util.webutils; import me.gacl.web.form.form.form.registerformbean; httpservlet {public void doget(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {//クライアントがレジスタフォームオブジェクトに送信したフォームデータをカプセル化します。 (formbean.validate()== false){//検証が失敗した場合//ユーザーによって埋め込まれたフォームデータをregister.jspページに戻るフォームデータを補足するフォームオブジェクトを送信します。 Register.jsprequest.getRequestDispatcher( "/web-inf/pages/register.jsp")。 user.setId(webutils.makeid()); //ユーザーのIDプロパティiuserservice service = new userserviceimpl(); //サービスレイヤーが提供する登録ユーザーサービスを呼び出して、ユーザー登録サービスを達成するために登録済みユーザーサービスを呼び出します。 string message = string.format( "登録された登録!!秒でログインページに自動的にジャンプします! request.getContextPath()+"/servlet/loginuiservlet"); request.setattribute( "message"、message); request.getRequestDispatcher( "/message.jsp")存在!! //バックグラウンドリクエストに例外を記録します。Setattribute( "Message"、 "申し訳ありません、登録失敗!!"); request.getRequestDispatcher( "/message.jsp")。ユーザーが登録すると、フォームデータが入力されたフォームデータの検証が失敗した場合、サーバーはフォームビーンオブジェクトをエラーメッセージで格納し、フォームデータをリクエストオブジェクトに保存し、register.jspページに送信します。したがって、Register.jspページからリクエストオブジェクトのフォームビーンオブジェクトを取り出し、ユーザーが埋め詰めたフォームアイテムに埋め込まれたフォームデータを再適用し、フォームフォームにエラーが発生したときにプロンプトメッセージを表示する必要があります。
Register.jspページを変更すると、コードは次のとおりです。
<%@ page Language = "Java" PageEncoding = "utf-"%> <!Doctype HTML> <HTML> <HEAD> <HEAD> <TITLE>ユーザー登録</title> </head> <body-align: "center;"> <form action = "$ {pagecontext.request.request.contextpath}メソッド= "post"> <table> <tr> <td> username </td> <td> <% - el expression $ {}を使用して、リクエストオブジェクト(formbean.username)とエラーメッセージ(formbean.errors.username)に保存されているフォームビーンオブジェクトにカプセル化されたフォームデータを抽出します。 value = "$ {formbean.username}"> $ {formbean.errors.username} </td> </tr> <tr> <td>パスワード</td> <td> <入力タイプ= "パスワード" name = "userpwd" " value = "$ {formbean.userpwd}"> $ {formbean.errors.userpwd} </td> </tr> <tr> <td>パスワードの確認</td> <td> <入力タイプ= "パスワード" name = "cundilepwd" " value = "$ {formbean.confirmpwd}"> $ {formbean.errors.confirmpwd} </td> </tr> <td> email </td> <td> <入力タイプ= "テキスト" name = "email" value = "$ {formbean.email}"> $ {formbean.errors.email} </td> </tr> <tr> <td>誕生日</td> <td> <入力タイプ= "テキスト" name = "誕生日" value = "$ {formbean.birthday}"> $ {formbean.errors.birthday} </td> </tr> <tr> <td> <input Type = "reset" value = "clear"> </td> <td> <inputタイプ= "submit" value = "登録"> </td> </ht> </</</</for>この時点で、ユーザー登録機能が開発されました!
次のテストで開発されたユーザー登録機能をテストします。
URLアドレスを入力してください:http:// localhost:8080/webmvcframework/servlet/registeruiservlet register.jspページにアクセスすると、操作効果は次のとおりです。
入力されたフォームアイテムが確認ルールに準拠していない場合、登録できません。操作効果は次のとおりです。
3.4.2。ログイン関数を開発します
1. me.gacl.web.uiパッケージの下にloginuiservletを書き、ユーザーにログインインターフェイスを提供します。
loginuiservletがユーザーリクエストを受信した後、login.jspにジャンプします
loginuiservletのコードは次のとおりです。
packed me.gacl.web.ui; import java.io.ioexception; Import javax.servlet.servletexception; import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletrequest; Import javax.http.httptrequest; javax.servlet.http.httpservletResponse;/*** @author* loginuiservletは、ユーザーのログインインターフェイスを出力する責任があります*ユーザーがloginuiservletにアクセスすると、Web-inf/ページのlogin.jspページにジャンプします* doget(httpservletrequest request、httpservletresponse応答)Servletexception、ioexception {request.getRequestDispatcher( "/web-inf/pages/login.jsp")。 {doget(request、response);}}2。ユーザーログインログインログインページの下の/web-inf/ページ/ディレクトリを書き込む
login.jspページのコードは次のとおりです。
<%@ page Language = "Java" PageEncoding = "utf-"%> <!doctype html> <html> <head> <head> <title> user login </title> </head> <body> <form action = "$ {pagecontext.request.request.contextpath}/loginervlet" "> servelt =" " name = "username"> <br/> password:<入力タイプ= "パスワード" name = "password"> <br/> <入力タイプ= "value =" login "> </form> </body> </html> <form action = "$ {pagecontext.request.contextpath}/servlet/loginservlet" method = "post"> login.jspは、フォームが送信され、処理のためにloginservletに引き渡されることを示します。
3. me.gacl.web.controllerパッケージの下でユーザーログインを処理するためのログインサーブレットを作成する
LoginServletのコードは次のとおりです。
packed me.gacl.web.controller; Import java.io.ioexception; Import javax.servlet.servletexception; Import javax.servlet.http.httpservlet; import.servlet.servlet.http.httpservletrequest; me.gacl.domain.user; import me.gacl.service.iuserservice; Import me.gacl.service.impl.userserviceimpl;/***サーブレットハンドルユーザーログイン**/パブリッククラスのloginervet servletexception、ioexception {//ユーザー文字列で塗りつぶされたログインユーザー名を取得= request.getParameter( "username");パスワード); if(user == null){string message = string.format( "申し訳ありませんが、ユーザー名またはパスワードが間違っています!!もう一度ログインしてください!数秒でログインページに自動的にジャンプします!! <Meta http-equiv = 'refresh' content = '; url =%s' "、request.getContextPath()+"/servlet/loginuiservlet "); request.setattribute(" message "、message); request.getRequestDispatcher("/message.jsp ")。 request.getSession()。setAttribute( "user"、user); string message = string.format( "おめでとう:%s、ログインは成功します!このページは秒単位でホームページにジャンプします! user.getUsername()、request.getContextPath()+"/index.jsp"); request.setattribute( "message"、message); request.getRequestDispatcher( "/message.jsp") {doget(request、response);}}この時点で、ユーザーログイン機能が完了しました。
以下に、開発されたユーザーログイン関数をテストし、URLアドレスを入力します。http:// localhost:8080/webmvcframework/servlet/loginuiservlet login.jspページにアクセスして、正しいユーザー名とパスワードを入力して操作効果は次のとおりです。
入力されたユーザー名とパスワードが正しくない場合、ログインを正常にログインすることはできず、操作効果は次のとおりです。
3.4.3。キャンセル機能を開発します
me.gacl.web.controllerパッケージの下でユーザーログアウトを処理するためのlogoutservletを作成する
LogoutServletのコードは次のとおりです。
packed me.gacl.web.controller; Import java.io.ioexception; Import java.text.messageformat; Import javax.servlet.servletexception; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletletret; javax.servlet.http.httpservletResponse; public class logoutservlet extends httpservlet {public void doget(httpservletrequest request、httpservletresponse応答)Servletexception、ioexception、ioexception {//ユーザーオブジェクトを削除して、ログアウト機能を実装するために格納されているユーザーオブジェクトを削除しますrequest.getSession()。removeattribute( "user"); //文字列には単一の引用符が含まれているため、messageformat.formatメソッドを使用してこの場合の文字列をスプライスする場合に問題があります。 <Meta http-equiv = 'reffery' content = '; url = {}'/> "、request.getContextPath()+"/servlet/loginuiservlet "); system.out.println(tempstr); //出力結果:ログアウトに成功しました! !数秒でログインページに自動的にジャンプします! ! <メタhttp-equiv = reffresh content=;url={}/>System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- content='';url={}''/>","index.jsp") can return normally * <meta http-equiv=''refresh'' content='';url=index.jsp'/>*/String tempStr = MessageFormat.format("Login successfully!! It will automatically jump to the login page in seconds!! <meta http-equiv=''refresh'' content='';url={}''/>", request.getContextPath()+"/servlet/LoginUIServlet");/*** Output result: *Login successfully! ! It will automatically jump to the login page for you in seconds! ! * <meta http-equiv='refresh' content=';url=/webmvcframework/servlet/LoginUIServlet'//System.out.println(tempStr);String message = String.format("Logout successfully!! Automatically jump to the login page in seconds!! <meta http-equiv='refresh' content=';url=%s'/>", request.getContextPath()+"/servlet/LoginUIServlet");request.setAttribute("message",message);request.getRequestDispatcher("/message.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, 応答);}}用户登录成功后,会将登录的用户信息存储在session中,所以我们要将存储在session中的user删除掉,这样就可以实现用户注销了。
用户登录成功后就会跳转到index.jsp页面,在index.jsp页面中放一个【退出登陆】按钮,当点击【退出登陆】按钮时,就访问LogoutServlet,将用户注销。
index.jsp的代码如下:
<%@ page language="java" pageEncoding="UTF-"%><%--为了避免在jsp页面中出现java代码,这里引入jstl标签库,利用jstl标签库提供的标签来做一些逻辑判断处理--%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE HTML><html><head><title>首页</title><script type="text/javascript">function doLogout(){//访问LogoutServlet注销当前登录的用户window.location.href="${pageContext.request.contextPath}/servlet/LogoutServlet";}</script></head><body><h>孤傲苍狼的网站</h><hr/><c:if test="${user==null}"><a href="${pageContext.request.contextPath}/servlet/RegisterUIServlet" target="_blank">注册</a><a href="${pageContext.request.contextPath}/servlet/LoginUIServlet">登陆</a></c:if><c:if test="${user!=null}">欢迎您:${user.userName}<input type="button" value="退出登陆" onclick="doLogout()"></c:if><hr/></body></html>测试开发好的注销功能,效果如下:
到此,所有的功能都开发完成了,测试也通过了。
四、开发总结
通过这个小例子,可以了解到mvc分层架构的项目搭建,在平时的项目开发中,也都是按照如下的顺序来进行开发的:
1、搭建开发环境
1.1 创建web项目
1.2 导入项目所需的开发包
1.3 创建程序的包名,在java中是以包来体现项目的分层架构的
2、开发domain
把一张要操作的表当成一个VO类(VO类只定义属性以及属性对应的get和set方法,没有涉及到具体业务的操作方法),VO表示的是值对象,通俗地说,就是把表中的每一条记录当成一个对象,表中的每一个字段就作为这个对象的属性。每往表中插入一条记录,就相当于是把一个VO类的实例对象插入到数据表中,对数据表进行操作时,都是直接把一个VO类的对象写入到表中,一个VO类对象就是一条记录。每一个VO对象可以表示一张表中的一行记录,VO类的名称要和表的名称一致或者对应。
3、开发dao
3.1 DAO操作接口:每一个DAO操作接口规定了,一张表在一个项目中的具体操作方法,此接口的名称最好按照如下格式编写:“I表名称Dao”。
├DAO接口里面的所有方法按照以下的命名编写:
├更新数据库:doXxx()
├查询数据库:findXxx()或getXxx()
3.2 DAO操作接口的实现类:实现类中完成具体的增删改查操作
├此实现类完成的只是数据库中最核心的操作,并没有专门处理数据库的打开和关闭,因为这些操作与具体的业务操作无关。
4、开发service(service 对web层提供所有的业务服务)
5、开发web层
以上内容是小编给大家介绍的JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式),希望对大家有所帮助!