Hello Spring World | Hello, Stupid World!

Hello, Stupid World!

いろいろとメモ代わりに書いていきます。

各フレームワーク比較の為、Springをセットアップします。
Springや関連ツールが一緒に入ったエディタ、Spring Tools Suiteを
以下よりインストールします。

http://spring.io/tools

インストール中に「select the instlation path」と出てくる所は
インストール先のフォルダを指定してください。
同じように「select the JDK path」の所ではJDKを
指定して下さい。
入ってなければ一旦キャンセルしてJDKを入れて下さい。

また、Windows7であっても32bit版のJDKでないと動かないようなので
64bit版しか無い人は32bit版を別途入れましょう。

Spring Tools Suite(通称STS)はEclipseベースなので
始めてでもすぐ使えると思います。


インストールが終わったら早速、Springをテストしてみます。

「File」メニュー→「New」→「Spring Project」で
「New Spring Project」ダイアログを開き、中央のTempleates
項目から「Spring MVC Project」を選択します。

SpringはWebシステムだけでなく様々なプロジェクトで使えますが
その中でもSpring MVCはWebフレームワーク部分になります。
Struts等と同じですね。

Templateからプロジェクトを作ったら実行します。

実行に必要なWebサーバを選択する必要がありますが
STSにはVMWare vFabric tc ServerというTomcatを
Spring用に特化したものが最初から入っているので
それを選べばいいでしょう。


Templateで作ったプロジェクトを実行すると
上記の「Hello World!」画面が表示されます。

どのような作りになっているか、ソースを見ていきます。

「Web.xml」

<servlet>
 <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
  </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>


DispatcherServletというコントローラを登録します。
StrutsのActionServlet同様にまずはこのサーブレットが
リクエストを受けて全ての制御を行います。
引数として設定ファイルの位置を指定している所も
同じですね。

「servlet-context.xml」
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <beans:property name="prefix" value="/WEB-INF/views/" />
 <beans:property name="suffix" value=".jsp" />
</beans:bean>

DispatcherServletへ渡す設定ファイルです。
ここでは指定文字とビュー(画面)と関連付けを行っています。
上記の場合は例えば"home"という文字が指定された場合に
/WEB-INF/views/home.jspを表示するという意味になります。

「HomeController.java」
@Controller
public class HomeController {
   
 @RequestMapping(value = "/", method = RequestMethod.GET)
 public String home(Locale locale, Model model) {
  ~
  model.addAttribute("serverTime", formattedDate );
  return "home";
 }
}

@Controllerとつける事でコントローラクラスとします。
ブラウザからのリクエストを受けて動き、JSP等を返します。
(StrutsのActionとほぼ同機能)
Strutsと違いPOJO(特定クラスの継承などしないもの)です。

RequestMappingアノテーションにより、どんなURLが指定された
場合に呼ばれるか指定しています。
上記の場合、/(ルート)に対するGETリクエストの
場合にこのhomeメソッドが動くという事です。

Strutsの場合はこのようなリクエストとクラス(メソッド)の
関連をStruts-Configで行っていましたが
SpringMVC含む、Struts以後のフレームワークでは
アノテーションにより関連づけます。

model.addAttributeでリクエストスコープに値をセットし
JSPで参照できるようにしています。

返り値に指定している"home"というのが文字列が
servlet-context.xmlの所で説明した文字です。
"home"と指定した事で/WEB-INF/views/home.jspが表示されます。

「home.jsp」
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<h1>
    Hello world! 
</h1>
<P>  The time on the server is ${serverTime}. </P>


JSPでは、Hello world!と表示すると同時にEL式を使って
コントローラでセットしたリクエストパラメータ
の値を表示しています。

SpringMVCでは基本的な構成はこんな感じになります。
設定ファイルではなくアノテーションにより繋がりを持たせるので
クラスが増えても設定ファイルが膨大になって分かりづらくなったり
サーバの再起動が必要になったりしません。

servlet-context.xmlもプロジェクトで一回設定すれば
クラスが増えたからといって、変更する必要はないので
設定ファイルは変更する必要はなくJavaやJSPに専念できます。
これはSeaser2やJavaEEも同様です。

しばらくはSpring関連(主にSpringMVC)の解説をしていきます。