目次
1. 統合原則
2. ガイドパッケージ (41)
1. Hibernate Persist API Java 永続化仕様 (インターフェース)
(1) struts-blank.war/WEB-INF/lib/*
( 2) struts 統合 Spring プラグイン パッケージ
3. spring。
ネイトjdbc | c3p0 | spring-orm
(5)junit4テストの統合
struts2-spring-plugin-2.3.24.jar
ApplicationContext.xml:
七、spring整合hibernate
  1.整合原理
  2.在spring中配置sessionFactory
  (1)配置方案一:(了解)
  (2)配置方案二:(推荐)" >  (2)配置方案二:(推荐)
八、spring整合c3p0连接池
  1.配置db.properties
  2.引入连接池到spring中
  3.将连接池注入给SessionFactory
九、spring整合hibernate环境操作数据库
  1.Dao类创建:继承HibernateDaoSupport
  2.hibernate模板的操作
  (1)execute
  (2)findByCriteria
  3.spring中配置dao
十、spring的aop事务
  1.准备工作
  2.xml配置aop事务
  (1)配置通知
  (2)配置织入
  3.注解配置aop事务
  (1)开启注解事务
  (2)Service类中使用注解
十一、扩大session作用范围
  1.配置filter
十二、练习:用户登录
  1.struts.xml核心配置
  2.Action代码
  2.Service核心代码
  3.Dao核心代码
ホームページ Java &#&チュートリアル SSH における 3 つの主要なフレームワークの統合の詳細な説明

SSH における 3 つの主要なフレームワークの統合の詳細な説明

Jul 18, 2017 am 10:07 AM
javaee 統合する

SSH は JavaWeb の古典的なフレームワークです 100% の人が SSH フレームワークを知っている必要があるとは言えませんが、フレームワークと言えば ssh が挙げられます。非常に簡単な SSH フレームワークの例を示します。フレームワークを統合するときは、統合前に各フレームワークを個別にテストすることに注意する必要があります。そうしないと、統合後の問題のトラブルシューティングが困難になります。
環境: Windows + MyEclipse + JDK1.7 + Tomcat7 + MySQL
コードはテスト済みです。いくつかの場所で明確に説明していないため、エラーがある場合は、メッセージを残してください。

1. 統合原則

2. ガイドパッケージ (41)

1. Hibernate Persist API Java 永続化仕様 (インターフェース)

(3) データベースドライバー

2.struts2

(1) struts-blank.war/WEB-INF/lib/*

注: javassist-3.18.1-GA.jar パッケージと休止状態の間の重複 (上位バージョンのみを保持)

( 2) struts 統合 Spring プラグイン パッケージ

注: このパッケージがインポートされると、struts2 が開始され、Spring コンテナーが見つからない場合は例外がスローされます

3. spring。

(1) Basic: 4+2

expression | log4j (2) web package

ネイトjdbc | c3p0 | spring-orm

(5)junit4テストの統合

spring-test

4. タグライブラリ

標準.jar

3 つの個別の設定 Spring コンテナ

1. applicationContext.xml を作成し、制約をインポートします (4) aop tx

2. プロジェクトから開始するように Spring を設定します | )

<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans" 
        xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans  
                             http://www.springframework.org/schema/context/spring-context-4.2.xsd 
                             http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
                             http://www.springframework.org/schema/tx/spring-tx-4.2.xsd "><bean name="userAction" class="cn.xyp.web.action.UserAction"></bean></beans>
ログイン後にコピー

4. struts2を個別に設定する

1. struts2のメイン設定ファイル(struts.xml)を設定する

  <!-- 让spring随web启动而创建的监听器 -->
  <listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 配置spring配置文件位置参数 -->
  <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
ログイン後にコピー

2. struts2のコアフィルターをweb.xmlに設定する

5 . struts2とspringを統合します

1. パッケージをインポートします(インポート済み)

struts2-spring-plugin-2.3.24.jar

2. 設定定数

31行目から始まるデフォルトの設定ファイルを見て変数を見つけます設定する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="crm" namespace="/" extends="struts-default"><action name="UserAction_*" class="cn.xyp.web.action.UserAction" method="{1}"><result name="success">/success.jsp</result></action></package></struts>
ログイン後にコピー
Springはアクションのライフサイクルを完全に管理します

4. 統合ソリューション2: Springはアクションの作成とアセンブリを担当します。 (推奨)

ApplicationContext.xml:

  <!-- struts2核心过滤器 -->
  <filter>  <filter-name>struts2</filter-name>  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern>
  </filter-mapping>
ログイン後にコピー

struts.xml:

### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
###       Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
# struts.objectFactory = spring

### specifies the autoWiring logic when using the SpringObjectFactory.
### valid values are: name, type, auto, and constructor (name is the default)
struts.objectFactory.spring.autoWire = name
ログイン後にコピー

6.別途hibernateを設定します

1. エンティティクラスとormメタデータをインポートします

例:User .java
    <!-- #  struts.objectFactory = spring    将action的创建交给spring容器    
            struts.objectFactory.spring.autoWire = name spring负责装配Action依赖属性--><constant name="struts.objectFactory" value="spring"></constant>
ログイン後にコピー

User.hbm.xml:

        <!-- 整合方案1:class属性上仍然配置action的完整类名
                struts2仍然创建action,由spring负责组装Action中的依赖属性         --><action name="UserAction_*" class="cn.xyp.web.action.UserAction" method="{1}" ><result name="toHome" type="redirect" >/index.htm</result><result name="error" >/login.jsp</result></action>
ログイン後にコピー
2.メイン設定ファイル(hibernate.xml)を設定します

    <!-- action --><!-- 注意:Action对象作用范围一定是多例的.这样才符合struts2架构 --><bean name="userAction" class="cn.itcast.web.action.UserAction" scope="prototype" ><property name="userService" ref="userService" ></property></bean>
ログイン後にコピー

 

七、spring整合hibernate

  1.整合原理

   将sessionFactory对象交给spring容器管理

  2.在spring中配置sessionFactory

  (1)配置方案一:(了解)

    <!-- 加载配置方案1:仍然使用外部的hibernate.cfg.xml配置信息 --><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" ><property name="configLocation" value="classpath:hibernate.cfg.xml" ></property></bean>
ログイン後にコピー

  (2)配置方案二:(推荐)

    <!-- 加载配置方案2:在spring配置中放置hibernate配置信息 --><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" ><!-- 将连接池注入到sessionFactory, hibernate会通过连接池获得连接 --><property name="dataSource" ref="dataSource" ></property><!-- 配置hibernate基本信息 --><property name="hibernateProperties"><props><!--  必选配置 --><prop key="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</prop><prop key="hibernate.connection.url" >jdbc:mysql:///crm_32</prop><prop key="hibernate.connection.username" >root</prop><prop key="hibernate.connection.password" >1234</prop> <prop key="hibernate.dialect" >org.hibernate.dialect.MySQLDialect</prop><!--  可选配置 --><prop key="hibernate.show_sql" >true</prop><prop key="hibernate.format_sql" >true</prop><prop key="hibernate.hbm2ddl.auto" >update</prop></props></property><!-- 引入orm元数据,指定orm元数据所在的包路径,spring会自动读取包中的所有配置 --><property name="mappingDirectoryLocations" value="classpath:cn/itcast/domain" ></property></bean>
ログイン後にコピー

 

八、spring整合c3p0连接池

  1.配置db.properties

jdbc.jdbcUrl=jdbc:mysql:///xyp_crm
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=123456
ログイン後にコピー

  2.引入连接池到spring中

    <!-- 读取db.properties文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 配置c3p0连接池 --><bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" ><property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property><property name="driverClass" value="${jdbc.driverClass}" ></property><property name="user" value="${jdbc.user}" ></property><property name="password" value="${jdbc.password}" ></property></bean>
ログイン後にコピー

  3.将连接池注入给SessionFactory

    <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" ><!-- 将连接池注入到sessionFactory, hibernate会通过连接池获得连接 --><property name="dataSource" ref="dataSource" ></property>
ログイン後にコピー

 

九、spring整合hibernate环境操作数据库

  1.Dao类创建:继承HibernateDaoSupport

   注意:项目中要确保使用统一版本。

  

//HibernateDaoSupport 为dao注入sessionFactorypublic class UserDaoImpl extends HibernateDaoSupport implements UserDao {
ログイン後にコピー

  2.hibernate模板的操作

  (1)execute

    @Overridepublic User getByUserCode(final String usercode) {//HQLreturn getHibernateTemplate().execute(new HibernateCallback<User>() {
            @Overridepublic User doInHibernate(Session session) throws HibernateException {
                    String hql = "from User where user_code = ? ";
                    Query query = session.createQuery(hql);
                    query.setParameter(0, usercode);
                    User user = (User) query.uniqueResult();return user;
            }
        });
ログイン後にコピー

  (2)findByCriteria

        //CriteriaDetachedCriteria dc = DetachedCriteria.forClass(User.class);
        
        dc.add(Restrictions.eq("user_code", usercode));
        
        List<User> list = (List<User>) getHibernateTemplate().findByCriteria(dc);            if(list != null && list.size()>0){return list.get(0);
        }else{return null;
        }
ログイン後にコピー

  3.spring中配置dao

    <!-- Dao --><bean name="userDao" class="cn.xyp.dao.impl.UserDaoImpl" ><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean>
ログイン後にコピー

 

十、spring的aop事务

  1.准备工作

    <!-- 核心事务管理器 --><bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager" ><property name="sessionFactory" ref="sessionFactory" ></property></bean>
ログイン後にコピー

  2.xml配置aop事务

  (1)配置通知

    <!-- 配置通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager" >
    <tx:attributes><tx:method name="save*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="persist*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="modify*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="delete*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="remove*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="get*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />
    <tx:method name="find*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />
    </tx:attributes>
    </tx:advice>
ログイン後にコピー

  (2)配置织入

    <!-- 配置将通知织入目标对象
    配置切点
    配置切面 --><aop:config>
    <aop:pointcut expression="execution(* cn.itcast.service.impl.*ServiceImpl.*(..))" id="txPc"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPc" />
    </aop:config>
ログイン後にコピー

  3.注解配置aop事务

  (1)开启注解事务

    <!-- 开启注解事务 --><tx:annotation-driven transaction-manager="transactionManager" />
ログイン後にコピー

  (2)Service类中使用注解

@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)public class UserServiceImpl implements UserService{
ログイン後にコピー
    @Override
    @Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)public void saveUser(User u) {
        ud.save(u);
    }
ログイン後にコピー

 

十一、扩大session作用范围

  1.配置filter

   为了避免使用懒加载时出现no-session问题.需要扩大session的作用范围。

  <!-- 扩大session作用范围
      注意: 任何filter一定要在struts的filter之前调用
      因为struts是不会放行的   -->
   <filter>  <filter-name>openSessionInView</filter-name>  <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
  </filter>

  <filter-mapping>  <filter-name>openSessionInView</filter-name>  <url-pattern>/*</url-pattern>
  </filter-mapping>
ログイン後にコピー

 

十二、练习:用户登录

  1.struts.xml核心配置

<struts><!-- #  struts.objectFactory = spring    将action的创建交给spring容器    
            struts.objectFactory.spring.autoWire = name spring负责装配Action依赖属性--><constant name="struts.objectFactory" value="spring"></constant><package name="crm" namespace="/" extends="struts-default" ><global-exception-mappings><exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping></global-exception-mappings> <!-- 
             整合方案:class属性上填写spring中action对象的BeanName
                 完全由spring管理action生命周期,包括Action的创建
                 注意:需要手动组装依赖属性          --><action name="UserAction_*" class="userAction" method="{1}" ><result name="toHome" type="redirect" >/index.htm</result><result name="error" >/login.jsp</result></action></package></struts>
ログイン後にコピー

  2.Action代码

public class UserAction extends ActionSupport implements ModelDriven<User> {private User user = new User();    private UserService userService ;    public void setUserService(UserService userService) {this.userService = userService;
    }
    public String login() throws Exception {
    //
    1 调用Service执行登陆逻辑User u = userService.getUserByCodePassword(user);
    //
    2 将返回的User对象放入session域ActionContext.getContext().getSession().put("user", u);//
    3 重定向到项目首页return "toHome";
    }

    @Overridepublic User getModel() {return user;
    }

}
ログイン後にコピー

  2.Service核心代码

    public User getUserByCodePassword(User u) {
    // 1 根据登陆名称查询登陆用户User existU = ud.getByUserCode(u.getUser_code());// 2 判断用户是否存在.不存在=>抛出异常,提示用户名不存在if (existU == null) {throw new RuntimeException("用户名不存在!");
        }
        // 3 判断用户密码是否正确=>不正确=>抛出异常,提示密码错误if (!existU.getUser_password().equals(u.getUser_password())) {throw new RuntimeException("密码错误!");
        }
        // 4 返回查询到的用户对象return existU;
    }
ログイン後にコピー

  3.Dao核心代码

    public User getByUserCode(final String usercode) {
    //CriteriaDetachedCriteria dc = DetachedCriteria.forClass(User.class);
        dc.add(Restrictions.eq("user_code", usercode));
        List<User> list = (List<User>) getHibernateTemplate().findByCriteria(dc);        if(list != null && list.size()>0){return list.get(0);
        }else{return null;
        }
    }
ログイン後にコピー

以上がSSH における 3 つの主要なフレームワークの統合の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Spring Boot と NoSQL データベースの統合と使用 Spring Boot と NoSQL データベースの統合と使用 Jun 22, 2023 pm 10:34 PM

インターネットの発展に伴い、ビッグデータ分析とリアルタイム情報処理が企業にとって重要なニーズとなっています。このようなニーズを満たすために、従来のリレーショナル データベースはビジネスやテクノロジー開発のニーズを満たせなくなりました。代わりに、NoSQL データベースを使用することが重要なオプションになっています。この記事では、最新のアプリケーションの開発と展開を可能にする、NoSQL データベースと統合された SpringBoot の使用について説明します。 NoSQL データベースとは何ですか? NoSQL は SQL だけではありません

Dockerコンテナを使用したJavaEEアプリケーションのデプロイ Dockerコンテナを使用したJavaEEアプリケーションのデプロイ Jun 05, 2024 pm 08:29 PM

Docker コンテナを使用した Java EE アプリケーションのデプロイ: Dockerfile を作成してイメージを定義し、イメージを構築し、コンテナを実行してポートをマップし、ブラウザでアプリケーションにアクセスします。サンプル JavaEE アプリケーション: REST API はデータベースと対話し、Docker 経由でデプロイ後にローカルホストでアクセスできます。

UniApp は Vue.js フレームワークの完全な統合を実現します UniApp は Vue.js フレームワークの完全な統合を実現します Jul 04, 2023 pm 08:49 PM

UniApp は、Vue.js フレームワークの完璧な統合を実現します はじめに: UniApp は、Vue.js フレームワークに基づくクロスプラットフォーム開発ツールであり、Vue.js プロジェクトを、iOS、Android などの複数の異なるプラットフォーム用のアプリケーションにコンパイルできます。小さなプログラムなどUniApp の利点は、開発者が同時に複数のプラットフォームに適応するコード セットを 1 つだけ作成できるため、開発効率が向上し、開発コストが削減されることです。以下では、UniApp を使用して Vue.js フレームワークの完全な統合を実現する方法を紹介します。

Vue2 と比較した Vue3 の変更点: より強力なネットワーク リクエスト ライブラリの統合 Vue2 と比較した Vue3 の変更点: より強力なネットワーク リクエスト ライブラリの統合 Jul 08, 2023 pm 08:34 PM

Vue2 と比較した Vue3 の変更点: より強力なネットワーク リクエスト ライブラリの統合 Vue.js の開発と更新が続く中、Vue.js の次のバージョンである Vue3 には、いくつかの興味深い変更と改善が加えられています。最も重要な変更の 1 つは、より強力なネットワーク リクエスト ライブラリの統合です。 Vue2 では、通常、ネットワーク リクエストを作成するために axios などのサードパーティ ライブラリを使用しますが、Vue3 では、Vue 開発チームが組み込みのネットワーク リクエスト ライブラリを提供し、より直感的で柔軟な方法を提供します。

javaとjavaeeの違い javaとjavaeeの違い Nov 02, 2023 am 10:50 AM

Java と Javaee の定義と使用、コンポーネントと機能、プラットフォームと環境、アプリケーションのスコープと開発モデルなどが説明されています。詳細な紹介: 1. 定義と目的 Java は、1995 年に Sun Microsystems によって発売されたオブジェクト指向プログラミング言語です。Java は、クロスプラットフォーム、移植性、セキュリティ、シンプルさという特徴を持ち、さまざまなアプリケーションの開発に広く使用されています。 Java EE は Java プラットフォームのエンタープライズ レベルの拡張機能であり、大規模でスケーラブルで信頼性の高いエンタープライズ レベルのアプリケーションなどを開発およびデプロイするように設計されています。

PHPcms を他のシステムと統合するための実践的なヒント PHPcms を他のシステムと統合するための実践的なヒント Mar 15, 2024 am 08:18 AM

PHPcms を他のシステムと統合するための実践的なヒント インターネット技術の継続的な発展に伴い、Web サイト開発の分野はより多様かつ複雑になってきました。実際のプロジェクトでは、異なるシステムを統合する必要がある状況に直面することが多く、これらの問題を解決するには一定のスキルと経験が必要です。この記事では、開発者が課題にうまく対処できるように、PHPcms システムと他のシステムを統合するための実践的なヒントと具体的なコード例を紹介します。 1. 統合の基本原則 システム統合を行う際には、まず以下のことが必要です。

PHP WebDriver の統合: 初心者から熟練者まで PHP WebDriver の統合: 初心者から熟練者まで Jun 15, 2023 am 09:52 AM

インターネットの急速な発展に伴い、Web アプリケーションの需要も増加しており、エンタープライズ アプリケーションの品質を保証する重要な部分として、ソフトウェア テストの重要性がますます高まっています。ただし、従来の手動テスト方法は時間と労力がかかり、エラーが発生しやすくなります。この問題を解決するのが自動テストです。Web アプリケーションの自動テストは一般的なテスト方法になっており、その中でも WebDriver を使用して Web アプリケーションの自動テストを行う方法は非常に一般的です。この記事

JavaEE とコンテナテクノロジー間の互換性の問題 JavaEE とコンテナテクノロジー間の互換性の問題 Jun 03, 2024 pm 05:11 PM

Java EE コンテナ化アプリケーションを使用する場合、セッション状態管理、依存関係注入、リソース プーリング、セキュリティなどの互換性の問題が発生する可能性があります。これらの問題の解決策には、外部セッション ストレージの使用、JNDI の構成、リソース プールの管理、Java EE アプリケーションがコンテナ テクノロジとシームレスに統合され、コンテナ化の利点が得られるようにするためのセキュリティの構成などが含まれます。

See all articles