ページの先頭行へ戻る
Interstage Business Application Server 12.0.0 オープン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 4.3のWebSocket連携機能は、Spring MVCベースの実装ができます。また、SockJSを使用することで、WebSocketに対応していないブラウザでもWebSocket連携ができます。

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

Spring Framework 4.3で動作する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();
    }
}