ページの先頭行へ戻る
Interstage Business Application Server オープンJavaフレームワークユーザーズガイド Java EE 7編
FUJITSU Software

3.3.4 Web機能

Web機能について説明します。

3.3.4.1 MVCフレームワーク

Spring Frameworkが提供するMVCフレームワークは、処理の中核を担うModel(M)と画面への表示・出力を担うView(V)、入力内容に基づいてModelとViewを制御するController(C)の3要素を組み合わせたMVCモデル2を採用し、Webアプリケーション開発を容易にする事を目的としたフレームワークです。

OSS版のSpring Frameworkは以下の2つのMVCフレームワークを持っています。

本製品が提供するSpring Frameworkでは、Spring Web MVCフレームワークのみをサポートします。

Webアプリケーション開発をサポートするSpring Web MVCフレームワークでは、以下の機能を提供します。

Spring Web MVCフレームワークは上記の機能によって、Webアプリケーション開発を支援します。

3.3.4.2 JavaScript Object Notation(JSON)

Spring MVCのWebアプリケーションで、Jacksonを利用してJSON形式のリクエストを受けることができます。

json2Viewの宣言:

@Configuration
public class ViewConfiguration { @Bean(name="json2View") @Lazy(value=true) public View json2View() { MappingJackson2JsonView jsonView = new MappingJackson2JsonView(); jsonView.setExtractValueFromSingleKeyModel(true); jsonView.setModelKey("JsonModelKey"); return jsonView; } … }

Json2Viewを利用して、JSONのresponseを戻します。

@RequestMapping(value="/user/{userId}", method=RequestMethod.GET)
public ModelAndView findUser(@PathVariable("userId") String userId) { ModelAndView mav = new ModelAndView("json2View"); User user = userServcie.findUser(userId); mav.addObject("JsonModelKey", user); return mav; }

注) Contextが"json2View"という名前で宣言されたJson2Viewを探せるように、下記ViewResolverを宣言してください。

@Bean
public BeanNameViewResolver beanNameViewResolver(){ BeanNameViewResolver beanNameViewResolver = new BeanNameViewResolver(); beanNameViewResolver.setOrder(0); return beanNameViewResolver; }

jQueryとJacksonの連携もできます。下記に例を示します。

<html>
    <head>
        <script type="text/javascript" src="xxx/jquery.js"></script>
        <script>
            function displayJson(result) {
                $.each(result, function(field, value) {
                    var newTh = $("<th></th>").text(field);
                    $("#fields").append(newTh);
                    var newTd = $("<td></td>").text(value);
                    $("#values").append(newTd);
                });
            }
            $(document).ready( function() {
                $.getJSON("xxx/user/ユーザーID", function(result) {
                    displayJson(result);
                });
            });
        </script>
    </head>
    <body>
        <table border="1">
            <tr id="fields"></tr>
            <tr id="values"></tr>
        </table>
    </body>
</html>

3.3.4.3 WebSocket連携

Java EE 7の標準機能であるJava API for WebSocketと連携できます。

Spring FrameworkのWebSocket連携機能は、Spring MVCベースの実装ができます。また、SockJSを使用することで、WebSocketに対応していないブラウザでもWebSocket連携ができます。

WebSocket連携を使用することで、Spring MVCと同様の方法でWebアプリケーションの実装が可能です。

Spring Frameworkで動作するWebSocketアプリケーションを作成するためには、下記のアプリケーションが必要です。

  • ハンドラークラス

  • 設定クラス

ハンドラークラスは、発行されたイベントに対応した処理を実装します。

送信を行うデータに応じてTextWebSocketHandler、BinaryWebSocketHandlerを継承して作成してください。

ハンドラクラスの作成:

テキストデータを扱う場合

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class TestHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession webSocketSession, TextMessage textMessage) throws Exception { // 文字列を送信する場合は、ここに処理を実装します。 webSocketSession.sendMessage(textMessage); } }

バイナリデータを扱う場合

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
public class TestHandler extends BinaryWebSocketHandler{ @Override public void handleBinaryMessage(WebSocketSession webSocketSession, BinaryMessage binaryMessage) throws Exception  { // バイナリデータを送信する場合は、ここに処理を実装します。 webSocketSession.sendMessage(binaryMessage); } }

設定クラスには、WebSocket上のリクエストを処理するハンドラーを登録する必要があります。WebSocketConfigurerインターフェースを実装して、クラスにConfigurationアノテーションとEnableWebSocketアノテーションを設定してください。

設定クラス:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { // イベントを処理するハンドラーを設定します。 registry.addHandler(new testHandler(), "/echo"); } @Bean public WebSocketHandler testHandler() { return new TestHandler(); } }