序文
SSHはフレームワークではなく、複数のフレームワークの統合(Struts+Spring+Hibernate)の統合です。現在、Webアプリケーション向けに人気のあるオープンソース統合フレームワークであり、柔軟でスケーリングしやすいマルチレイヤーWebアプリケーションを構築するために使用されています。
SSHフレームワークを統合するシステムは、プレゼンテーションレイヤー、ビジネスロジックレイヤー、データ永続性レイヤー、ドメインモジュールレイヤー(エンティティレイヤー)の責任の観点から4つのレイヤーに分割されます。
システムの全体的なインフラストラクチャとして、StrutsはMVCの分離を担当します。 Struts Frameworkのモデル部分では、ビジネスジャンプを制御し、Hibernate Frameworkを使用して永続レイヤーのサポートを提供します。一方では、Springは軽量のIOCコンテナであり、オブジェクトとオブジェクト間の依存関係の発見、配置、作成、および管理を担当し、一方で、ストラットと冬眠をより良くすることができます。
MyeClipseを使用して、3つの主要なSSHフレームワークを統合し、バージョンに対応するユーザー登録をシミュレートするデモを実装します。
Strutsバージョン:2.1;
春のバージョン:3.1;
冬眠バージョン:3.3;
1。統合前の準備
1.次のようにWebプロジェクトを作成します。
注:アクションをサポートするパッケージ名は「アクション」でなければならず、アクションクラスはアクションで終了する必要があります。つまり、上記の図に示すように、フォームはxxxactionのようなものです。
2。データベースとテーブルを作成します。
データベースSSHDEMOを作成します。テーブルt_user(id intプライマリキー、ユーザー名varchar(10)、パスワードvarchar(20))の作成
3.データベース接続プールC3P0JARパッケージをインポートし、ダウンロードしてクリックしてください。
c3p0-0.9.2-pre1.jar、mysql-connector-java-5.1.13-bin.jar
2。ストラットフレームワークの構成:
1.プロジェクトを選択し、右クリックして選択します。MyeClipse->プロジェクトファセット[機能] - >次のように、Apache Struts(2.x)ファセットをインストールします。
2。バージョンを選択します。ここで2.1を選択し、次のように「仕上げ」をクリックします。
3.上記の手順を完了した後、SRCディレクトリには追加のstruts.xmlファイルがあり、次の内容があることがわかります。
<?xml version = "1.0" encoding = "utf-8"?> <!doctype struts public " - // apacheソフトウェア財団// dtd struts構成
4。Web-INFディレクトリのweb.xmlファイルには、次のように、strutsフィルター用の構成コードの追加セクションがあります。
5。上記の図を参照して、 *.criftionを "/ *"に変更すると、この時点でStrutsフレームワークが構成されています。
3。スプリングフレームワークの構成:
1.ストラットの構成を参照して、プロジェクトを選択し、右クリックして選択し、myeclipse->プロジェクトファセット[機能] - >スプリングファセットをインストールし、バージョンを選択し、次のように3.1を選択します。
2. [完了]をクリックすると、SRCディレクトリにApplicationContext.xmlファイルがあり、spring-form.tldおよびspring.tldファイルがWeb-INFディレクトリにあり、spring構成に関連するコードがWeb.xmlファイルに追加されていることがわかります。スプリングフレームワークの構築は基本的に完了しました(名前空間の導入については後で説明します)。
4。冬眠フレームワークの構成:
1.ストラットの構成を参照し、プロジェクトを選択し、右クリックして[myeclipse] - >プロジェクトファセット[機能] - > hibernatefacetをインストールし、バージョンを選択し、次のようにここで3.3を選択します。
2.「完了」をクリックすると、以下に示すように、SRCディレクトリに追加のデフォルトパッケージ(削除できます)とweb.xmlファイルにコードがあることがわかります(後で再構成されます)。
3.「@Entity」アノテーションをサポートするJARパッケージをインポートします。プロジェクトを選択し、右クリックしてmyeclipse->プロジェクトファセット[機能] - >管理...を管理し、次の図の手順に従ってください。
上記の手順を完了した後、3つの主要なフレームワークが基本的に構築され、その後統合されます。
5。統合
1. ApplicationContext.xmlが肥大化しすぎて管理しやすいように見えるようにするために、Hibernate関連の構成を別の.xmlファイルに保存し、ApproachContext.xmlにインポートします。特定の手順:
(1)SRCディレクトリ(ApplicationContext.xmlと同じレベル)にhibernateContext.xmlという名前のファイルを作成し、ApplicationContext.xmlのコンテンツをコピーしてから変更します。
(2)hibernatecontext.xmlファイルの内容:
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" XMLNS:P = "http://www.springframework.org/schema/p" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/beans/beans <! - sessionfactory configuration-> <bean id = "sessionfactory"> <! - dataSourceプロパティはApplicationContext.xmlファイルで構成されます。 ref = "DataSource"> </property> <! - Hibernate関連の構成項目を設定 - > <プロパティ名= "hibernateProperties"> <! - プロパティのプロパティタイプ - > <! - キーはhibernate.prefix-> <props> <prop key = "hibernate.dialect"> org.hibernate.dialect.mysqldialect </prop> <! - show_sqlはsqlステートメントを印刷する目的です - > <prop key = "hibernate.show_sql"> true </prop> < <! - a)作成ドロップ:プログラムを実行するときにデータテーブルを作成し、実行後にテーブルを削除します。実際の開発では、テストに使用されることがよくありますb)作成:プログラムが実行されるたびにデータテーブルを再作成するc)更新:プログラムを実行すると、テーブルが作成されない場合、データテーブルが作成され、データテーブルのフィールドは、エンティティクラスの属性の増加(開発環境)の属性の増加に従って自動的に追加されると判断されます。テーブル内のフィールドと矛盾すると、エラーが報告されます(生産環境) - > <prop key = "hibernate.hbm2ddl.auto">検証</prop> </props> </property> <! - hibernateのエンティティクラスを構成 - > <プロパティ名= <packageStoscan "> <!その値は一般に対応するBeanパッケージのフルネームであり、Beanパッケージのクラスは一般にデータベースのテーブルに対応しています - > <リスト> <値> com.beauxie.bean </value> </list> </property> </bean> <! - hibernateTemplateテンプレートを構成 - > <> < ref = "SessionFactory"> </property> </bean> </beans>
(3)ApplicationContext.xm(hibernateContext.xmlで構成されているため)の「sessionfactory」の構成を削除し、変更されたhibernatecontext.xmlコンテンツをインポートします。インポート後、ApplicationContext.xmlのコンテンツは次のとおりです。
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" XMLNS:P = "http://www.springframework.org/schema/p" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/beans/beans <bean id = "dataSource"> </bean> <! - 他のスプリング構成ファイルをインポートします。それらが1つのファイルに配置されている場合、それらは肥大化します - > <リソースをインポート= "hibernatecontext.xml"/> </beans>
2。アプリケーションContext.xmファイルの元のDataSourceに基づいて、その構成(データベース名、ユーザー名、パスワードなど)を変更します(注:値タグにはスペースを含むか、入力してはなりません!! ):
<bean id = "dataSource"> <プロパティ名= "jdbcurl"> <! - 値タグの代わりに値属性を直接使用する場合は、脱出する必要があります。 <span style = "color:#ff0000;">タグはスペースやキャリッジの返品を含めてはなりません。スペースを「</span>に変換し、データソースが書き換えられない限りデータベースが接続できないためです。 <値> <![cdata [jdbc:mysql:// localhost:3306/sshdemo?useunicode = true&charatereCoding = utf8&useserverprepstmts = t Rue&prepstmtcachesqllimit = 256&cacheprepstmts = true&prepstmtcachesize = 256&rewriteBatchedStatements = true]]> </value> </property> <property name = "driverclass" value = "com.mysql.jdbc.driver"> </property name> <property name = "user" value = "root"> </property name> <property name = "password" value = "root"> </property name = "acchireincrement" value = "3" 3 "3"> name = "minpoolsize" value = "2"> </property> <property name = "maxpoolsize" value = "10"> </property> </bean>
3.アプリケーションContext.xmで、スプリングコンポーネントの注釈をクラスに追加するように、スプリングスキャナーを構成すると、Beanを自動的にロードできます。特定の手順は次のとおりです。(1)コンテキスト名空間を紹介し、コンテキストタグをサポートし、下部の「名前空間」をクリックして、コンテキスト項目を確認します。
(2)スプリングスキャナーを構成します:
<! - スプリングスキャナーを構成し、クラスにスプリングコンポーネントアノテーションを追加して、豆を自動的にロードする - >
<コンテキスト:Component-Scanベースパッケージ= "com.beauxie.action、com.beauxie.service、com.beauxie.dao">
</context:component-scan>
この時点で、3つの主要なSSHフレームワーク環境が構築されており、次のステップはSSHフレームワークに基づいてユーザー登録を実装することです。
6。ケース:ユーザー登録の簡単な模倣
1。フロントデスク登録ページコード、index.jsp:
<%@ page Language = "java" import = "java.util。*" pageencoding = "utf-8"%> <%string path = request.getContextPath(); string basepath = request.getscheme() + "://" + request.getServername() + ":" + request.getServerport() + path + "/"; %> <!doctype html public " - // w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>"> <title>登録へようこそ</title> <meta http-equiv = "pragma" content = "cach content = "no-cache"> <meta http-equiv = "compers" content = "0"> <meta http-equiv = "keywords" content = "keyword1、keyword2、keyword3"> <meta http-equiv = "description" content = "this is my page"> <! href = "styles.css"> - > </head> <body> <form action = "$ {pagecontext.request.contextpath}/user/regist" method = "post"> <! - ユーザー属性を自動的に読み込むこともできますが、ここではポイントではありません。 name = "username"> <br>パスワード:<入力タイプ= "パスワード" name = "password"> <br> <input "value ="登録 "> </form> </body> </html>2.ユーザークラスコード:
パッケージcom.beauxie.bean; javax.persistence.entityをインポートします。 javax.persistence.idをインポートします。 javax.persistence.tableをインポートします。 /** * @author beauxie *ここで、ユーザーのプロパティはt_userテーブルのフィールドと同じである必要があります *そうでなければ、異なるプロパティの対応するテーブルのフィールドを手動で指定する必要があります */ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @etabas table @table(name = "t_user")// private int id; //ユーザーIDプライベート文字列ユーザー名; //ユーザー名プライベート文字列パスワード; //パスワードpublic int getid(){return id; } public void setid(int id){this.id = id; } public string getUsername(){return username; } public void setUsername(string username){this.username = username; } public string getPassWord(){パスワードを返します。 } public void setPassword(string password){this.password = password; }} 3.USERDAOクラスコード:
パッケージcom.beauxie.dao; Import org.springframework.beans.factory.annotation.autowired; import org.springframework.orm.hibernate3.hibernateTemplate; Import org.springframework.stereotype.repository; com.beauxie.bean.userをインポートします。 /*** @author beauxie* daoレイヤー、データベースで動作する*/ @repository //このプロパティは永続的なレイヤー(通常はdaoレイヤー)に対応します。 Spring構成ファイル。 /***ユーザー登録、つまり、テーブルに新しいレコードを追加* @paramユーザー*/public void adduser(user user){//データベースにデータを追加すると、template.save(user)を取得できます。 }} 4.UserServiceクラスコード:
パッケージcom.beauxie.service; Import org.springframework.beans.factory.annotation.autowired; org.springframework.stereotype.serviceをインポートします。 com.beauxie.bean.userをインポートします。 com.beauxie.dao.userdaoをインポートします。 /*** @author beauxie* service layer*/ @service //このプロパティは一般的にサービスレイヤーに対応しています)。つまり、Spring Managementに引き渡され、対応するクラス名にも「s」パブリッククラスユーザーサービス{ @autowired // public void adduser(user user){// dao layer userdao.adduser(user)of dao adduserメソッドを呼び出す; }} 5.使用クラスコード:
パッケージcom.beauxie.action; javax.servlet.http.httpservletrequestをインポートします。 Import org.apache.struts2.servletactionContext; org.apache.struts2.convention.annotation.actionをインポートします。 org.apache.struts2.convention.annotation.namespaceをインポートします。 org.apache.struts2.convention.annotation.resultsをインポートします。 Import org.springframework.beans.factory.annotation.autowired; Import org.springframework.context.annotation.scope; org.springframework.stereotype.controllerをインポートします。 com.beauxie.bean.userをインポートします。 com.beauxie.service.userserviceをインポートします。 /** * @author beauxie * */ @controller //コントロールレイヤーコンポーネント@namespace( "/user")// url prefix @scope( "prototype")//アクションはデフォルトではシングルトンですが、一般的には複数のケースです。 "Struts-default"、so @results({ @result(name = "registsuccess"、location = "/msg.jsp")})public class useraction { @autowired //プライベートユーザーサービスサービスを自動的に挿入します。 // defaults defaults intercept ".action"。action andなしで "@action(value =" regist ") //フォームの送信データ文字列ユーザー名= request.getParameter( "username");文字列パスワード= request.getParameter( "password"); // cenculate userbean user user = new user(); user.setId(1000); user.setusername(username); user.setPassWord(パスワード); // Service Layerメソッドを呼び出して、データベースService.Adduser(user)にレコードを追加します。 //プロンプト情報をリクエストドメインに保存し、request.setattribute( "MSG"、 "おめでとう、登録が成功!<br>登録名:"+username); 「RegistSuccess」を返します。 }} 6。メッセージプロンプトインターフェイス:msg.jspコード、次のように:
<%@ page Language = "java" import = "java.util。*" pageencoding = "utf-8"%> <%string path = request.getContextPath(); string basepath = request.getscheme() + "://" + request.getServername() + ":" + request.getServerport() + path + "/"; %> <!doctype html public " - // w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>"> <title>メッセージプロンプト</title> <meta http-equiv = "pragma" content = "no-cache"> <meta http-equiv = "compers" content = "0"> <meta http-equiv = "keywords" content = "keyword1、keyword2、keyword3"> <meta http-equiv = "description" content = "this is my page"> <! href = "styles.css"> - > </head> <body> $ {msg} </body> </html>7.プロジェクトをサーバーに追加し、サービスを開始し、ブラウザを開き、http:// localhost/sshdemo/user/registにアクセスしてください
8。ユーザー名とパスワードを入力し、[登録]をクリックして結果を表示します。
9.コンソールはSQLステートメントを出力します(出力が設定され、SQLステートメントはHibernateContext.xmlファイルで美化されています):
10。データベースの結果を表示:
この単純なケースは終了しました。フォームと文字化けコードで提出されたデータの検証に問題はありません。将来更新する必要があります。
7。概要:
1. 3つの主要なフレームワークの統合を最初に導入し、次に統合する必要があります。
2。データベースJARパッケージをインポートすることを忘れないでください。
3。アクションクラスはパッケージ名「アクション」の下に配置する必要があり、クラス名は「xxxaction」などのアクションで終了する必要があります。
4. Hibernateを構成するときは、「@Entity」アノテーションをサポートするJARパッケージを必ずインポートしてください。
5. struts.xmlファイルで傍受されたstrutsのリクエストタイプを定義できます。
6. web.xmlファイルのstrutsフィルターのフィルタータイプを定義できます。デフォルトは *.Actionで、 / *に変更する必要があります。
7. ApplicationContext.xmファイルでは、SessionFactory、Hibernate Entityクラス、HibernateTemplateテンプレート、データソースDataSource、およびSpring Scanner(hibernateContext.xmlを含む)を構成する必要があります。
8.各クラスは、対応する注釈を追加する必要があり、実行中の方法も追加する必要があります。
インスタンスソースコードをダウンロード:http://xiazai.vevb.com/201610/yuanma/sshzhuce(vevb.com).rar
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。