SpringFramework + Thymeleaf での画面作成#002 [SpringFramework]

■SpringFramework でのMVC実装
■ web.xml を利用しないTomcatアプリの実装
 
 上記について、やってみました。
 View 部分は、Thymeleaf を採用します。
 
 とても参考にさせた頂いたサイトは、こちら 
 
 作成したEclipseの構成は、下図のようになります。
 プロジェクト名、ProtoWebService 略して(pws) 
  

  
 ポイントは、@Configuration を指定した初期設定用クラス
  jp.co.proto.pws.config.WebAppConfig
         
package jp.co.proto.pws.config;

import javax.annotation.Resource;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.thymeleaf.spring3.SpringTemplateEngine;
import org.thymeleaf.spring3.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import jp.co.proto.pws.Application;

/**
* Spring フレームワークの設定
*
*/
@Configuration
@EnableWebMvc
@Import({DbConfig.class})  //データベース設定をインポート
@ComponentScan(basePackageClasses = Application.class)
@PropertySource("classpath:resources/app.properties")
public class WebAppConfig extends WebMvcConfigurerAdapter {

@Resource
private Environment env;

//静的リソースの設定
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}

//テンプレートリゾルバーの設定
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
//NB, selecting HTML5 as the template mode.
resolver.setTemplateMode("HTML5");
resolver.setCacheable(false);
resolver.setCharacterEncoding("UTF-8");
return resolver;
}

//Thymeleaf テンプレートエンジンの設定
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}

//Thymeleaf ビューリゾルバー設定
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
viewResolver.setViewNames(new String[]{"*"});
viewResolver.setCache(false);
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}

//メッセージソースの設定
//WEBページでプロパティファイルを使用できる
//日本語メッセージ:messages_ja.properties
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource
        = new ReloadableResourceBundleMessageSource();
messageSource.setBasename(env.getRequiredProperty("message.source.basename"));
messageSource.setUseCodeAsDefaultMessage(true);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(0);
return messageSource;
}
}

   正直、ほとんど上記サイトのコピペなのですが、
  
 @ComponentScan(basePackageClasses = Application.class)
 この行は、独自です。 
 jp.co.proto.pws 直下に配置している Application を指定することで
 すべてのJavaソースを ComponentScan の対象としています。
 
 @PropertySource("classpath:resources/app.properties") 
 →記述内容で想像がつくと思いますが、Javaのclasspath内に resourcesフォルダを作成し
  その中に app.properties というテキストファイルを配置します。
  このPropertieファイルへDBの接続情報などを記載します。
 
  Propertieの設定内容は、
  org.springframework.core.env.Environmentクラスの getRequiredProperty で String として
  取得可能です。 
 
  こんな感じ
  \workspace\ProtoWebSerice\src\resources
   #message source
message.source.basename=classpath:resources/messages

#master properties:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/master
db.username=test
db.password=admin

#tran DB properties:
kd.db.driver=com.mysql.jdbc.Driver
kd.db.url=jdbc:mysql://127.0.0.1:3306/tran
kd.db.username=test
kd.db.password=admin

#Hibernate Configuration:
hibernate.hbm2ddl.auto=none
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
model.scan.package=jp.co.fourseeds.elm.model
 
 Properties参照クラスにて  
  @javax.annotation.Resource
     private Environment env;
   
  String someValue = env.getRequiredProperty("KEY"); 
 
 DBの接続情報が複数あるのは、複数のDBへ接続するときにDataSourceの指定方法を
 実装するためです。業務では、セキュリティ要件等でDBを物理的に分けるケースがあると
 思いますので、そうしたときの為の実験です。
 具体的には、次回以降に試します。 
 
 ところで、SpringFrameworkの基本は、公式サイトなどに詳細が記載されていますし、
 また、英語ですが YouTubeで、紹介されていたりもします。 

 

SpringFramework + Thymeleaf での画面作成#001 [SpringFramework]

■前準備

最初に確認用の環境つくりを実施します。

利用するSoftのバージョンは下記のとおり。 

 SpringFramework 4.2.1
 Thymeleaf 2.1.3
 Hybernate 5.0.1
 Java 1.8.0_65
 MySQL 5.6(*)
 Tomcat 8.0.26(*)
 Eclipse Java EE IDE for Web Developers.Version:Mars Release (4.5.0)(*)

 *:OSは、Windows7 

 1.最初にJava をインストールします。Javaは脆弱性がよく報告され、パッチが出荷

   されたりしているので基本、最新版を利用しましょう。

   プロジェクトの都合等で旧バージョンが必要な場合、OracleのHP(English)の

   JavaArchiveからバージョンを探してDOWNLOADします。

   DOWNLOADには、Oracleのアカウント(Free)が必要です。

   Javaのインストールが完了したら、Windowsの環境変数へ追加しておきましょう。

   %JAVA_HOME% => C:\Program Files (x86)\Java\jdk1.8.0_65

   ※binまで指定しないように注意が必要です。

        %PATH% へ追加したいときは、逆に\binまで必要です。

   アプリが、java.exeを参照できるように。。。


  ■補足  

   %JAVA_HOME% の定義名は、このとおりとしましょう。

   Tomcatで用意されている起動バッチ(startup.bat)がこの環境変数を参照

    (正確には、startup.bat ← catalina.bat ← setclasspath.bat 

   「setclasspath.bat」の中で参照しているのですが。。。)

   ちなみに、Tomcatのインストール先も環境変数へ設定しますが、定義名は

   %CATALINA_HOME% とします。

   %CATALINA_HOME% \bin にある、上記の.batファイルをテキストエディタで

   参照すれば確認できますが、%JAVA_HOME%と同じ理由です。 

   そういえば、dosバッチファイルで作成されていますが、PowerShell 版に

   そのうち変わったりするのでしょうか?

   PowerShellもそのうちテーマにしたいと思います。   


SpringFramework + Thymeleaf での画面作成 [SpringFramework]

 ■やろうと思うこと
  ・SpringFramework でのMVC実装
    ∟View 部分は、Thymeleaf を採用
  ・web.xml を利用しないTomcatアプリの実装
  ・HTML5での単項目チェック
  ・TABLEタグを利用しないヘッダ入力部、明細部の表現
  ・Hybernate での CRUD操作の実装
    ∟@Queryのバリエーション確認
  ・複数のDatasource(MySQLへ複数のDBを構築)
  ・共通エラー画面の実装(500系InternalErro、404系NotFound)
  ・セッション管理
    ∟画面間のデータ引継ぎ
  ・アクセス制御
    ∟直URL起動時のエラー処理
  ・ログ出力
    ∟ログローテート、SQL発行(Parameter付)、エラー発生時
  ・Eclipseからボタンひとつでリリースファイル(.war)の作成
    ∟稼動には不要なJar、ログファイルの除外など
  ・Tomcat8 と Apache2 の連携
  ・よくないコーディングの自動チェック
    ∟Eclipseプラグイン等で、クラス直下変数の有無、
                  Null参照の可能性などを自動指摘できるか?
  ・踏み込んだDebug
    ∟意図しない変数の共有がされていないかのチェック方法
  ・テストの自動化
    ∟Webプログラムのテスト自動化の可否
  ・プログラムの自動化

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。